Sous linux (mais ça marche sous MacOS et Windows), parmi les outils les plus fabuleux pour travailler sur les vidéos, FFMPEG est en haut de ma liste.
Il permet en quelques lignes de commande de convertir, d'encoder, d'extraire la piste son d'une vidéo ou d'un audio dans tous les sens. En voici quelques exemples qui me sont bien pratiques. Exemples piochés un peu partout sur la toile. Petit à petit on peut se construire nos propres commandes.
La syntaxe de la commande reste tout à fait classique de la forme
On tape la commande : ffmpeg -i ma-video.mp4
ffmpeg -i input.avi -b 1000000 output.avi
ffmpeg -i input.avi -vcodec libx265 output.avi
ffmpeg -i entree.mp4 -vcodec libx264 -crf 24 sortie.mp4
ffmpeg -i video.mp4 -vf "transpose=1" video_rotate.mp4
Avec 1 pour +90°, 2 pour -90°, 3 pour +90° et symétrie verticale
Par exemple du avi au mp4 en qualité moyenne si aucune option n'est spécifiée :
ffmpeg -i video.avi video.mp4
avec la meilleure qualité on rajoute -crf 0 à 51 pour 0 la meilleure qualité à 51 la moins bonne.
ffmpeg -i video.avi -crf 0 video.mp4
Si on souhaite juste changer de container :
ffmpeg -i videoEntree.mkv -c copy videoSortie.mp4
ffmpeg -i maVideo.mp4 -vn monAudioEnSortie.mp3
-vn
va bloquer le flux vidéo en sortie et enregistrer notre audio dans le fichier monAudioEnSortie.mp3
ffmpeg -i maVideo.avi -map 0:a monAudioEnSortie.ogg
On utilise -map
qui nous donne plus de possibilités pour définir les flux à copier de l'entrée vers la sortie.
ici 0:a
va dire à ffmpeg de mapper toutes les pistes audio de notre entrée (le 0
) vers le fichier de destination.
Pour connaître les flux contenus dans un fichier on lance la commande ffmpeg -i maVideo.mkv
ce qui donne :
Dans cette exemple j'ai qu'un seul flux audio Input #0
et un flux video Stream #0
.
Dans des vidéos multi-langues, on aurait observer les différents flux.
Je veux récupérer 3 secondes du flux audio à partir des 35 secondes du début, je pourrai faire :
ffmpeg -ss 00:00:35 -t 3 -i videoEntree.mkv -map 0:a:0 -c copy audioEnSortie.mp4
-ss
: utilisé comme option en entrée (avant le -i
), on cherche dans le fichier et on se positionne à 35 secondes du début de la video.
A savoir : la documentation nous dis qu'il n'est pas possible de se positionner précisément dans tous les cas. Il m'arrive d'être obligé de jouer à + ou - sur les secondes pour bien caler mon point de départ.
-t
: exprime la durée exprimée en seconde que je souhaite récupérer.
-map
: utilisé pour choisir les flux des entrées qu'on veut inclure dans les flux des sorties. Ici 0:a:0
indique que nous allons copier la première source audio dans le ficher de sortie.
Le premier 0 se réfère au premier input de notre fichier en entrée et inclurera tous les flux qu'il contient.
Le a
c'est le "spécificateur de flux". dans ce cas c'est l'audio que l'on veut
Le dernier 0 indique la piste audio que je souhaite. Ici j'en ai qu'une mais j'aurais pu avoir plusieurs langues. Exemple :
Si je souhaite extraire l'italien j'écrirais -map 0:a:2
. Le premier 0 correspond au flux audio de mon fichier d'entrée, le a
le choix du flux, l'audio dans ce cas, le dernier chiffre 2
le troisième flux qui correspond à l'italien.
-map est très puissante et permet beaucoup de choses en manipulant plusieurs fichiers en entrée et lui faire divers extractions, traitements. le wiki de ffmpeg donne plus de détails.
sources d'inspiration :