Des snippets pour bien adopter FFMPEG


FFMPEG est un utilitaire en ligne de commande et permet de manipuler c’est-à-dire : convertir le format, extraire une bande son, extraire une/plusieurs images… d’un fichier audio ou vidéo. Il est multiplateforme. Son installation est simple et rapide.

(maj du 24/12/2020) Sous linux, il faut juste lancer la commande suivante 

apt install ffmpeg

Voici quelques astuces que j’utilise souvent pour :

Conversion

.mov vers .avi

ffmpeg.exe -i .\REC_0010.MOV -vcodec copy -acodec  copy .\REC_0010.AVI

.mov vers .mp4

ffmpeg.exe -i .\REC_0010.MOV -vcodec copy -acodec  aac -strict experimental -ab 128k \REC_0010.MP4

.webm vers .mp3

ffmpeg -i "Metallica.webm" -ab 160k -ar 44100 "Metallica.mp3"

.wav vers .mp3

ffmpeg -i vocals.wav -acodec libmp3lame vocals.mp3

.mp4 vers .avi

ffmpeg -i "Metallica.mp4" -f avi -vcodec libxvid -acodec mp3 -b:v 1700k -b:a 192k "Metallica.avi"

.avi vers .mp4

ffmpeg -i "Metallica.AVI"  -c:v libx264 -pix_fmt yuv420p "Metallica.mp4"

.mpeg vers .mp4 sans perte de qualité

ffmpeg -i input.mpg -c:v libx264 -crf 23 -preset veryslow -c:a aac -b:a 192k -movflags +faststart output.mp4

plusieurs .avi vers .mp4

Il s’agit d’une commande shell pour convertir par exemple plusieurs fichiers .avi dans un dossier en format .mp4

  • Se positionner dans un dossier en ligne de commande
  • Puis lancer
cd folder
for file in $(ls | grep ".AVI"); do ffmpeg -i ${file} -c:v libx264 -pix_fmt yuv420p ${file}.MP4; done

Changer la taille d’une vidéo (largeur x hauteur)

ffmpeg -i \REC_0016.mp4  -vf scale=426:240 .\REC_0016_s.mp4

Rotation

ffmpeg.exe -i input.mp4  -acodec copy -vf vflip,hflip out.mp4

Comparer 2 vidéos côte à côte

ffmpeg -i .\REC_0028.mp4 -i .\REC_0028_stab.mp4 -filter_complex '[0:v]pad=iw*2:ih[int];[int][1:v]overlay=W/2:0[vid]' -map [vid] -c:v libx264 -crf 23 -preset veryfast .\REC_0028_merge.mp4

Stabiliser une vidéo

Deux étapes :

  • Créer un fichier .trf
  • Stabiliser la vidéo

Créer fichier .trf

ffmpeg -i .\REC_0028.mp4 -vf vidstabdetect=stepsize=6:shakiness=8:accuracy=9:result=transform_vectors.trf -f null -

Stabiliser

ffmpeg -i .\REC_0028.mp4 -vf vidstabtransform=input=transform_vectors.trf:zoom=1:smoothing=30,unsharp=5:5:0.8:3:3:0.4 -vcodec libx264 -preset slow -tune film -crf 18 -acodec copy .\REC_0028_stab.mp4

Création .gif animé à partir d’une vidéo

Exemple : extraire quelques images de la vidéo : 9 secondes  à partir du temps 00:02:25

ffmpeg -ss 00:02:25 -i Bachata4.mp4 -t 9 -s 480x270 -f image2 sary/im_%03d.png

Créer le GIF : 1×24 : 24 images par secondes en utilisant Imagemagick

convert -delay 1x24 -loop 0 sary/im_*.png anim.gif

Couper et re-encoder une vidéo

-ss debut
-t = fin
ffmpeg -i cYOIyd1guLQ_old.mp4 -ss 00:00:00 -t 00:05:05  tencoding.mp4

Extraction

toutes les images

ffmpeg  -i angelina.mp4 angelina-%03d.jpg

Bande son

ffmpeg -i angelina.mp4 -vn -ar 44100 -ac 2 -ab 192 -f mp3 angelina.mp3

Ajouter un texte

ffmpeg -i 12675574_1656234631304852_1667709363_n.mp4 -strict experimental -vf  drawtext="fontfile=RobotoCondensed-Regular.ttf:  text='Trouvé sur Vazo\:\:Tsara - Février 2016':fontsize=10:fontcolor=white:x=5:y=700"  12675574_1656234631304852_1667709363_n_txt.mp4

Fusionner plusieurs vidéos en un

Créer un fichier texte contenant les vidéos à fusionner. Le contenu du fichier doit respecter le format suivant

exemple de fichier: videos.txt

file '2022-02-24 22-35-41.mp4'
file '2022-02-24 23-14-08.mp4'

Une fois ce fichier créé, lancer la commande:

ffmpeg -f concat -safe 0 -i videos.txt -c copy output.mp4

ffprobe – récupérer les informations d’une vidéo

ffprobe recueille des informations à partir de flux multimédia et les imprime de manière lisible par l’homme et la machine.

Exemple: Récupérer la durée de la vidéo en secondes.

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 video1.mp4

Filtre fade-in / fade-out au début et à la fin

Pour une vidéo video1.mp4, qui dure 76 secondes (1mn 16s),

la commande suivante applique :

  • un filtre fade-in (fade=t=in) au début de la vidéo st=0 (start=0), pendant 3 secondes d=3 (duration=3)
  • et un filtre fade-out (fade=t=out) avant la fin de la vidéo st=73 (start=73), pendant 3 secondes d=3 (duration=3)
ffmpeg -i video1.mp4 -vf "fade=t=in:st=0:d=3,fade=t=out:st=73:d=3" -c:a copy video1_out.mp4

Ajouter un audio à une vidéo

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -map 0:v -map 1:a -y output.mp4