Je « suis complètement novice en montage vidéo, alors pardonnez-moi si je demande quelque chose de ridicule.
Je reçois des clips vidéo à partir dun boîtier décodeur. 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 jai besoin, donc jessaye dexé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, la fréquence dimages et la taille de fichier inférieure souhaitées, mais cela a également dégradé la qualité beaucoup plus que ce à quoi je mattendais.
Jai regardé le nouveau fichier et jai 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 sais pas pourquoi nutiliserait pas les mêmes formats de sortie que les formats dentrée. Jai essayé dutiliser cette commande pour le forcer à utiliser H.264:
ffmpeg -i highres.avi -r 30 -s 960x540 -f h264 lowerresforceh264.avi
Malheureusement, cela 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 cela. Lexécution de « ffmpeg -formats » a répertorié h264 comme celui quil pourrait utiliser pour les entrées et les sorties.
Si quelquun pouvait me diriger dans la bonne direction, je lapprécierais beaucoup. Merci.
PS: Jutilise FFmpeg version 0.7.3-4: 0.7.3-0 sur Ubuntu 11.10.
EDIT
Je « ai trouvé une solution en regardant lutilisation des préréglages. Après avoir recherché des informations sur les préréglages, jai trouvé le didacticiel suivant pour en discuter:
http://juliensimon.blogspot.com/2009/01/howto-ffmpeg-x264-presets.html
Javais juste besoin de spécifier le codec et le paramètre prédéfini approprié comme ceci:
ffmpeg -i highres.avi -r 30 -s 960x540 -vcodec libx264 -vpre medium lowerresforceh264vpremedium.avi
Jai encore quelques ajustements à faire, mais cest essentiellement ce que je voulais. Merci.
Commentaires
- Bien sûr, certaines personnes veulent simplement savoir comment convertir les fichiers .avi dAvermedia .mp4 pour jouer sur Mountain Lion / Mavericks < pre > ffmpeg -i 140203-1229.avi -vcodec copy -acodec copy fromavermedia_cog.mp4 < / pre >
Réponse
I » m en essayant de vous aider. Premièrement, 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 quelquun qui Est-ce que? 😉 ). Il doit y avoir un commutateur pour le codage multipass. Je sais quil y a des préréglages intégrés que vous pourriez probablement utiliser et faire presque certainement ce que vous visez. Celles-ci sont normalement appelées préréglages x264 ou réglage x264. Pouvez-vous trouver quelque chose comme ça?
Commentaires
- Merci. Votre discussion sur les préréglages ma aidé à trouver une solution probable. Je ‘ modifierai le message pour montrer ce que jai fait.
- Belle solution. Ajouté à ma collection dextraits. Merci.
- @BigBeagle: lorsque vous trouvez une réponse à votre question, vous pouvez la publier comme réponse. La modification de votre question est effectuée pour apporter plus de clarté à la question. Si je comprends bien, les réponses se trouvent dans la section des réponses.
Réponse
ffmpeg a supprimé ses préréglages x264 afin que le -vpre ne fonctionne plus.
Maintenant, jai un script pour convertir des fichiers vidéo dans un format que mon téléphone portable peut gérer.
ffmpeg -i input.avi -sws_flags lanczos+accurate_rnd -vf "scale=320:240" -c:v libx264 -crf 20 -preset veryslow -profile:v main -tune fastdecode -c:a copy output.mkv
Je vais expliquer chaque option
-sws_flags lanczos+accurate_rnd
cette option est lalgorithme de downscaling, lanczos est recommandé car il produit le moins dartefacts sans brouiller mais cest lent.
-vf "scale=..."
est explicite spécifier la résolution de sortie
-crf 20
cest le qualité, 20 est un bon paramètre de sortie final (ne lutilisez pas avant lédition), cest une qualité constante et cest la meilleure option lorsque la taille du fichier nest pas serrée et produira une meilleure qualité à la taille de fichier la plus basse quautre chose, sinon utilisez deux passes pour une qualité maximale à une taille de fichier spécifique (comme avoir besoin de linstaller sur un CD ou un DVD), débit binaire fixe (ex. ) ne doit être utilisé quen 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 est dexécuter lencodage avec -crf 20, notez le débit binaire, puis utilisez-le comme paramètre -b pour une 2ème version du fichier, les deux doivent avoir la même taille de fichier, comparez les deux pour différences de qualité.
-preset veryslow
ceci choisit la quantité de CPU que vous voulez utiliser, le plus lent cest le plus petit la taille du fichier et la meilleure qualité.
-profile:v main
cest le profil H.264 à utiliser. high est la taille de fichier la plus efficace, mais utilise beaucoup de CPU pour décoder par rapport aux autres formats, cela étant dit, cest le plus populaire car la plupart des téléphones portables ont un décodeur matériel intégré et le lecteur flash le prend en charge, le mien ne le fait pas, donc je dois utiliser main.
-tune fastdecode
mon téléphone portable naime pas lire les fichiers sans cette option, mais généralement cela peut être laissé vide ou réglé sur « film » pour les jeux vidéo, le La principale raison pour laquelle vous lutilisez est pour obtenir un peu plus de qualité.
Et la dernière chose que je recommanderais vivement dutiliser un format de conteneur moderne .avi nest « pas conçu pour contenir H.264 et daprès ce que je comprends » s 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 à des problèmes, utilisez mkv ou mp4.
Commentaires
- Les préréglages de libx264 sont maintenant spécifiés par
-preset
comme dans-preset slow
-
-tune fastdecode
désactive le déblocage et les trames B et P pondérées, ainsi que CABAC. Il existe des décodeurs qui peuvent gérer les trames B, mais pas CABAC? Je suggère-profile:v baseline
, si vous avez besoin de cibler danciens décodeurs matériels. (fastdecode
peut être utile si vous ciblez un logiciel re décodeur sur un CPU lent, mais pas un décodeur matériel.) Principal avec des trames B mais pas de déblocage ou CABAC pourrait ou non être meilleur que la ligne de base avec déblocage. +1 pour recommander non-AVI pour stocker h.264. IIRC, le principal est les trames B, mais ouais h.264 en avi nest pas bien standardisé, et il est ‘ hacky. - I ‘ d appelle
-crf 20
une finale haute. Vous pouvez changer cela en 22 ou même 24 et ça ira probablement, à moins que ce soit ‘ en mouvement, comme un événement sportif.
Réponse
Il y a quelques points à clarifier:
- Un format est pas un codec; vous voulez obtenir un fichier au format avi avec une vidéo encodée avec h264 codec. Utilisez simplement -vcodec libx264 et un nom de fichier avec .avi . Ffmpeg devrait reconnaître un format en regardant une extension de fichier, mais vous pouvez également être spécifique en ajoutant -f avi . Vous voulez définitivement pas utiliser mpeg1, car il donne une moins bonne qualité que mpeg2 ou même pire par rapport à mpeg4, que je recommande.
- Votre problème était que ffmpeg utilisait simplement la qualité la plus basse possible car vous nen avez spécifié aucune. Loption -sameq semble rarement fonctionner pour moi. En fait, il est très pratique de régler le débit manuellement. Ajoutez, par exemple, -vb 3000k pour obtenir un fichier avec un débit binaire vidéo moyen de 3 Mo / s, ce qui donne une assez bonne qualité. Je suppose que ce serait même suffisant pour vous davoir 2 Mo / s pour la résolution mentionnée.
- La clé pour réduire la taille du fichier nest pas la résolution, mais le débit mentionné ci-dessus. Je préfère men tenir à la résolution dorigine et simplement manipuler le débit.
- Je suppose que vous souhaitez également conserver laudio sans conversion (donc sans perte de qualité), alors utilisez -acodec copy .
Essayez ceci: ffmpeg -i highres.avi -acodec copie -vcodec libx264 -vb 2000k inférieur res.avi
Commentaires
- Le débit constant est le pire (en termes de qualité par rapport à la taille) de tous les modes de contrôle de débit dans x264 et doit être évité. Utilisez plutôt
-crf
pour définir un mode de qualité constante.