Comment faire pour convertir des films mkv en mp4 pour la lecture en continu pour XBox 360
J'ai récemment acheté un Synology Diskstation DS412+, et j'ai un certain nombre de .des films mkv qui je voudrais le convertir/transcodage de fichiers mp4, afin que je puisse les diffuser directement sur ma XBox 360. J'utilise le Frein à main sur mon portable, mais je préfère que cela se produise directement sur mon NAS.
Je suis très rouillé sur Linux et les nouvelles de transcodage, mais le script que j'ai actuellement est la suivante:
#!/bin/bash
for dir in *; do
if test -d "$dir"; then
#echo $dir
for file in "$dir"/*.mkv; do
noextension=${file%.*}.mp4
ffmpeg -y -i "$file" -vcodec copy -acodec copy "$noextension"
done
fi
done
Qui, comme je le comprends, copie simplement les composants audio et vidéo dans le conteneur mkv, et les insère dans un nouveau conteneur mp4. Cela a fonctionné pour plusieurs de mes fichiers, mais il y a un nombre pour lequel cela ne fonctionne pas.
L'exemple suivant est un exemple de la sortie d'un échec à l'exécution:
ffmpeg version UNKNOWN, Copyright (c) 2000-2011 the FFmpeg developers
built on Sep 16 2013 00:45:02 with gcc 4.2.1
configuration: --prefix=/usr/syno --arch=i686 --target-os=linux --cross-prefix=/usr/local/i686-linux-gnu/bin/i686-linux-gnu- --enable-cross-compile --enable-optimizations --disable-yasm --disable-altivec --enable-pic --enable-shared --disable-static --disable-swscale-alpha --disable-ffserver --disable-ffplay --enable-libmp3lame --enable-libfaac --enable-nonfree --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-indev=alsa --disable-outdev=alsa --disable-encoder=dca --disable-encoder=ac3 --disable-encoder=ac3_fixed --disable-encoder=ac3_float --disable-encoder=eac3 --disable-decoder=dca --disable-decoder=eac3 --disable-decoder=truehd --cc=/usr/local/i686-linux-gnu/bin/i686-linux-gnu-ccache-gcc
libavutil 50. 40. 1 /50. 40. 1
libavcodec 52.120. 0 /52.120. 0
libavformat 52.108. 0 /52.108. 0
libavdevice 52. 4. 0 /52. 4. 0
libavfilter 1. 77. 0 / 1. 77. 0
libswscale 0. 14. 0 / 0. 14. 0
[matroska,webm @ 0x80726c0] Estimating duration from bitrate, this may be inaccurate
Seems stream 1 codec frame rate differs from container frame rate: 47.95 (5994/125) -> 23.98 (24000/1001)
...et puis une liste d'entrée chapitre de début et de fin des temps et puis...
Stream #0.0(eng): Audio: aac, 48000 Hz, stereo, s16 (default)
Stream #0.1(eng): Video: h264 (High), yuv420p, 1280x692 [PAR 1:1 DAR 320:173], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
...et puis une liste de sortie chapitre de début et de fin des temps et puis...
Stream #0.0(eng): Video: ![0][0][0] /0x0021, yuv420p, 1280x692 [PAR 1:1 DAR 320:173], q=2-31, 2997 tbn, 23.98 tbc (default)
Stream #0.1(eng): Audio: libfaac, 48000 Hz, stereo (default)
Stream mapping:
Stream #0.1 -> #0.0
Stream #0.0 -> #0.1
Press [q] to stop encoding
[mp4 @ 0x808a020] pts < dts in stream 0
av_interleaved_write_frame(): Invalid data found when processing input
Le support technique XBox site web donne des détails sur les types de fichiers supportés, avec mp4 inclus dans le H. 264 standard: http://support.xbox.com/ar-SA/xbox-360/system/audio-video-playback
J'en suis à un peu de perte. J'ai lu à travers http://www.ffmpeg.org/ffmpeg.html mais le message d'erreur de ffmpeg ne semble pas très utile, et les ressources sont rares, au mieux, quand il s'agit de l'exécution de ce genre de choses sur un Synology Boîte.
J'ai essayé quelques permutations de mon script, tels que:
ffmpeg -i "$file" "$noextension"
et
ffmpeg -y -i "$file" -vcodec mpeg4 -acodec libfaac "$noextension"
Mais ces deux me donner le message d'erreur suivant:
Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
Je suppose que je vais avoir besoin de préciser d'entrée et de sortie les codecs spécifiquement, avec des choses comme le débit, ou l'aspect ratio, mais c'est là d'où je viens décoller.
Toute aide serait grandement appréciée!
OriginalL'auteur Rob Gwynn-Jones | 2014-02-05
Vous devez vous connecter pour publier un commentaire.
Maintenant ça va, en fait il doit y avoir un plus dans le détail de la vidéo qui échoue lors du transcodage. Mais toujours en regardant les erreurs, voici la tente que vous pouvez faire. Je vous préviens qu'il y a l'enfer beaucoup de combinaisons possibles pour la sortie(bitrate,framerate, etc.), mais tout ce que vous avez à décider.
Option 1
Ceci est similaire à
ffmpeg -i ip.mkv op.mp4
mais j'ai ajouté des codecs explicitement.Option 2
Ajouté le bitrate, que vous pouvez modifier selon vos besoin.
Option 3
Ajouté fps de 30.
Vous pouvez également essayer de mélanger de
2 and 3
option.Espère que cette aide.A bientôt.:)
PS: @slhck dit; veuillez mettre à jour ffmpeg en premier et ensuite essayer ces. Aussi tous ces sont
re-encoding
commandes, donc si vous êtes vraiment en leur faveur; utiliser au mieux l'encodeur audio que j'ai illustré.oui c'est le ré-encoder les vidéos; mais ce sont juste solution possible afin d'obtenir la sortie.
En fait, j'ai pas de problème avec le ré-encodage; ma préférence serait plus simple = mieux, mais si la seule solution consiste à ré-encodage alors que c'est bien. Je vais essayer de mettre à jour ffmpeg et de voir comment je vais plus tard.
Wow, j'ai complètement oublié que j'avais posé cette question, et viens de le trouver près de 3 ans plus tard. La réponse, je suis allé à la fin est d'utiliser Plex pour la lecture de vidéos dans n'importe quel format ils viennent, plutôt que de lutter en mp4 pour jouer sur une console XBox 360. J'ai accepté cette réponse comme une bonne partie de l'effort est allé nettement en elle, et avais-je été assez courageux pour persister je suis sûr qu'il aurait été très utile.
OriginalL'auteur BlueSword