FFMPEG – Conversion par lot

 

Voir aussi : ffmpeg – premier pas

Avec ffmpeg, il est possible de convertir par lot n’importe quel format de vidéo.

Pour ce faire, voici un exemple de conversion vidéo du format H.265 en H.264 :

for i in *.mp4 ; do
ffmpeg -i "$i" -c:v libx264 -vf scale=1280:-2 -c:a copy -map 0:0 -map 0:1 "H $i"
sleep 3
done
Explication du code :

 

 

for i in *.MP4 ; do

Ceci va prendre tout les fichiers présent dans le dossier indiqué au préalable via le terminal avec l’extension .MP4 pour le traitement par lot. Pour les novices, “for” est utilisé en programmation pour faire des boucles.

 

ffmpeg -i "$i"

Exécute le programme ffmpeg et introduit l’input.

 

 

-map 0:0 -map 0:1

Fait comprendre à ffmpeg qu’on a besoin que des deux premiers stream, 0:0 correspond au stream vidéo, 0:1 au stream audio. Ceci est dans le but d’alléger le fichier si d’autres streams sont présents, comme une autre piste audio…etc. Cette ligne est totalement optionnelle.

 

-c:v libx264

Spécifies le codec. On peut personnaliser cette ligne en rajoutant par exemple -preset slow, déterminer le -crf…etc.

S’écrit aussi ainsi : -c:v au lieu de -vcodec

En savoir plus sur les options du H.264.

 

scale=1280:-2

On va mettre à la même résolution toutes les vidéos avec une largeur de 1280 et une hauteur proportionnelle. Utile quand les fichiers vidéos n’ont pas la même résolution.

 

-c:a copy

On va recopier tel quel le stream audio.

 

"H $i"

Vu que le nouveau fichier va se créer dans le même répertoire, on va le renommer afin de ne pas écraser le fichier source. Les nouveaux fichiers vont commencer par “H”.

 

sleep 3

Accorde au processus un temps de repos.

 

 

Un autre exemple pour extraire l’audio

En supposant que l’audio dans le stream 0:1 est en AAC, voici comment extraire en lot :

for i in *.MP4; do
ffmpeg -i "$i" -vn -acodec copy "${i%}.aac"
sleep 3
done

-vn va enlever tout les streams vidéos.

-acodec copy ou -c:a copy va simplement copier le stream audio sans le ré-encoder, ce qui représente un gain de temps dans l’extraction.

 

Script et Multithread
#!/bin/bash


function encode { 
        base="${1%.*}"
        extension="${1##*.}"
        out="${base}_output.${extension}"
                
        ffmpeg -i $1 -c:v libx264 -vf scale=1280:-2 -c:a copy -map 0:0 -map 0:1 $out
}     


encode video1.mp4 &
encode video2.mp4 &
echo "ZZzzzzzzZZzzzzz"
wait
    
    
    
~                                                                               
~

On peut créer aussi un script avec bash très simple afin d’automatiser la conversion en multithread, c’est à dire que chaque coeur du processeur va s’occuper d’une vidéo, ceci va considérablement accélérer la conversion.

Vous pouvez créer le script avec VIM et l’exécuter via le terminal en faisant ./nomdufichier à la racine du répertoire.

 

 

 

 

 

 

 

Emir C. Écrit par :

Soyez le premier à commenter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *