FFMPEG – Conversion par lot

Last updated on 2 octobre 2017

 

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.

 

 

 

 

 

 

 

Soyez le premier à commenter

Laisser un commentaire

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

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.