En supposant que vous utilisiez *nix et Bash, télécharger une version statique de ffmpeg pour votre système d'exploitation. Ensuite, prenez le ffmpeg
et le copier dans /usr/bin/ffmpeg
.
sudo cp ~/Downloads/ffmpeg/ffmpeg /usr/bin/ffmpeg
sudo chmod +x /usr/bin/ffmpeg
Vous pouvez maintenant exécuter ce Shell Shell dans Bash - il devrait suffire de le copier-coller dans le dossier où se trouvent les vidéos.
for f in *.mp4; do
duration=$(ffmpeg -i "$f" 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,//)
length=$(echo "$duration" | awk '{ split($1, A, ":"); print 3600*A[1] + 60*A[2] + A[3] }' )
trim_start=20
trim_end=$(echo "$length" - 30 - "$trim_start" | bc)
echo ffmpeg -ss "$trim_start" -i "$f" -c copy -map 0 -t "$trim_end" "${f%.mp4}-trimmed.mp4"
done
Nota: Retirer le echo
pour exécuter les commandes. Il serait bon de tester d'abord les commandes générées pour en vérifier l'exactitude. On obtiendrait ainsi quelque chose comme
ffmpeg -ss 20 -i input.mp4 -c copy -map 0 -t 161.58 input-trimmed.mp4
Le script calcule la durée totale de l'entrée, soustrait l'heure de début et l'heure que vous souhaitez retirer de la fin, puis demande à ffmpeg d'effectuer une copie de flux à partir de l'heure de début spécifiée jusqu'à l'heure de fin nouvellement calculée. Cela n'affectera en rien la qualité de la vidéo et de l'audio. Il devrait fonctionner en moins de quelques secondes, même pour des fichiers volumineux.
Pour plus de clarté, -ss
définit l'heure de début et -c copy -map 0
copiera tous les flux vidéo, audio et de sous-titres de l'original vers la version coupée. -t
définit l'heure de fin. Voir aussi cet article sur le FFmpeg Wiki pour plus d'informations sur la recherche.