3 votes

Supprimer le début et la fin de plusieurs fichiers MP4 en vrac

J'ai plusieurs centaines de vidéos dont je dois supprimer les 20 premières secondes et les 30 dernières secondes.

Il est évident qu'il n'est pas pratique de le faire un par un. Puis-je automatiser cela d'une manière ou d'une autre, peut-être dans un script d'Automator OS X ?

4voto

slhck Points 209720

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.

0voto

oli.G Points 109

Si vous êtes à l'aise avec la ligne de commande, je vous recommande FFmpeg

ffmpeg -i file.mp4 -vcodec copy -acodec copy -ss 00:00:20.000 -t 00:00:30.000 output.mp4

Une autre option est un petit Shell Shell qui parcourt vos fichiers et exécute une tâche FFmpeg pour chacun d'entre eux. Encore une fois, je n'ai jamais utilisé de Shell Mac :)

for f in *.mp4; do ffmpeg -i $f -vcodec copy -acodec copy -ss 00:00:20.000 -t 00:00:30.000 output/$f; done

J'espère que cela vous aidera un peu.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X