ffmprovisr : une collection de recettes pour créer facilement des commandes FFmpeg
(amiaopensource.github.io)- ffmprovisr est un site d’aide à la génération de commandes qui permet aux utilisateurs ayant du mal à écrire des commandes FFmpeg de choisir une tâche, puis de consulter une commande d’exemple et l’explication de chaque option
- Les recettes s’articulent autour de
ffmpeg,ffplayetffprobe, en décomposant des éléments comme le fichier d’entrée, les codecs, les filtres, le mapping des flux et le conteneur de sortie - Le périmètre est large : du remuxing/transcodage au découpage et à l’assemblage, en passant par les sous-titres et filigranes, les miniatures et GIF, les fichiers de test, les métadonnées, checksums et rapports QCTools
- Il n’y a pas de recherche intégrée, mais le site explique comment déplier toutes les recettes puis utiliser la recherche du navigateur pour trouver les mots-clés nécessaires
- En plus de FFmpeg, il couvre aussi des outils comme le rip CDDA, ImageMagick et
flac, ce qui en fait un recueil de commandes pratiques pour des workflows de préservation numérique
Ce que propose ffmprovisr
- ffmprovisr réduit la charge liée à l’assemblage manuel de commandes FFmpeg en fournissant, pour chaque tâche, des commandes d’exemple et des explications d’options
- L’utilisateur clique sur un bouton de tâche pour accéder à une commande unique ou à une liste de commandes associées, puis consulte la commande d’exemple et le comportement de chaque option
- La page elle-même ne comporte pas de fonction de recherche ; elle recommande d’ouvrir toutes les recettes puis d’utiliser
ctrl+foucmd+fpour lancer la recherche du navigateur - Parmi les ressources de référence de base, elle renvoie au site officiel de FFmpeg, aux instructions d’installation de Reto Kromer, à Command Line Crash Course et à explainshell.com
- La licence est la Creative Commons Attribution 4.0 International License
Principes de base pour lire une commande FFmpeg
- Une fois FFmpeg installé, on l’appelle en saisissant
ffmpegdans l’invite de commandes - Une commande est généralement composée de paires option-valeur
- Dans
-i input_file.ext,-iest l’option qui désigne le fichier d’entrée, etinput_file.extest le fichier cible - Dans
-c:v prores,-c:vindique l’encodage du flux vidéo, etproresest le codec à utiliser
- Dans
- Le nom du fichier de sortie se place à la fin de la commande et se spécifie par son nom, sans option de sortie séparée
ffmpegenregistre la vidéo, tandis queffplaypeut lire la vidéo générée sans l’enregistrer- Exemple d’enregistrement de barres SMPTE :
ffmpeg -f lavfi -i smptebars=size=640x480 -t 5 output_file - Exemple de lecture de barres SMPTE :
ffplay -f lavfi smptebars=size=640x480 - L’exemple FFmpeg nécessite
-i, une durée d’enregistrement-t 5et un fichier de sortie, mais l’exemple FFplay n’a pas besoin de-i
- Exemple d’enregistrement de barres SMPTE :
Points de contrôle pour réduire les erreurs
- Il faut vérifier que le fichier de sortie s’ouvre, se lit, et que son image et son son correspondent au résultat attendu
- L’extension de sortie doit correspondre au codec voulu, et certaines extensions amènent FFmpeg à choisir par défaut certains codecs
- Par exemple,
.mp4peut être configuré par défaut avec un encodage H.264
- Par exemple,
"Error: No such file or directory"peut être dû à un mauvais répertoire, une faute de frappe, un espace manquant ou une option mal accolée- Pour accéder au dossier Downloads sous macOS, utilisez
cd $HOME/Downloads - Si une commande copiée-collée semble correcte mais génère une erreur, il est recommandé de la retaper directement dans la ligne de commande
- Pour accéder au dossier Downloads sous macOS, utilisez
"Could not find tag for codec"apparaît lorsqu’on tente de remuxer un fichier contenant un codec audio ou vidéo incompatible avec l’extension de sortie- Il faut d’abord transcoder vers un codec approprié, ou retirer
-c copylorsqu’on est certain que l’extension entraînera automatiquement un encodage avec le bon codec
- Il faut d’abord transcoder vers un codec approprié, ou retirer
"Killed"peut apparaître lorsque le fichier dépasse la capacité mémoire du serveur- Sur un serveur distant, on peut résoudre le problème en augmentant la capacité mémoire
- Sur un serveur local, il vaut mieux maintenir FFmpeg à jour et éviter de l’exécuter en même temps que d’autres programmes gourmands en mémoire
- Si
"Error splitting argument list: option not found"apparaît lors de l’utilisation d’un filtre, il faut vérifier l’usage des guillemets et le format du filtergraph - Les filtres nécessitent un réencodage des flux ; les utiliser avec
-c copy, qui copie directement les flux du fichier, peut donc poser problème
Filtergraph, mapping des flux et codecs par défaut
- Lorsqu’on exécute des traitements FFmpeg par lot dans une boucle, on peut placer
-nostdinavant l’entrée afin d’écraser le comportement par défaut d’interaction avec l’entrée standard- Exemple :
ffmpeg -nostdin -i input_file ...
- Exemple :
- FFmpeg définit automatiquement les codecs et les paramètres de codec par défaut selon le format du fichier de sortie
.avi: audiomp3, vidéompeg4.mkv: audioac3, vidéo H.264.mov: audio AAC, vidéo H.264.mp4: audio AAC, vidéo H.264.mpg: audiomp2, vidéompeg1video.mxf: audiopcm_s16le, vidéompeg2video.wav: audiopcm_s16le
- Un filtergraph est une combinaison de noms de filtres et d’options placée après
-vfou-af-vfest un alias de-filter:vhflipest un exemple de filtre vidéo,amergeun exemple de filtre audio- Plusieurs filtres se chaînent avec des virgules, et plusieurs chaînes de filtres se séparent par des points-virgules
-vf "fieldmatch,yadif,decimate"est une chaîne de filtres utilisée pour le traitement inverse telecine- S’il y a plus d’une entrée ou sortie, il faut utiliser
-filter_complexau lieu de-vf - Il faut utiliser des guillemets droits et éviter les guillemets courbes
- Le mapping des flux détermine quels flux vidéo, audio, sous-titres, données ou pièces jointes du fichier d’entrée seront inclus dans la sortie
- FFmpeg reconnaît les types de flux
a,v,s,dett -map 0:vsélectionne tous les flux vidéo du premier fichier d’entrée-map 0:3sélectionne le quatrième flux du premier fichier d’entrée-map 0:a:2sélectionne le troisième flux audio du premier fichier d’entrée- Si aucun mapping n’est spécifié, le comportement par défaut pour un fichier vidéo consiste à n’inclure dans la sortie qu’un seul flux vidéo et un seul flux audio
- Pour mapper tous les flux, utilisez
-map 0 - Ajouter
?, comme dans-map 0:a?, permet de traiter par lot des fichiers sans audio sans provoquer d’erreur
- FFmpeg reconnaît les types de flux
Changement de conteneur et transcodage
- Le réemballage d’un fichier se fait avec
ffmpeg -i input_file.ext -c copy -map 0 output_file.ext- Les données vidéo, audio et sous-titres internes sont transférées vers un autre format de conteneur sans être modifiées
- Le réemballage est aussi appelé remuxing ou re-multiplexing
- Il faut utiliser
-map 0pour conserver tous les flux, par exemple plusieurs pistes audio - Certains conteneurs ne peuvent contenir que certains encodages de flux, ce qui peut rendre le réemballage impossible sans réencodage
- La création d’un Broadcast WAV écrit le chunk BEXT et les métadonnées associées avec
-write_bext 1et-metadata field_name='Content'- Les champs couramment utilisés sont
description,originator,originator_reference,origination_date,origination_time,coding_historyetIARL - Les champs de métadonnées BWF ont une limite de nombre de caractères, et
OriginatorReferenceest limité à 32 caractères
- Les champs couramment utilisés sont
- Lors du réemballage d’une vidéo au codec DV dans un fichier
.dv, utiliser-f rawvideo -c:v copyafin d’éviter que les métadonnées d’origine contenues dans le flux DV ne soient supprimées involontairement - Exemple de transcodage en Apple ProRes LT :
-c:v prores -profile:v 1 -vf yadif -c:a pcm_s16le- Les profils ProRes 422 sont distingués ainsi :
0Proxy,1LT,2Standard,3HQ - Les conteneurs ProRes pris en charge par FFmpeg sont QuickTime
.mov, Matroska.mkvet MXF.mxf
- Les profils ProRes 422 sont distingués ainsi :
- Exemple de transcodage H.264 :
-c:v libx264 -pix_fmt yuv420p -c:a aac- Les valeurs par défaut de
libx264sont le préréglagemediumet un CRF de 23 -pix_fmt yuv420pspécifie un sous-échantillonnage chroma 4:2:0 pour la compatibilité avec QuickTime et la plupart des lecteurs non basés sur FFmpeg- Pour l’optimisation du streaming, ajouter
-movflags +faststart - Exemple de qualité plus élevée :
-preset veryslow -crf 18, le CRF 18 étant souvent considéré comme « visuellement sans perte »
- Les valeurs par défaut de
- L’encodage H.264/H.265 basé sur GPU Nvidia utilise
h264_nvencouhevc_nvenc- Le matériel à fonctions fixes de Nvidia peut offrir des performances 10 fois supérieures à l’encodage CPU, mais l’optimisation de la qualité à bas débit nécessite davantage de paramètres
- HEVC est décrit comme un codec plus efficace pris en charge sur les GPU depuis environ 2015
- Le transcodage H.265/HEVC utilise
-c:v libx265 -pix_fmt yuv420p -c:a copy- Les valeurs par défaut de
libx265sont le préréglagemediumet un CRF de 28 - Un CRF 28 en H.265 correspond à un CRF 23 en H.264, et la taille du fichier peut être environ divisée par deux
- Les valeurs par défaut de
- L’exemple sans perte pour l’archivage consiste à placer FFV1 Version 3 dans un conteneur Matroska et à générer en même temps un
framemd5de l’entrée-map 0mappe tous les flux-dnexclut les flux de données que Matroska n’autorise pas-slicecrc 1ajoute des informations CRC permettant au décodeur de détecter les slices endommagées-f framemd5 -angénère une somme de contrôle MD5 pour chaque frame vidéo
Modification des propriétés vidéo et audio
- La recette de changement de rapport d’image utilise un filtre de padding
- Pour passer de 4:3 à 16:9, elle applique un pillarbox
- Pour passer de 16:9 à 4:3, elle applique un letterbox
- Pour une vidéo sans son, on peut utiliser
-anau lieu de-c:a copy
- L’exemple de conversion SD vers HD utilise trois filtres :
colormatrix=bt601:bt709,scale=1440:1080:flags=lanczosetpad=1920:1080:240:0- Il change les coefficients de luminance de Rec. 601 vers Rec. 709
- Le scaling Lanczos est plus lent que le bilinear par défaut, mais donne de meilleurs résultats
- Pour une source entrelacée, il est conseillé de désentrelacer avec
yadifavant le scaling
- Le rapport d’affichage peut être modifié au niveau du conteneur avec une option comme
-aspect 4:3- Utilisé avec
-c:v copy, cela affecte le rapport d’image stocké dans le conteneur, et non celui des frames encodées
- Utilisé avec
- La conversion d’espace colorimétrique utilise le filtre
colormatrix=src:dst- Les valeurs autorisées incluent
bt601,smpte170m,bt470bg,bt709etbt2020 - L’intégration de métadonnées d’espace colorimétrique utilise
-color_primaries,-color_trcet-colorspace - Il faut être prudent, car un vrai fichier Rec.601 peut aussi recevoir une balise Rec.709
- Les balises de métadonnées étant écrites par
libx264oulibx265, elles ne peuvent pas être ajoutées sans réencodage
- Les valeurs autorisées incluent
- Le changement de vitesse utilise conjointement
setptsetatempo- L’exemple crée une copie de type PAL speed-up en passant de 24 fps à 25 fps tout en conservant la hauteur audio
- Les fondus utilisent les filtres
fadeetafade, et nécessitent de réencoder la vidéo et l’audio en raison de l’utilisation de filtres - L’extraction audio utilise
-c:a copy -vnpour extraire sans perte le flux audio, sans vidéo - La combinaison de deux pistes audio utilise
amergeet-filter_complex- Cela peut être utile pour des traitements ultérieurs qui attendent une seule piste audio, comme les sous-titres automatiques de YouTube
- Il est recommandé d’exécuter
ffprobeavant d’écrire un script pour identifier les pistes voulues
- L’analyse et la normalisation du volume utilisent le filtre
loudnorm- La sortie JSON peut servir de valeurs d’entrée pour une normalisation en 2 passes
- Les valeurs par défaut sont décrites comme correspondant bien au niveau cible recommandé par PBS
- La normalisation en 1 passe est rapide, mais moins précise que celle en 2 passes
- Des recettes couvrant le préaccentuation CD, l’égalisation RIAA, le rééchantillonnage audio et l’interprétation forcée d’un WAV 192 kHz comme 96 kHz sont également incluses
Découpage, assemblage et segments
- Pour assembler des fichiers ayant les mêmes spécifications techniques, utiliser le demuxer concat
ffmpeg -f concat -i mylist.txt -c copy output_file- Les fichiers à assembler doivent avoir les mêmes codecs et spécifications techniques, et le fichier obtenu doit impérativement être prévisualisé
- Pour utiliser des chemins absolus, ajouter
-safe 0
- Pour assembler des fichiers de formats ou de codecs différents, utiliser le filtre
concatet-filter_complex- Les fichiers d’entrée peuvent différer par le conteneur, le codec, le sous-échantillonnage chroma, la fréquence d’images, etc.
- L’exemple de base ne fonctionne correctement que si les fichiers ont la même résolution
- Si les fréquences d’images diffèrent, la sortie peut avoir une fréquence d’images variable
- Si les résolutions diffèrent, les aligner avec
scaleavant concat ; pour assembler SD et HD, la SD peut être traitée en pillarbox
- La division de fichiers est gérée avec le muxer segment
-segment_time 60crée des segments d’une durée maximale de 60 secondes%03dcrée des noms de fichiers numériques sur 3 chiffres avec padding par zéros
- Le trimming sans réencodage utilise
-ss,-to,-t,-c copyet-map 0- Les codecs interframe comme H.264 peuvent démarrer au point le plus proche basé sur une i-frame
-sseof -5copie à partir de 5 secondes avant la fin du fichier
- La suppression du silence au début d’un fichier audio utilise
silenceremove=start_threshold=-57dB:start_duration=1:start_periods=1-57dBest présenté comme un niveau adapté pour tenir compte du souffle analogique- L’utilisation du filtre entraîne le réencodage de l’audio
- La suppression du silence à la fin d’un fichier audio s’effectue dans l’ordre
areverse,silenceremove,areverse- Comme
silenceremoveest mieux adapté à la suppression du silence au début, l’audio est inversé puis remis dans son sens d’origine
- Comme
Traitement de la vidéo entrelacée
- Lors de la création d’un fichier d’accès HD H.264 à partir d’une source SD NTSC, on utilise ensemble
yadif,scale,padetformat=yuv420pyadifest un filtre de désentrelacementscale=1440:1080:flags=lanczosredimensionne l’image en 1440x1080pad=1920:1080:(ow-iw)/2:(oh-ih)/2ajoute des bandes pour adapter une entrée 4:3 à une image de sortie 16:9
- Un exemple de désentrelacement courant est
-vf "yadif,format=yuv420p"format=yuv420pspécifie un sous-échantillonnage de chrominance 4:2:0 pour la compatibilité de lecture H.264- FFmpeg propose aussi d’autres désentrelaceurs que
yadif:bwdif,w3fdif,kerndeint,nnedi
- Le désentrelacement qui sépare les champs en images utilise
idet,bwdif,format=yuv420p- Il est privilégié pour préserver la cadence visuelle de la source dans les vidéos entrelacées avec beaucoup de mouvement
idetdétecte l’ordre des champsbwdifproduit par défaut une image pour chaque champ
- L’inverse telecine utilise
fieldmatch,yadif,decimate- Il annule le pulldown 3:2 et restaure une vidéo entrelacée à 29,97 fps au framerate 24 fps de la source film d’origine
- Appliqué à un fichier 29,97i, le framerate de sortie devient en réalité 23,976 fps
- Pour modifier l’ordre des champs, on utilise
setfield=tffousetfield=bff- Comme un filtre vidéo est utilisé,
-c copyn’est pas possible et un réencodage est nécessaire
- Comme un filtre vidéo est utilisé,
- Pour vérifier le motif d’entrelacement, on analyse sans fichier de sortie avec
ffmpeg -i input_file -filter:v idet -f null -
Filigranes, sous-titres, vignettes, GIF
- Un filigrane texte se crée avec le filtre
drawtext- On spécifie les options
fontfile,fontsize,text,fontcolor,alpha,xety x=(w-text_w)/2:y=(h-text_h)/2le place au centre quelle que soit la taille de la vidéo
- On spécifie les options
- Un filigrane image peut être placé en haut à droite avec
overlay=main_w-overlay_w-5:5 - Un timecode incrusté utilise les options
timecode,box,boxcoloretratededrawtext- Le timecode de départ est au format
hh:mm:ss[:;.]ff
- Le timecode de départ est au format
- L’intégration d’un fichier de sous-titres utilise
-i subtitles_file -c copy -c:s mov_textmov_textfonctionne dans les conteneurs MP4 et MOV- Les formats autorisés dans un conteneur MKV sont
ASS,SRTetSSA
- Une vignette unique s’extrait avec
-ss 00:00:20 -vframes 1 thumb.png - Pour créer une vignette toutes les minutes, utilisez
-vf fps=1/60 out%d.png - Pour transformer une séquence d’images en GIF, on utilise
image2,-framerate,-pattern_type globetscale - Un GIF de haute qualité se crée en deux étapes
- La première commande crée une palette personnalisée avec
palettegen - La deuxième commande applique la palette avec
paletteuse - Une méthode plus simple consiste à utiliser
-vf "fps=10,scale=500:-1", mais le dithering est plus visible et la taille de fichier plus faible
- La première commande crée une palette personnalisée avec
Séquences d’images, scopes, OCR
- Pour créer une vidéo non compressée 10 bits à partir d’une séquence d’images, on utilise
-f image2 -framerate 24 -i input_file_%06d.ext -c:v v210- Le framerate par défaut du demuxer
image2est de 25 fps %06dlit les noms de fichiers numériques à six chiffres dans l’ordre croissant
- Le framerate par défaut du demuxer
- Pour créer une vidéo en combinant une image et un fichier audio, on utilise
-loop 1,-shortestet-vf scale=1280:720- Cela peut être utile lorsqu’on veut mettre en ligne un fichier audio sur une plateforme comme YouTube
ffplay -f lavfiet des filtres permettent de visualiser la profondeur de bits audio, un graphe en décibels, les pixels hors plage broadcast et un vectorscopetblend=all_mode=difference128ethstackaffichent côte à côte les différences temporelles entre deux vidéos d’entréexstacksert à créer une fenêtre de sortie empilant plusieurs sources vidéo verticalement ou horizontalement, et est utile pour le même usage que la fenêtre de sortie utilisée dansvrecord- Un exemple d’OCR utilise le filtre
ocretdrawtextpour afficher le texte reconnu sur l’image - La sortie des données OCR s’affiche à l’écran sous la forme
ffprobe -show_entries frame_tags=lavfi.ocr.text -f lavfi -i "movie=input_file,ocr"
Métadonnées, sommes de contrôle, travaux de préservation
- L’extraction des métadonnées techniques s’effectue avec
ffprobe -i input_file -show_format -show_streams -show_data -print_format xml- Outre XML, les formats de sortie JSON et flat peuvent être utilisés
- La suppression des métadonnées utilise
-map_metadata -1 -c:v copy -c:a copy- La vidéo et l’audio sont copiés, mais pas les métadonnées
- Le traitement par lot en Bash s’effectue avec un fichier
.shet une bouclefor- Exemple :
for file in *.mxf; do ffmpeg -i "$file" -map 0 -c copy "${file%.mxf}.mov"; done - Le fichier
.shet les fichiers.mxfà traiter doivent se trouver dans le même répertoire, et la commande doit être exécutée depuis ce répertoire - Pour un traitement récursif, on peut utiliser
find input_directory -iname "*.mxf" -exec ffmpeg -i {} -map 0 -c copy {}.mov \;
- Exemple :
- Sous Windows, le traitement par lot s’effectue avec des scripts PowerShell
.ps1- L’exemple crée une liste de fichiers
.mp4et les remuxe en remplaçant l’extension de chaque fichier par.mkv - Pour appeler
ffmpegsans chemin complet, il doit être correctement configuré
- L’exemple crée une liste de fichiers
- La vérification des erreurs de décodeur décode sans fichier de sortie avec
ffmpeg -i input_file -f null -et affiche les erreurs à l’écran - La vérification de fixité FFV1 Version 3 utilise
-report -i input_file -f null -pour détecter les CRC checksum mismatch- Le Frame CRC est activé par défaut dans FFV1 Version 3
- Le MD5 vidéo image par image se génère avec
-f framemd5 -an - Le MD5 par groupe d’échantillons audio se génère avec
asetnsamples=n=48000 -f framemd5 -vn- Il est présenté comme une bonne pratique d’aligner le nombre de groupes d’échantillons sur la fréquence d’échantillonnage du média
- Par défaut, l’audio est transcodé en PCM 16 bits pour générer le framemd5
- Le MD5 de flux peut être créé en mappant séparément les flux vidéo et audio avec
-map, puis avec-c copy -f md5- Il sert à vérifier l’intégrité des informations A/V indépendamment des modifications des métadonnées du conteneur
streamhashaffiche un hash par flux pour tous les flux- Comme il n’est pas nécessaire de savoir quels flux existent ni combien il y en a, c’est utile pour le hachage de mixed born-digital material
- Les rapports QCTools génèrent un fichier
.qctools.xml.gzavecffprobe -f lavfiet notammentsignalstats,cropdetect,idet,psnr,ssim,ebur128,astats- Des commandes distinctes sont fournies pour les fichiers avec audio et sans audio
- L’extraction des sous-titres codés EIA-608 Line 21 sort les valeurs hexadécimales en CSV avec le filtre
readeia608etffprobe
Fichiers de test et autres exemples FFmpeg
- Les vidéos de test sont créées ou lues à partir d’entrées lavfi comme
mandelbrot,smptebars,testsrcousmptehdbars- L’exemple Mandelbrot produit une sortie H.264 en 1280x720, 25 fps, 10 secondes
- L’exemple SMPTE bars produit une sortie ProRes en 720x576, 25 fps, 10 secondes
- La lecture des HD SMPTE bars se fait avec
ffplay -f lavfi -i smptehdbars=size=1920x1080 - La lecture des VGA SMPTE bars se fait avec
ffplay -f lavfi -i smptebars=size=640x480
- L’audio de test en sinusoïde génère un fichier WAV avec
sine=frequency=1000:sample_rate=48000:duration=5etpcm_s16le - La vidéo de test combinant des SMPTE bars et une sinusoïde à 1 kHz utilise deux entrées lavfi ainsi que
-c:v ffv1et-c:a pcm_s16le - Le fichier de test corrompu altère volontairement le contenu des paquets avec
-bsf noise=1 -c copy, sans endommager le conteneur - Le jeu de la vie de Conway est simulé avec
ffplay -f lavfi life=..., et l’on peut enregistrer un segment avecffmpeget-t 5 - La comparaison de similarité perceptuelle de deux vidéos utilise le filtre
signature=detectmode=full:nb_inputs=2 - Le hachage perceptuel de la vidéo d’entrée génère un fichier XML avec
signature=format=xml:filename="output.xml" - Une séquence d’images peut être lue directement avec
ffplay -framerate 5 input_file_%06d.ext, sans créer de vidéo - La séparation des pistes audio et vidéo utilise
-map 0:v:0et-map 0:a:0 - La fusion des pistes audio et vidéo combine la vidéo du premier fichier et l’audio du second avec
-map 0:v -map 1:a -c copy - Le fichier MPEG destiné à créer une image ISO pour accès DVD se crée avec
-aspect 4:3 -target ntsc-dvd output_file.mpg, et nécessite l’installation dedvdauthor - Le CSV pour la détection de scènes basée sur YDIF affiche les valeurs
lavfi.signalstats.YDIFdeffprobeetsignalstats - Le head switching noise peut être masqué en dessinant une boîte noire en bas de l’image avec
drawbox=w=iw:h=7:y=ih-h:t=max - Pour diffuser en direct vers une destination RTMP tout en enregistrant localement en MP4, on utilise le muxer
tee- L’entrée est mise à l’échelle à 1280 px de largeur, et le flux est arrêté après une durée définie
- L’exemple inclut une note indiquant qu’il a été utilisé quotidiennement pendant environ 4 ans pour diffuser en direct une véritable émission TV
- Les informations sur un décodeur, encodeur, demuxer, muxer ou filtre précis se consultent avec
ffmpeg -h type=name- Les exemples sont
encoder=libx264,decoder=mp3,muxer=matroska,demuxer=movetfilter=crop
- Les exemples sont
Outils connexes présentés avec FFmpeg
- Les outils d’extraction CDDA couvrent la vérification de l’offset du lecteur CD et l’extraction précise de CD audio
- Les différents modèles de lecteurs CD ayant des positions de début de lecture différentes, une correction d’offset est nécessaire pour vérifier les checksums d’un même contenu
- L’identification du lecteur peut être vérifiée avec
cdda2wav -scanbus,cdda2wavetcdparanoia -vsQ - L’offset se trouve dans la liste des offsets de lecteurs CD Accurate Rip
- XLD est présenté comme outil GUI pour macOS
- L’extraction avec CD Paranoia utilise
cdparanoia -L -B -O [Drive Offset] [Starting Track Number]-[Ending Track Number] output_file.wav-Bcorrespond au mode batch, qui sépare automatiquement les pistes en fichiers distincts
- Cdda2wav est un outil qui utilise la bibliothèque Paranoia pour extraire précisément les CD audio
- La commande d’installation Homebrew est
brew install cdrtools - La commande d’exemple extrait tout le CD dans un seul WAV, interroge CDDB et génère une cue sheet
- Sur macOS, il faut démonter le CD avant d’exécuter la commande
- La commande d’installation Homebrew est
- CD emphasis est décrit comme une méthode de réduction du bruit pouvant affecter certains CD du début des années 1980 et des CD pressés au Japon
- La vérification de sa présence s’effectue avec
cdda2wav -Joucdparanoia -Q - Pour corriger pendant l’extraction avec Cdda2wav, il faut ajouter le flag
-T
- La vérification de sa présence s’effectue avec
- ImageMagick est une suite de logiciels libres et open source permettant d’afficher, convertir et éditer des fichiers d’images raster et vectorielles
- Les commandes sont appelées individuellement, comme
convert,montageoumogrify - La comparaison d’images renvoie le nombre de pixels différents avec
compare -metric ae image1.ext image2.ext null: - La génération de miniatures utilise
mogrify -resize 80x80 -format jpg -quality 75 -path thumbs *.jpg - Une grille d’images se crée avec
montage @list.txt -tile 6x12 -geometry +0+0 output_grid.jpg - La suppression des données EXIF utilise
mogrify -path ./stripped/ -strip *.jpg
- Les commandes sont appelées individuellement, comme
- L’outil
flacest un outil de transcodage FLAC et de manipulation de métadonnées créé par le projet FLAC- Il a l’avantage, par rapport à d’autres outils, de pouvoir intégrer des métadonnées étrangères comme BWF
- Pour convertir un WAV en FLAC tout en conservant les métadonnées BWF, on utilise
flac --best --keep-foreign-metadata --preserve-modtime --verify input.wav - Pour reconstruire le BWF d’origine depuis le FLAC, on utilise
--decodeà la place de--best
1 commentaires
Avis de Hacker News
Un peu hors sujet, mais je considère ffmpeg comme l’un des meilleurs logiciels jamais créés
Des ingénieurs talentueux comme Fabrice Bellard sont un immense cadeau pour la communauté FOSS, et même dans une licorne valorisée à environ 2 milliards de dollars où j’ai travaillé auparavant, une grande partie du produit reposait sur ffmpeg
https://ffmpeg.org/donations.html
C’est aussi lui qui a créé QEMU, TCC, QuickJS, etc.
Plus sérieusement, à n’importe quel instant, le nombre d’appareils exécutant du code qu’il a écrit est absolument délirant
La ligne de commande de ffmpeg reste à s’arracher les cheveux, même avec de bons guides, donc j’ai envie de recommander VapourSynth
https://www.vapoursynth.com/
C’est un outil de filtrage vidéo façon Python, optimisé, mais il fait aussi beaucoup plus : https://vsdb.top/
Et StaxRip exploite très bien ffmpeg, VapourSynth, des dizaines d’encodeurs et d’outils, au point que je redémarre de Linux vers Windows à cause de lui : https://github.com/staxrip/staxrip
C’est inutilement complexe, et d’un certain point de vue toute la structure a peut-être du sens, mais pour effectuer des tâches très courantes, devoir connaître des options qui ressemblent à des incantations n’est pas normal
Je dois avoir des dizaines d’alias bash qui réduisent des commandes ffmpeg de 150 caractères à deux mots
ffprobe n’a pas non plus de sens : dans 99 % des cas, on le lance sans argument juste pour voir rapidement la durée, la résolution, le framerate et le nombre de pistes audio, mais 99 % de la sortie concerne des choses totalement hors sujet comme les options de compilation
Quelques ressources à voir aussi :
https://ffmpeg.guide/ — créer rapidement et correctement des graphes de filtres FFmpeg complexes
https://www.hadet.dev/ffmpeg-cheatsheet/ — découpe, ajout de fondus en entrée/sortie, mise à l’échelle, concaténation, etc.
Pour une raison inconnue, ffmpeg se comporte différemment selon que les options
-sset-t/-tosont placées avant ou après-i, et dans mon cas les mettre avant fonctionnait mieuxLe texte original a le même problème
Forcer un graphe non linéaire à entrer dans une ligne de commande plate et linéaire, c’est étrange
Rien qu’une configuration JSON plus détaillée serait déjà bien mieux
Très utile
J’ai commencé à utiliser ChatGPT pour créer des commandes ffmpeg, et c’est beaucoup plus rapide et plus simple pour trouver ce dont j’ai besoin
J’ai aussi créé un petit outil pour le faire directement en ligne de commande : https://github.com/alexkrkn/help-cli
J’ai également fait une vidéo à ce sujet : https://www.youtube.com/watch?v=pOda6TDBqcY
En cherchant récemment une interface pour ffmpeg, j’ai découvert Shutter Encoder : c’est un très bon logiciel, open source et compatible mac/windows
J’ai enfin commencé à compresser 300 Go de vidéos personnelles accumulées sur 15 ans
https://www.shutterencoder.com/
Je compresse tout en H.265, et la taille des vidéos descend parfois jusqu’à 1/10. Y a-t-il une raison de ne pas faire ça ? J’ai lu que lire les vidéos compressées demandait plus de puissance de traitement, mais je ne sais pas vraiment si ce sera un gros problème à l’avenir
À prendre comme un avertissement : vérifiez plusieurs vidéos avant de supprimer les originaux
Cela dit, pour 300 Go, le stockage est assez bon marché, donc autant garder les originaux
Et pour l’utiliser avec Plex sans transcodage, c’est aussi plus simple dans mon homelab
Ce guide recommande
yadifcomme filtre de désentrelacement, mais à mes yeux w3fdif donne de meilleurs résultatsIl ne fait pas de suivi de mouvement comme yadif, donc il est assez rapide, et il évite les artefacts gênants que le suivi de mouvement produit parfois
Je préfère un résultat constamment moyen à un résultat parfois excellent et parfois mauvais
En revanche, contrairement à yadif qui regarde deux champs, w3fdif prend en compte trois champs à la fois, ce qui masque mieux les artefacts d’entrelacement
Si vous devez de toute façon réencoder, autant aller jusqu’à QTGMC
w3fdif peut produire un effet de scintillement, contrairement à yadif ; bwdif se comporte donc comme yadif tout en utilisant le meilleur appariement de champs de w3fdif
bwdifest un hybride deyadifetw3fdifLe principal obstacle à l’adoption de ffmpeg est sans doute constitué par les outils freemium premium hors ligne et les front-ends web
Ces sites ont optimisé leur référencement sur des requêtes que les gens tapent souvent dans Google, comme « avi to mp4 » ou « mp3 to wav »
Il m’a fallu étonnamment longtemps pour accepter les applications en ligne de commande, parce que le monde Windows m’avait appris que tout devait avoir une GUI
Les gens disent que ffmpeg est compliqué, mais même avec une belle GUI, ça ne devient pas vraiment plus simple. Ce qui est compliqué, c’est la compression vidéo elle-même
À moins d’un outil qui prend les décisions à votre place, comme une interface à clics à la HandBrake, aucun logiciel ne pourra vraiment rendre ça plus facile
Je n’en suis pas certain, mais une fois qu’on a appris l’encodage et la compression vidéo numérique avec assez de finesse, ce qu’il faut faire dans ffmpeg doit aussi paraître assez intuitif. Quelqu’un l’a déjà fait en pratique ?
À l’époque, il n’y avait pas encore de formats comme mkv ni de codecs comme HEVC, mais le concept consistant à manipuler l’audio/vidéo au moyen de plusieurs filtres est excellent, et la plupart des logiciels de conversion A/V fonctionnent ainsi
Quand j’ai commencé à lire les pages de manuel de FFmpeg, j’ai vu les liens, et après environ une journée d’expérimentation, j’ai pu m’en servir
Le fait que j’aime la ligne de commande et que je lise les pages man m’a peut-être avantagé
ffmpeg est puissant et je l’utilise souvent, mais sa structure d’API ne me rentre pas dans la tête. Ce serait bien d’avoir un front-end basé sur un LLM
Bonne idée. Amener FFmpeg à faire exactement ce qu’on veut est toujours intimidant
ChatGPT m’a aidé, mais ce n’était pas parfait
J’ai toujours eu du mal à mémoriser les options et arguments d’OpenSSL, alors maintenant j’utilise simplement GPT
Cela dit, les différences subtiles entre systèmes d’exploitation restent un petit problème