Encodage avec FFMPEG
Par Gisles le mercredi 20 février 2008, 19:25 - * Codecs et format - Lien permanent
FFmpeg est une collection de logiciels libres dédiés au traitement de flux audio et/ou vidéo (enregistrement, lecture ou conversion d'un format à un autre). Il est très lié au projet MPlayer ou il est hébergé. http://www.ffmpeg.org/. FFmpeg est publié licence GNU LGPL mais incorpore des modules sous licence GNU GPL. Développé sous Linux, il peut être compilé sur la plupart des systèmes d'exploitation, y compris Windows et Apple. Le projet est constitué de plusieurs composants, outils en ligne de commande ou bibliothèques logicielles :
- ffmpeg : l'utilitaire homonyme pour convertir des formats vidéo. Il supporte aussi l'encodage en temps réel depuis une carte TV.
- ffserver est un serveur HTTP dédié à la diffusion de contenu en continu (streaming).
- ffplay pour lire un fichier multimédia (il est basé sur les bibliothèques SDL et FFmpeg).
Bibliothèques :
- libavcodec contient tous les encodeurs et décodeurs audio/video de FFmpeg. La plupart des codecs ont été redéveloppés à partir de zéro pour assurer les meilleures performances et la réutilisabilité du code source, une partie d'entre eux ont été développés par rétro-ingénierie.
- libavformat contient un analyseur syntaxique (un parser en anglais, parcoureur en français) et un générateur pour les formats audio/video les plus communs.
Codecs et conteneurs
Les fichiers audio et spécialement vidéo sont de grands consommateurs d'informations numériques. Le poids de leur mesure en bit contient de nombreuses informations. Un fichier vidéo seul sans une post-synchronisation sonore contient en une seconde 25 images dont la taille du cadre est de 720*756 pixels en format Pal. Son poids est donc 25 fois supérieur sur une seconde à une simple image fixe dont la taille du cadre est identique.
Dans le cadre du montage vidéo, la résolution de travail la plus fine est le traitement de chaque image de la vidéo, c'est à dire un travail au 1/25 de seconde dans le cadre du format Pal. Cette version dites MotionJPEG est une grande consommatrice d'espace disque. Pour alléger les capacités de travail, des solutions d'encodage permettent de lier ces images en les interpolant. Par des interventions de calculs mathématiques plus ou moins fines, le poids mesuré en bit d'un fichier vidéo en est réduit. De ce fait, ce fichier encodé peut transiter à l'intérieur de réseaux informatiques dont les capacités de transmission plus ou moins développées sont en rapport avec les interventions de calculs des codecs utilisés.
Les codecs sont les systèmes de compressions et de décompressions des fichiers audio et vidéo. De nombreux codecs sont connus, les différentes versions de « MPEG » pour la vidéo et ceux dénommés « MP3 » et « AAC » pour l'audio. A l'origine, la numérisation des films et des enregistrements sonores était lié à la diffusion de ceux-ci par des réseaux soit hertziens ou informatiques. La démocratisation des lecteurs audio et vidéo, magnétoscopes, ordinateurs, lecteurs DVD, baladeurs numériques audio, vidéo et multimédia a distribué des standards de codecs en rapport aux parts de marchés obtenus par certains constructeurs. Le célebre standard « MP3 » en est un des résultats bien connus. L'inévitable standard « FLV » de la société Adobe est incontournable sur les sites communautaires d'échange de vidéo tels que « YouTube » et « DailyMotion ».
La vidéo étant souvent associé aux sons, la post-synchronisation audio-vidéo s'effectue au sein d'un un conteneur, le muxer en anglais. Un fichier audio-vidéo dont le conteneur est un « FLV » détient un codec vidéo « FLV » et un codec audio « MP3 ». Un fichier audio-vidéo au format DVD dont le conteneur est nommé « VOB » contient un codec audio au format « Dolby Surround » et un codec vidéo « MPEG2 ». Cependant, un conteneur peut également intégrer des repères de chapitrage, des options multilingue sonore et de sous-titrage. Tels est le cas des conteneurs « VOB » et « MKV ».
Le manuel FFMPEG
Vous trouvez le manuel en tapant « man ffmpeg » dans votre console préféré ou directement en accédant au site officiel : http://www.ffmpeg.org/ffmpeg-doc.html. De nombreux logiciels équipés d'interface graphique utilisateur (GUI acronyme de Graphical User Interface) utilisent la solution FFmPEG tels que VLC, MediaCoder, Avidemux, Kino, KDEnlive, Cinelerra, Blender...
L'utilisation des fonctions de FFMPEG se font par l'utilisation de lignes de commande. La console est donc obligatoire. Pour l'encodage, il est défini le fichier entrant, celui à encoder, puis les paramètres du fichier de sortie codec, débit binaire, cadre d'image... suivi du nom de fichier et de l'extension du conteneur de sortie.
A titre d'exemple : ffmpeg – i video_entrante.avi -target pal-dvd video_sortante.mpg
ou la syntaxe :
- ffmpeg : fait appel au logiciel ffmpeg
- -i video_entrante.avi : appel (-i pour Input) de la vidéo
- -target pal-dvd : cible une préconfiguration du format de sortie en « pal-dvd »
- video_sortante.mpg : nom et conteneur de la vidéo transformée
La cible « -target »possède quelques préconfigurations "vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd", "ntsc-svcd", ... dont toutes les options « bitrate », « codecs », « buffer sizes »... attribuent les valeurs standards par défaut. Il est toutefois possible d'intervenir sur une des options afin d'émettre des valeurs différentes.
Ainsi : ffmpeg – i video_entrante.avi -target pal-dvd video_sortante.mpg peut être affiné par : ffmpeg – i video_entrante.avi -target pal-dvd -acodec copy video_sortante.mpg ou l'option « -acodec copy » copie à l'identique le codec audio entrant vers le fichier sortant.
Vous pouvez lister les codecs compatibles FFMPEG en tapant dans votre console la ligne suivante : ffmpeg -formats . Ajoutant des options tels que « D » : ffmpeg -formats D , votre console vous liste les codecs pouvant être décodés et donc encodés. L'options « E » affiche les codecs dont l'encodage est possibles.
Les options d'encodage audio et vidéo
Pour connaître les options d'encodage d'un fichier audiovisuel, tapez juste FFMPEG « Input » dans votre console. De nombreuses informations vont apparaître. La première partie vous informe avec quels options l'application FFMPEG est installée. Pour vous informer à ce sujet, je vous renvoie à l'annexe. Seules les dernières lignes d'information sont intéressantes pour cette étape.
- ffmpeg -i audio-vidéo.ogg
- Input #0, ogg, from 'audio-vidéo.ogg':
- Duration: 00:05:33.20, start: 0.000000, bitrate: 988 kb/s
- Stream #0.0: Video: theora, yuv420p, 720x576, 25.00 tb(r)
- Stream #0.1: Audio: vorbis, 48000 Hz, stereo, 128 kb/s
La durée du fichier « audio-vidéo.ogg » est de 00:05:33.20 soit 0 heures : 05 mn : 33 sec . 20 images. Son débit binaire est de 988 kb/s.
Caractéristiques du codec vidéo:
- Le nom du codec : Theora
- Type d'encodage couleur : yuv420p
- La taille du cadre image : 720 *576 px
- La cadence image est de : 25 images/sec
Caractéristiques du codec audio :
- Le nom du codec : Vorbis
- Le taux d'échantillonnage : 48000 Hz
- Nombre de voies audio : Stéréo
- Débit binaire de l'audio : 128 Kb/s
Les options standards d'encodage se limite à ce type d'options dans la plupart des cas de flux de production. Les options principales sont donc :
Pour la vidéo :
- -b : configuration du débit binaire par défaut 200 kbps
- -sameq : copie à l'identique le débit binaire
- -s : configuration de la taille du cadre d'affichage
- -aspect : configuration du format d'affichage (4:3, 16:9 ou 1.3333, 1.7777)
- -vcodec : décision du choix du codec
- -pass : nombre de passage à l'encodage, une passe (-pass 1) ou deux passes (-pass 2)
- -qmin : détermine le seuil minimum du débit binaire variable (VBR)
- -qmax : détermine le seuil maximum du débit binaire variable (VBR)
- -f : sélectionne le nom du conteneur
- -r : définit le nombre d'images par seconde
Pour l'audio :
- -ar : configuration de la fréquence d'échantillonnage (44100 Hz)
- -ab : configuration du débit binaire par défaut 64 kbps
- -ac : configure le nombre de canaux (mono-stéréo)
- -acodec : détermine le choix du codec
Quelques exemples:
- ffmpeg -i video.flv -target pal-dvd-aspect 4:3 video.mpg
- ffmpeg -i video.flv -target pal-dvd -b 2000K -acodec mp2 -ar 22050 -ab 64k -aspect 4:3 video.mpg
- ffmpeg -i video.mpg -vcodec mpeg4 -s 320x240 -b 300k -r 10 -acodec mp3 -ar 22050 -ab 64k -f avi video.avi
L'anamorphisme
Le format initial de l'image télévisuel est d'un rapport 1.33 dit 4/3. Les écrans télé HD ont fait apparaître le format 16/9, le rapport 1.77, également défini par le terme "LetterBox". La taille des pixels suivant le format de l'image en est donc modifiée. Le passage d'une vidéo 4/3 au 16/9 provoque une distortion du pixel par un étirement horizontale de celui-ci. La méthode de conversion s'effectue par un réechantillonage du pixel, technique de l'anamorphisme. En plus, la norme NTSC diffère de celle PAL, non seulement de la cadence image, mais aussi sur la taille de l'image. Le NTSC affiche un cadre de 720x480 pixel, alors que le PAL diffuse un cadre de 720x576.Les nouvelles normes d'affichage pour les téléviseurs HD Ready sont en général de 1280x720 car la taille diffère suivant les constructeurs et pour les Full HD 1920x1080. On distingue également trois normes de projection au cinema : l'écran standard panoramique européen dont le rapport est de 1.67, le Standard Cinema Widescreen, rapport d'affichage de 1.85 et le CinemaScope Widescreen, rapport d'affichage de 2.35. Les termes de recadrage et de translation (pan&scan) indique les conversions de format 4/3 en 16/9. Si une image 4/3 est projetée en 16/9, une bande noir apparaît sur le coté droit et gauche de la vidéo (pillarbox). Dans le sens inverse une image 16/9 projetée sur un support 4/3, une bande noire apparaît sur les bords haut et bas de l'image (letterbox). L'image significative additionnée au bandes noires conserve ainsi sa taille d'image. Si le matériel de diffusion de l'image (vidéoprojecteurs, téléviseurs) gère l'étirement des pixels, l'anamorphisme, alors aucune bandes noires est présente.
FFMPEG permet la conversion de recadrage et de translation par les syntaxes :
- -croptop : ajout de la bande noire au dessus de la vidéo, taille exprimée en pixels
- -cropbottom : ajout de la bande noire au dessous de la vidéo, taille exprimée en pixels
- -cropleft : ajout de la bande noire à gauche de la vidéo, taille exprimée en pixels
- -cropright : ajout de la bande noire à droite de la vidéo, taille exprimée en pixels
La plupart des fichiers vidéos sont filmés au format 4/3. La formule mathématique suivante vous permet de convertir le format 4/3 en 16/9 en rognant sur la hauteur de l'image. Dans le cas du pal-dvd, une taille de l'image de 720*576 pixels, vous calculez comme ceci :
720 / (16/9) = 720 / 1.77777777778 = 405
La hauteur de l'image au format pal-dvd 576 pixels est recadré en 405 pixels. Les bandes noires des bords haut et bas de l'image (letterbox) n'ont plus qu'à être défini par :
576 – 405 = 171 puis 171 / 2 = 85.5 ou 85.5 est la hauteur des bandes noires. Arrondissez sur une valeur multiple de deux, 85.5 devient 84.
Un format 4/3 au format flv peut être encodé en pal-dvd format 16/9 par cette commande ffmpeg :
ffmpeg -i video.flv -target pal-dvd -aspect 1.77 -croptop 84 -cropbottom 84 video.mpeg
Analyse du conteneur VOB d'un DVD
L'utilitaire « Vobcopy » permet de copier sur votre disque dur les fichiers VOB contenu sur un disque optique DVD. Vobcopy est non GUI et s'appuie sur la librairie « libdvdread » qui permet de décoder certains CSS de protection de copie. Il est nécessaire d'utiliser la console, la syntaxe de base étant vobcopy. Pour plus de détails, veuillez-vous rapporter au manuel « man vobcopy ».
La commande ffmpeg suivante nous informe sur le contenu d'un fichier VOB :
ffmpeg -i video.vob
Duration: 00:53:54.20, start: 0.049756, bitrate: 5311 kb/s Stream #0.00x1e0: Video: mpeg2video, yuv420p, 720x576, 9800 kb/s Stream #0.10x82: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s Stream #0.20x81: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s Stream #0.30x2d: Subtitle: dvdsub Stream #0.40x2c: Subtitle: dvdsub
Comme cité plus haut le conteneur VOB peut détenir des options multilingue sonore et de sous-titrage. Dans l'exemple ci-dessus, FFMPEG Input nous informe du contenu du fichier « video.vob ». Ce fichier contient un flux vidéo (Stream) codé en mpeg2video, dont la profondeur couleur est du yuv420p, un cadre d'image d'une taille de 720x576 et un débit binaire de 9800 kbps. A cela s'ajoute deux flux audio dont les codecs sont AC3, leur fréquence d'échantillonnage est de 48 kHz, multiplexé en 5.1, d'une profondeur de 16 bit et dont le débit binaire est de 444 kbps. En fin de liste apparaissent deux flux de sous-titres dvdsub.
Si vous désirez, pour des raisons de tests d'encodage ou tout simplement exporter un extrait d'un fichier vidéo, les commandes « -ss » et « -t » délimitent la portion de la vidéo à extraire. La commande « -ss » aura pour attribut le temps au centième de seconde du point d'entrée de la séquence à exporter et la commande « -t » la durée de la séquence.
Exemple d'exportation d'un extrait en Xvid :
- ffmpeg -i video.vob -ss 00:00:12:250 -t 00:00:03:133 -vcodec msmpeg4v2 -acodec mp3 video.avi
La possibilité d'extraire uniquement le flux vidéo ou le flux audio permettent de remplacer la bande sonore de la vidéo, la récupérer pour la travailler ou bien l'écouter sur votre platine de salon. Les commandes « -an » ou« -vn » offrent l'exportation uniquement du flux vidéo (-an pour non-audio) ou uniquement du flux audio (-vn pour non-video). Cet exemple vous indique comment exporter afin de graver la bande sonore sur un disque optique de CD audio de salon. Le codec est un Pulse Code Modulation de profondeur de 16 bit.
- ffmpeg -i video.vob -vn -acodec pcm_s16le -ar 44100 -ac 2 video.wav
Si vous souhaitez conserver le son en qualité surround 5.1, vous optez pour :
- ffmpeg -i video.vob -vn -acodec ac3 video.ac3
Cependant, l'encodage de la bande sonore est par défaut le premier flux audio de la version multilingue. La commande « -map » vous permet de définir la version sonore à exporter. Rappelez vous !
- Stream #0.10x82: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
- Stream #0.20x81: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
Si votre choix se porte sur la seconde piste multilingue, Stream #0.2, voici la ligne de commande mise à jour par l'ajout de -map 0:2 :
- ffmpeg -i video.vob -vn -map 0:2 -acodec pcm_s16le -ar 44100 -ac 2 video.wav
La commande « -map » peut permettre l'export du choix d'une langue multiplexé à la vidéo. Admettons que le Stream #0.2 soit la version française du film, hors par défaut FFMPEG prend le premier flux audio présenté. Vous devez donc optez pour le second flux si vous voulez obtenir les images associés. La commande « -map » vous de fondre différents flux.
Cet exemple montre l'exportation du fichier sonore en langue française, stream 2, associé au flux vidéo, stream 0 pour une exportation avec codec « Xvid » et « MP3 » pour un conteneur « AVI ».
- ffmpeg -i video.vob -map 0:0 -map 0:2 -vcodec msmpeg4v2 -acodec mp3 video.avi
Vous souhaitez coller votre nouvelle bande son au flux vidéo, il est essentiel de leur attribuer un numéro de « -map ». Le flux vidéo est nommé par « -map 0:0 » et le flux audio par « -map 0:1. Affinez le multiplexing en attribuant les codecs appropriés.
- ffmpeg -i video.vob -i audio.wav -map 0:0 -map 1:0 -target pal-dvd -aspect 16:9 video.mpg
En dernier lieu, FFMPEG peut multiplexer différentes sources audio et de ce fait créer un fichier surround au maximum de 7.1. Mixer par la fonction « Input » les différentes sources audio, en tapant comme ceci les commandes dans un cas de 5 voies multiplexés par le codec « AC3 », ce peut être aussi le codec « MP2 » :
- ffmpeg -i au_stereo_left.wav -i au_stereo_right.wav -i au_surround_left.wav -i au_surround_right.wav -i au_central.wav -ab 192k -ar 48000 -ac 5 -acodec ac3 surround.ac3
Planche de contact et traitement par lot
La commande « newaudio » et « newvideo » permet d'encoder le film en plusieurs fichiers vidéos ou de fichiers sonores en sortie. Dans l'exemple suivant, la finalité de la ligne de commande est d'encoder entrante « video.vob » en un fichier audio-vidéo Xvid et en un fichier audio mp3 :
ffmpeg -i video.mpg -vcodec msmpeg4v2 -acodec mp3 video.avi -acodec mp3 -ab 192k -newaudio audio.mp3
Vous êtes en repérage sur un potentiel lieu de tournage. Vous devez imprimez une planche contact afin d'éditer un story board. FFMPEG par la commande « -r » détermine le nombre d'image par seconde à éditer et peut exporter le flux d'image vidéo en image fixe :
- ffmpeg -i video.avi -r 3 -s 128×96 -f image2 images_StoryBoard-%4d.png
L'expression « %4 » enregistrera et numérotera les images de façon croissante sur une base de quatre chiffre : images_StoryBoard-0000.png, images_StoryBoard-0001.png, images_StoryBoard-0002.png...
Vous devez encodez plusieurs vidéos à suivre afin de répondre à une commande propre à un type de lecteur vidéo. Vous devez reprendre l'expression afin d'enregistrer les vidéos et les numéroter. La boucle suivante va traiter par lot votre encodage :
- for f in *.mpeg; do ffmpeg -i "$f" -sameq "${f%3.mpeg}.flv"; done
Cette boucle définit pour chaque entrée définit par la variable « $f » dont le conteneur est « mpeg », utiliser l'application « ffmpeg » afin d'encoder en « flv » suivant l'option « -sameq » en enregistrant et numérotant les fichiers vidéo de façon croissante sur une base de 3 chiffres.
Quelques librairies de codecs utiles
Si vous souhaitez ne récupérer que la vidéo précisez avec la syntaxe -noaudio. Inversement, vous obtenez uniquement l'audio avec la syntaxe -novideo.
AUDIO- VIDEO :
- MP4:
- Video : libx264, yuv420p, 1250 kb/s
- Audio : libfaac, 48000 Hz, s16, 112 kb/s
- Blackberry :
- Video : libx264, yuv420p, 240x180, q=2-31, 400 kb/s
- Audio : libfaac, 44100 Hz, stereo, s16, 80 kb/s
- FLV :
- Video : flv, yuv420p, 1300 kb/s
- Audio : libmp3lame, 22050 Hz, mono, s16, 56 kb/s
- Ipod :
- Video : libx264, yuv420p, 320x144, q=2-31, 200 kb/s
- Audio : libfaac, 48000 Hz, stereo, s16, 112 kb/s
- AVI :
- Video : msmpeg4, yuv420p, 640x480, q=2-31, 1000 kb/s
- Audio : libmp3lame, 44100 Hz, 5.1, s16, 192 kb/s
- Pal-DVD :
- Video : mpeg2video, yuv420p, 720x576, q=2-31, 8000 kb/s, 90k tbn, 25 tbc
- Audio : ac3, 48000 Hz, 5.1, s16, 448 kb/s
- NTSC-DVD :
- Video : mpeg2video, yuv420p, 720x480, q=2-31, 8000 kb/s, 90k tbn, 29.97 tbc
- Audio : ac3, 48000 Hz, 5.1, s16, 448 kb/s
- Diaporama MS :
- Video : wmv2, yuv420p, 320x240, q=2-31, 500 kb/s
- Audio : wmav2, 22050 Hz, mono, s16, 32 kb/s
- PSP :
- Video : libx264, yuv420p, 640x480, 1250 kb/s
- Audio : libfaac, 48000 Hz, stereo, s16, 128 kb/s
- Xbox :
- Video : wmv2, yuv420p, 720x480, q=2-31, 1200 kb/s
- Audio : wmav2, 48000 Hz, 5.1, s16, 160 kb/s
- XVid :
- Video : libxvid
- Audio : libmp3lame
- MOV Quicktime :
- Video : mpeg4, yuv420p, 640x480, 1250 kb/s
- Audio : libfaac, 48000 Hz, stereo, s16, 128 kb/s
- RAW DV PAL :
- Video : dvvideo, yuv420p, 720x576, 200 kb/s
- Audio : pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
- RAW DV NTSC :
- Video : dvvideo, yuv411p, 720x480, 200 kb/s
- Audio : pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
AUDIO :
- CDMA phone audio 3g2 :
- Audio : libfaac, 22050 Hz, 5.1, s16, 128 kb/s
- MP3 :
- Audio : libmp3lame, 44100 Hz, stereo, s16, 160 kb/s
- MP4 audio :
- Audio : libfaac, 48000 Hz, stereo, s16, 112 kb/s
- OGG :
- Audio : vorbis, 48000 Hz, stereo, s16, 192 kb/s
- WAV pour CD :
- Audio : pcm_s16le, 44100 Hz, stereo, s16, 4233 kb/s
- WMA :
- Audio : wmav2, 48000 Hz, 5.1, s16, 160 kb/s
Exemple un encodage en MP4 :
- Video : libx264, yuv420p, 1250 kb/s
- Audio : libfaac, 48000 Hz, s16, 112 kb/s
ffmpeg -i Video_Entrante.vob -vcodec libx264 -b 1250k -acodec libfaac
-ab 112k Video_Sortante.mp4 Seems stream 0 codec frame rate
differs from container frame rate: 50.00 (50/1) -> 25.00 (25/1)
Input #0, mpeg, from 'Promesses_ombre.vob': Duration:
00:32:39.42, start: 0.060000, bitrate: 22945 kb/s Stream
#0.00x1e0: Video: mpeg2video, yuv420p,
720x576 PAR 64:45
DAR 16:9, 8000 kb/s, 25 tbr, 90k tbn, 50 tbc Stream
#0.10x82: Audio: ac3, 48000 Hz, 5.1, s16, 448
kb/s Stream #0.20x80: Audio: ac3,
48000 Hz, 5.1, s16, 448 kb/s Stream #0.30x89: Audio: dca, 48000 Hz, 5.1, s16, 768 kb/s Output
#0, mp4, to 'Promesses_ombre.mp4': Stream #0.0: Video: libx264,
yuv420p, 720x576 PAR 64:45 DAR 16:9, q=2-31, 1250 kb/s, 90k tbn, 25
tbc Stream #0.1: Audio: libfaac, 48000 Hz, 5.1, s16, 112
kb/s Stream mapping: Stream #0.0 -> #0.0
Stream #0.1 -> #0.1 libx264 @ 0xa0f38b0using SAR=64/45
libx264 @
0xa0f38b0using cpu capabilities: MMX2 Cache64 Press q to stop encoding frame=144765 fps= 9 q=-1.0
Lsize= 1026174kB time=5790.49 bitrate=1451.8kbits/s video:886729kB
audio:136145kB global headers:0kB muxing overhead 0.322555%
etc.
Coder pour les diffusions professionnelles
Importez vos fichiers dans Final Cut Pro ou Avid Media Composer par:
- Création d'XDCAM HD422 fichiers. mov ou. MXF
- Création d'XDCAM IMX/D-10 fichiers. mov ou. MXF
- Création d'Avid DNxHD fichiers. mov
- Encoder votre MPEG-2 4:2:2 Tranport Stream fichiers contenant S302M audio.
- Encoder vos fichiers AVCHD correctement.
- Fusionner et fractionner vos pistes audio.
- Créer des fichiers Quicktime contenant des pistes de timecode.
- Prise en charge avancée des métadonnées.
H.264 Long GOP Encoding
- 1-pass encoding:
ffmpeg -i <input_file> -vcodec libx264 -b <video_bitrate>
-g <gop_size> -bf 3 -b_strategy 1 -coder 1 -qmin 10 -qmax 51
-sc_threshold 40 -flags +loop -cmp +chroma -me_range 16 -me_method hex -subq 5
-i_qfactor 0.71 -qcomp 0.6 -qdiff 4 -directpred 1 -flags2 +fastpskip
-dts_delta_threshold 1 -acodec libfaac -ab <audio_bitrate>
output.mp4
- 2-pass encoding:
ffmpeg -y -i <input_file> -pass 1 -vcodec libx264 -b
<video_bitrate> -g <gop_size> -bf 3 -refs 6 -b_strategy 1 -coder 1
-qmin 10 -qmax 51 -sc_threshold 40 -flags +loop -cmp +chroma -me_range 16
-me_method umh -subq 7 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 -directpred 3
-flags2 +dct8x8+wpred+bpyramid+mixed_refs -trellis 1 -partitions
+parti8x8+parti4x4+partp8x8+partp4x4+partb8x8 -acodec libfaac -ab
<audio_bitrate> output.mp4
ffmpeg -y -i <input_file> -pass 2 -vcodec libx264 -b
<video_bitrate> -g <gop_size> -bf 3 -refs 6 -b_strategy 1 -coder 1
-qmin 10 -qmax 51 -sc_threshold 40 -flags +loop -cmp +chroma -me_range 16
-me_method umh -subq 7 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 -directpred 3
-flags2 +dct8x8+wpred+bpyramid+mixed_refs -trellis 1 -partitions
+parti8x8+parti4x4+partp8x8+partp4x4+partb8x8 -acodec libfaac -ab
<audio_bitrate> output.mp4
D10 (Sony IMX) Encoding
ffmpeg -i <input_file> -vcodec mpeg2video -r 25 -pix_fmt yuv422p
-minrate 50000k -maxrate 50000k -b 50000k -intra -flags +ildct+low_delay -dc 10
-flags2 +ivlc+non_linear_q -ps 1 -qmin 1 -qmax 3 -top 1 -bufsize 2000000
-rc_init_occupancy 2000000 -rc_buf_aggressivity 0.25 -an output.m2v
Notes :
- Fonctionne uniquement en 25 fps .
- Changre minrate, maxrate et b values en 30000k / 40000k / 50000k afin de produire 30/40/50 Mbps.
- Configurer les valeurs de mémoire tampon bufsize et rc_init_occupancy de 1200000 / 1600000 / 2000000 à 30/40/50 Mbps.
- Ajouter l'option -padtop 32 si vous souhaitez produire une dimension de cadre 720x608 D10 à partir d'une source de 720x576.
XDCAM HD 50Mbps en QuickTime pour des imports FinalCut
ffmpeg -i <input_file> -pix_fmt yuv422p -vcodec mpeg2video
-flags +ildct+ilme -top 1 -dc 10 -flags2 +ivlc+non_linear_q -qmin 1 -lmin
'1*QP2LAMBDA' -vtag xd5c -rc_max_vbv_use 1 -rc_min_vbv_use 1 -b 50000k -minrate
50000k -maxrate 50000k -bufsize 36408333 -bf 2 -aspect 16:9 -acodec pcm_s16be
-f mov output.mov -newaudio
DVCAM / DVCPRO25 / DVCPRO50 Encoding
ffmpeg -i <input_file> -pix_fmt yuv420p output_DVCAM.dv
ffmpeg -i <input_file> -pix_fmt yuv411p output_DVCPRO25.dv
ffmpeg -i <input_file> -pix_fmt yuv422p
output_DVCPRO50.dv
VC-3 pour un encodage Avid DNxHD
ffmpeg -i <input_file> -vcodec dnxhd -b <bitrate> -an
output.mov
Notes :
- Pour les débits d'encodage se reférer au tableau suivant : 36Mb, 60Mb, 90Mb, 120Mb, 185Mb.
- Ajouter les options suivantes pour les modes entrelacés : -flags +ildct - Si vous avez le temps, cette option vous offre une meilleure qualité : -mbd rd
Les résolutions supportés :
- Project Format Resolution Frame Size Bits FPS <bitrate>
- 1080i / 59.94 DNxHD 220 1920 x 1080 8 29.97 220Mb
- 1080i / 59.94 DNxHD 145 1920 x 1080 8 29.97 145Mb
- 1080i / 50 DNxHD 185 1920 x 1080 8 25 185Mb
- 1080i / 50 DNxHD 120 1920 x 1080 8 25 120Mb
- 1080p / 25 DNxHD 185 1920 x 1080 8 25 185Mb
- 1080p / 25 DNxHD 120 1920 x 1080 8 25 120Mb
- 1080p / 25 DNxHD 36 1920 x 1080 8 25 36Mb
- 1080p / 24 DNxHD 175 1920 x 1080 8 24 175Mb
- 1080p / 24 DNxHD 115 1920 x 1080 8 24 115Mb
- 1080p / 24 DNxHD 36 1920 x 1080 8 24 36Mb
- 1080p / 23.976 DNxHD 175 1920 x 1080 8 23.976 175Mb
- 1080p / 23.976 DNxHD 115 1920 x 1080 8 23.976 115Mb
- 1080p / 23.976 DNxHD 36 1920 x 1080 8 23.976 36Mb
- 1080p / 29.7 DNxHD 45 1920 x 1080 8 29.97 45Mb
- 720p / 59.94 DNxHD 220 1280x720 8 59.94 220Mb
- 720p / 59.94 DNxHD 145 1280x720 8 59.94 145Mb
- 720p / 50 DNxHD 175 1280x720 8 50 175Mb
- 720p / 50 DNxHD 115 1280x720 8 50 115Mb
- 720p / 23.976 DNxHD 90 1280x720 8 23.976 90Mb
- 720p / 23.976 DNxHD 60 1280x720 8 23.976 60Mb
Exemple : ffmpeg -i input.mts -vcodec dnxhd -acodec pcm_s16le -flags +ildct -b 185Mb -threads 8 output.mov
MPEG-2 I-frame : intraframe MPEG-2 de meilleure qualité
ffmpeg -i <input_file> -vcodec mpeg2video -qscale 1 -qmin 1
-intra -an output.m2v
Encodage MPEG-2 Long GOP
ffmpeg -i <input_file> -vcodec mpeg2video -b
<video_bitrate> -g <gop_size> -bf 2 -b_strategy 1 -acodec mp2 -ab
<audio_bitrate> -f vob output.mpg
MJPEG en haute qualité
ffmpeg -i <input_file> -vcodec mjpeg -qscale 1 -an
output.avi
MPEG-2 en version de streaming
ffmpeg -genpts 1 -i ES_Video.m2v -i ES_Audio.mp2 -vcodec copy -acodec
copy -f vob output.mpg
Note :
- Si vous souhaitez muxer plusieurs pistes audio dans le même fichier:
ffmpeg -genpts 1 -i ES_Video.m2v -i ES_Audio1.mp2 -i ES_Audio2.mp2
-vcodec copy -acodec copy -f vob output.mpg -newaudio
- Si vous souhaitez réencoder le fichier TS en version PS :
ffmpeg -i input.mpg -vcodec copy -acodec copy -f vob output.mpg
-acodec copy -newaudio
MPEG-2 streamé démuxé :
ffmpeg -i input.mpg -vcodec copy -f mpeg2video ES_Video.m2v -acodec
copy -f mp2 ES_Audio.mp2
Note : ceci fonctionne également avec de multiple flux audio contenu
ffmpeg -i input.mpg -vcodec copy -f mpeg2video ES_Video.m2v -acodec copy
-f mp2 ES_Audio1.mp2 -acodec copy -f mp2 ES_Audio2.mp2
MPEG-2 Start Timecode
ffmpeg -i <input_file> -timecode_frame_start
<start_timecode> -vcodec mpeg2video -an output.m2v
Note : Le codage timecode est basé sur le nombre d'image par exemple si vous souhaitez commencé à 18:12:36:15, vous devez configurer -timecode_frame_start à 1638915 pour une cadence de 25 img/s.
Modification du volume audio
ffmpeg -i <input_file> -vol <audio_volume> -acodec
<audio_codec> <output_file>
Ajouter une piste sonore dans un streaming
ffmpeg -i input.vob -map 0:2 -acodec aac -ab <audio_bitrate> -vn
output.mp4
ou map encode la piste sonore 2.
Découper un rush
ffmpeg -i <input_file> -ss <timecode> -t <timecode>
-vcodec copy -acodec copy <output_file>
Créer une vidéo à partir d'une seule image
ffmpeg -loop_input -vframes <number_of_frames> -i
<input_file> <output_file>
Advanced Video Options
- -pix_fmt format' Set pixel format. Use 'list' as parameter to show all the supported pixel formats.
- -sws_flags flags' Set SwScaler flags.
- -g gop_size' Set the group of pictures size.
- -intra' Use only intra frames.
- -vdt n' Discard threshold.
- -qscale q' Use fixed video quantizer scale (VBR).
- -qmin q' minimum video quantizer scale (VBR)
- -qmax q' maximum video quantizer scale (VBR)
- -qdiff q' maximum difference between the quantizer scales (VBR)
- -qblur blur' video quantizer scale blur (VBR) (range 0.0 - 1.0)
- -qcomp compression' video quantizer scale compression (VBR) (default 0.5). Constant of ratecontrol equation. Recommended range for default rc_eq: 0.0-1.0
- -lmin lambda' minimum video lagrange factor (VBR)
- -lmax lambda' max video lagrange factor (VBR)
- -mblmin lambda' minimum macroblock quantizer scale (VBR)
- -mblmax lambda' maximum macroblock quantizer scale (VBR) These four options (lmin, lmax, mblmin, mblmax) use 'lambda' units, but you may use the QP2LAMBDA constant to easily convert from 'q' units:
ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
- -rc_init_cplx complexity' initial complexity for single pass encoding
- -b_qfactor factor' qp factor between P- and B-frames
- -i_qfactor factor' qp factor between P- and I-frames
- -b_qoffset offset' qp offset between P- and B-frames
- -i_qoffset offset' qp offset between P- and I-frames
- -rc_eq equation' Set rate control equation (@xref{FFmpeg formula evaluator}) (default = tex^qComp).
- -rc_override override' rate control override for specific intervals
- -me_method method' Set motion estimation method to method. Available methods are (from lowest to best quality):
- zero' Try just the (0, 0) vector.
- phods'
- log'
- x1'
- hex'
- umh'
- epzs' (default method)
- full' exhaustive search (slow and marginally better than epzs)
- -dct_algo algo' Set DCT algorithm to algo. Available values are:
- 0'FF_DCT_AUTO (default)
- 1'FF_DCT_FASTINT
- 2'FF_DCT_INT
- 3'FF_DCT_MMX
- 4'FF_DCT_MLIB
- 5'FF_DCT_ALTIVEC
- -idct_algo algo'Set IDCT algorithm to algo. Available values are:
- 0'FF_IDCT_AUTO (default)
- 1'FF_IDCT_INT
- 2'FF_IDCT_SIMPLE
- 3'FF_IDCT_SIMPLEMMX
- 4'FF_IDCT_LIBMPEG2MMX
- 5'FF_IDCT_PS2
- 6'FF_IDCT_MLIB
- 7'FF_IDCT_ARM
- 8'FF_IDCT_ALTIVEC
- 9'FF_IDCT_SH4
- 10'FF_IDCT_SIMPLEARM
- -er n'Set error resilience to n.
- 1'FF_ER_CAREFUL (default)
- 2'FF_ER_COMPLIANT
- 3'FF_ER_AGGRESSIVE
- 4'FF_ER_VERY_AGGRESSIVE
- -ec bit_mask'Set error concealment to bit_mask. bit_mask is a bit mask of the following values:
- 1'FF_EC_GUESS_MVS (default = enabled)
- 2'FF_EC_DEBLOCK (default = enabled)
- -bf frames'Use 'frames' B-frames (supported for MPEG-1, MPEG-2 and MPEG-4).
- -mbd mode'macroblock decision
- 0'FF_MB_DECISION_SIMPLE: Use mb_cmp (cannot change it yet in FFmpeg).
- 1'FF_MB_DECISION_BITS: Choose the one which needs the fewest bits.
- 2'FF_MB_DECISION_RD: rate distortion
- -4mv'Use four motion vector by macroblock (MPEG-4 only).
- -part'Use data partitioning (MPEG-4 only).
- -bug param'Work around encoder bugs that are not auto-detected.
- -strict strictness' How strictly to follow the standards.
- -aic'Enable Advanced intra coding (h263+).
- -umv'Enable Unlimited Motion Vector (h263+)
- -deinterlace'Deinterlace pictures.
- -ilme'Force interlacing support in encoder (MPEG-2 and MPEG-4 only). Use this option if your input file is interlaced and you want to keep the interlaced format for minimum losses. The alternative is to deinterlace the input stream with *-deinterlace', but deinterlacing introduces losses.
- -psnr'Calculate PSNR of compressed frames.
- -vstats'Dump video coding statistics to *vstats_HHMMSS.log'.
- -vstats_file file'Dump video coding statistics to file.
- -top n'top=1/bottom=0/auto=-1 field first
- -dc precision'Intra_dc_precision.
- -vtag fourcc/tag'Force video tag/fourcc.
- -qphist'Show QP histogram.
- -vbsf bitstream_filter'Bitstream filters available are "dump_extra", "remove_extra", "noise", "h264_mp4toannexb", "imxdump", "mjpegadump".
ffmpeg -i h264.mp4 -vcodec copy -vbsf h264_mp4toannexb -an
out.h264