Je suis un noob complet du montage vidéo, alors pardonnez-moi si je demande quelque chose de ridicule.
Je reçois des clips vidéo à partir d'un boîtier enregistreur. Les clips sont des fichiers AVI:
Resolution: 1920 x 1080
Frames Per Second: 60
Video Format: ITU H.264
Audio Format: MPEG 1 Audio, Layer 3 (MP3)
La résolution et le FPS sont bien au-delà de ce dont j'ai besoin, j'essaie donc d'exécuter une commande pour réduire les choses:
ffmpeg -i highres.avi -r 30 -s 960x540 lowerres.avi
Cela réussit à me donner la résolution souhaitée, la fréquence d'images et la taille de fichier inférieure, mais cela a également dégradé la qualité beaucoup plus que ce à quoi je m'attendais.
J'ai regardé le nouveau fichier et j'ai trouvé que pour une raison quelconque FFmpeg a converti le format utilisé:
Video Format: FFmpeg MPEG-4
Audio Format: MPEG 1 Audio, Layer 2
Je ne comprends pas pourquoi il n'utiliserait pas les mêmes formats de sortie que les formats d'entrée. J'ai essayé d'utiliser cette commande pour la forcer à utiliser H.264:
ffmpeg -i highres.avi -r 30 -s 960x540 -f h264 lowerresforceh264.avi
Malheureusement, il a échoué avec la sortie suivante:
ffmpeg version 0.7.3-4:0.7.3-0ubuntu0.11.10.1, Copyright (c) 2000-2011 the Libav developers
built on Jan 4 2012 16:21:50 with gcc 4.6.1
configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
WARNING: library configuration mismatch
avutil configuration: --extra-version='4:0.7.3ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdirac --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libvo-aacenc --enable-version3 --enable-libvo-amrwbenc --enable-version3 --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
avcodec configuration: --extra-version='4:0.7.3ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdirac --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libvo-aacenc --enable-version3 --enable-libvo-amrwbenc --enable-version3 --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
avformat configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
avdevice configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
avfilter configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
swscale configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
postproc configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
libavutil 51. 7. 0 / 51. 7. 0
libavcodec 53. 6. 0 / 53. 6. 0
libavformat 53. 3. 0 / 53. 3. 0
libavdevice 53. 0. 0 / 53. 0. 0
libavfilter 2. 4. 0 / 2. 4. 0
libswscale 2. 0. 0 / 2. 0. 0
libpostproc 52. 0. 0 / 52. 0. 0
Input #0, avi, from 'highres.avi':
Metadata:
comment : Quality_GOOD
encoder : Lavf52.64.2
encoded_by : AverMedia_c281_1.7.2
Duration: 00:01:59.28, start: 0.000000, bitrate: 10263 kb/s
Stream #0.0: Video: h264 (High), yuv420p, 1920x1080, 59.94 fps, 59.94 tbr, 59.94 tbn, 119.88 tbc
Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s
[buffer @ 0x8f438a0] w:1920 h:1080 pixfmt:yuv420p
[scale @ 0x8f431e0] w:1920 h:1080 fmt:yuv420p -> w:960 h:540 fmt:yuv420p flags:0x4
[libx264 @ 0x8f0fb40] broken ffmpeg default settings detected
[libx264 @ 0x8f0fb40] use an encoding preset (e.g. -vpre medium)
[libx264 @ 0x8f0fb40] preset usage: -vpre <speed> -vpre <profile>
[libx264 @ 0x8f0fb40] speed presets are listed in x264 --help
[libx264 @ 0x8f0fb40] profile is optional; x264 defaults to high
Output #0, h264, to 'lowerresforceh264.avi':
Stream #0.0: Video: libx264, yuv420p, 960x540, q=2-31, 200 kb/s, 90k tbn, 30 tbc
Stream mapping:
Stream #0.0 -> #0.0
Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
Je ne sais pas pourquoi je ne peux pas faire ça. L'exécution de "ffmpeg -formats" répertoriait le h264 comme celui qu'il pouvait utiliser pour l'entrée et la sortie.
Si quelqu'un pouvait m'orienter dans la bonne direction, je l'apprécierais grandement. Merci.
PS: j'utilise FFmpeg version 0.7.3-4: 0.7.3-0 sur Ubuntu 11.10.
ÉDITER
J'ai trouvé une solution en regardant l'utilisation des presets. Après avoir recherché des informations sur les préréglages, j'ai trouvé le tutoriel suivant pour en discuter:
http://juliensimon.blogspot.com/2009/01/howto-ffmpeg-x264-presets.html
J'avais juste besoin de spécifier le codec et le paramètre de préréglage approprié comme ceci:
ffmpeg -i highres.avi -r 30 -s 960x540 -vcodec libx264 -vpre medium lowerresforceh264vpremedium.avi
J'ai encore quelques ajustements à faire, mais c'est essentiellement ce que je voulais. Merci.
la source
Réponses:
J'essaye d'aider. Tout d'abord, je ne comprends pas pourquoi vous dites que FFMPEG H.264 n'est pas le format d'entrée?
Je ne connais pas assez bien la ligne de commande FFMPEG (y a-t-il quelqu'un qui le sait?;)). Il doit y avoir un commutateur pour l'encodage multipasse. Je sais qu'il existe des préréglages intégrés que vous pourriez probablement utiliser et faire presque certainement ce que vous visez. Ceux-ci sont normalement appelés préréglages x264 ou mélodie x264. Pouvez-vous trouver quelque chose comme ça?
la source
ffmpeg a supprimé ses préréglages x264 afin que le paramètre -vpre ne fonctionne plus.
Maintenant, j'ai un script pour convertir des fichiers vidéo dans un format que mon téléphone portable peut gérer.
Je vais expliquer chaque option
-sws_flags lanczos+accurate_rnd
cette option est l'algorithme de réduction d'échelle, lanczos est recommandé car il produit le moins d'artefacts sans flou mais il est lent.-vf "scale=..."
est explicite, spécifiez la résolution de sortie-crf 20
c'est la qualité, 20 est un bon réglage de sortie final (ne l'utilisez pas avant l'édition), c'est une qualité constante et c'est la meilleure option lorsque la taille du fichier n'est pas serrée et produira une meilleure qualité à la taille de fichier la plus basse qu'autre chose , sinon, utilisez deux passes pour une qualité maximale à une taille de fichier spécifique (comme avoir besoin de l'adapter sur un CD ou un DVD), le débit binaire fixe (par exemple-b 2000k
) ne doit être utilisé qu'en streaming, un cas spécial est '0' qui est sans perte et la plage de cette option va de 1 (qualité la plus élevée) à 50 (qualité la plus basse).Un bon test pour cela consiste à exécuter l'encodage avec -crf 20, prenez note du débit binaire, puis utilisez-le comme paramètre -b pour une deuxième version du fichier, les deux doivent avoir la même taille de fichier, comparez les deux pour la qualité différences.
-preset veryslow
cela choisit la quantité de CPU que vous souhaitez utiliser, plus elle est lente, plus la taille du fichier est petite et la meilleure qualité.-profile:v main
c'est le profil H.264 à utiliser. haute est la taille de fichier la plus efficace, mais utilise beaucoup de CPU pour décoder par rapport aux autres formats, cela étant dit, c'est le plus populaire car la plupart des téléphones portables ont un décodeur matériel intégré et un lecteur flash le prend en charge, le mien ne le fait pas, donc je dois utiliser principal.-tune fastdecode
mon téléphone portable n'aime pas lire les fichiers sans cette option, mais généralement cela peut être laissé vide ou défini sur «film» pour les jeux vidéo, la principale raison pour laquelle vous l'utilisez est d'obtenir un peu de qualité supplémentaire.Et la dernière chose que je recommanderais fortement d'utiliser un format de conteneur moderne .avi n'est pas conçu pour contenir H.264 et d'après ce que je comprends, il n'y a pas de norme pour stocker H.264 ou rendre le fichier plus grand que 2 Go, la plupart des implémentations sont des hacks et sujettes pour avoir des problèmes, utilisez mkv ou mp4.
la source
-preset
as-preset slow
-tune fastdecode
désactive le déblocage et les cadres B et P pondérés, ainsi que CABAC. Il existe des décodeurs qui peuvent gérer les trames B, mais pas CABAC? Je suggérerais-profile:v baseline
, si vous avez besoin de cibler de vieux décodeurs matériels. (fastdecode
peut être utile si vous ciblez un décodeur logiciel sur un processeur lent, mais pas un décodeur matériel.) Principal avec des trames B mais pas de déblocage ou CABAC peut ou peut ne pas être meilleur que la ligne de base avec déblocage. +1 pour recommander non AVI pour le stockage de h.264. IIRC, le principal est les images B, mais oui, le h.264 en avi n'est pas bien standardisé, et c'est hacky.-crf 20
une haute finale. Vous pouvez changer cela en 22 ou même 24 et probablement être bien, à moins que ce soit un mouvement élevé, comme un événement sportif.Il y a certaines choses à préciser:
Essayez ceci: ffmpeg -i highres.avi -acodec copy -vcodec libx264 -vb 2000k lowerres.avi
la source
-crf
plutôt pour définir un mode de qualité constante.