Programmation : FFMPEG

Codes personnels pour le son et l'image

Scripts basés sur FFMPEG. Créés pour tourner soit sur Windows soit sous Linux (précisé).

Paramètres communs à tous les scripts :

[ffmpeg] -y -hide_banner -loglevel error -stats  -err_detect ignore_err [-i ...]

Audio

AAC stéréo

Force l'audio en AAC stéréo.

#Windows batch, appel : script.bat input.mp4
ffmpeg.exe -i %1 -c:v copy -c:a aac -ac 2 %1.mp4
    

Trim musique

Supprime les blancs en début et fin de musique.

#Windows batch, appel : script.bat input.mp3
ffmpeg.exe-i %1 -af silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-40dB %1_temp.mp3
    

Vidéo

Pixels carrés

Force la vidéo avec les pixels carrés.

#Windows batch, appel : script.bat input.mp4
ffmpeg.exe -i %1 -vf scale=iw:ceil((ih/sar)/2)*2,setsar=1 -crf 20 -c:v libx264 -c:a copy %1.mp4
    

Rescale custom

Script pour remettre une vidéo dans les bonnes proportions

#Windows batch, appel : script.bat input.mp4 4/3
ffmpeg.exe -i %1 -crf 20 -vf scale=iw:ceil(iw*(1/(%2))/2)*2,setdar=%2 -c:v libx264 -c:a copy %1.mp4
    

Crop letterbox

Script pour supprimer les bandes noires d'une vidéo. Je n'ai pas trouvé d'équivalent pour Windows (commande awk)

#Linux batch, appel : script.sh input.mp4
[ -e "$1" ] && ffmpeg -i "$1" -vf $(ffmpeg -ss 0 -i "$1" -t 1:00 -vsync vfr -vf fps=1/2,cropdetect -f null - 2>&1 | awk '/crop/ { print $NF }' | tr ' ' '\n' | sort | uniq -c | sort -n | tail -1 | awk '{ print $NF }') -ss 0 -t 0:01 -threads 5 -preset ultrafast -strict -2 "$1_temp.mp4"
echo -------------------------------
echo Comparaison des hauteurs sur 0:01 [ "$1" ]
echo -------------------------------
[ -e "$1" ] && ffmpeg -ss 0 -t 0:01 -i "$1" -i "$1_temp.mp4" -filter_complex "[0:v][1:v]hstack=inputs=2[v];[0:a][1:a]amerge=inputs=2[a]" -map "[v]" -map "[a]" -ac 2  "$1_comp.mp4"
if [ ! -s "$1_comp.mp4" ]
then
	echo -------------------------------
	echo Crop [ "$1" ]
	echo -------------------------------
 	
 	rm "$1_temp.mp4" && \
 	ffmpeg -i "$1" -vf $(ffmpeg -ss 0 -i "$1" -t 1:00 -vsync vfr -vf fps=1/2,cropdetect -f null - 2>&1 | awk '/crop/ { print $NF }' | tr ' ' '\n' | sort | uniq -c | sort -n | tail -1 | awk '{ print $NF }') -pix_fmt yuv420p -movflags +faststart -threads 5 -preset ultrafast -strict -2 "$1_temp.mp4" && \
 	ffmpeg -i "$1_temp.mp4"  -threads 5 "$1"
 	
else
	echo -------------------------------
	echo Pas crop : on garde [ "$1" ]
	echo -------------------------------
        touch "$1" 
fi