1 votes

Comment découper en lots des fichiers avi à une certaine longueur?

Le problème

J'ai un dossier contenant environ 1000 fichiers vidéo .avi, qui devraient être divisés en clips vidéo d'une durée de 1 seconde ou coupés à un certain point (par exemple entre 7 secondes et 8 secondes) pour une durée de 1 seconde. Ces clips vidéo contiennent des particules en mouvement et le programme que j'utilise pour mesurer la vitesse de ces particules nécessite des clips vidéo d'une durée de 1 seconde. Le début et la fin des fichiers .avi sont corrompus, donc je veux prendre le clip d'1 seconde quelque part au milieu. Je veux garder les noms de fichiers, car ce sont des références pour des échantillons vidéo que j'ai pris. Je travaille sur Windows 7 et je n'ai absolument aucune expérience en programmation (à part R), alors traitez-moi comme un débutant.

Essais antérieurs

J'ai essayé de trouver une solution à ce problème depuis longtemps. La première fois que j'ai fait cela, j'ai coupé manuellement environ 1000 clips avec Final Cut Pro. Cela m'a pris quelques jours, mais je n'ai plus accès au logiciel. Quoi qu'il en soit, j'ai compris qu'il devait y avoir une meilleure solution. J'ai essayé de comprendre VirtualDub, mais j'ai été submergé et j'ai abandonné. Maintenant, j'ai cherché si FFmpeg pouvait être la solution. Je suis assez sûr que oui, mais je suis de nouveau submergé. J'ai trouvé ce script BASH et la réponse d'@evilsoup à cette question. Si je pouvais réussir à combiner ces deux, cela pourrait fonctionner. J'ai tellement de questions sur ce processus qu'il vaut mieux que je reste concis :

Comment combiner ces deux scripts (de division et de boucles) dans FFmpeg sous Windows 7 ?

(c'est-à-dire puis-je utiliser un script BASH sous Windows ? Si oui, comment ?)

3voto

slhck Points 209720

Vous n'avez vraiment pas besoin de script compliqué.

Ce simple boucle Bash va prendre chaque fichier .avi, sauter 5 secondes dans la vidéo, couper une seconde (-t 1) et écrire dans -cut.avi. Il copiera le flux vidéo et rejettera l'audio.

for i in *.avi; do ffmpeg -ss 5 -i "$i" -c:v copy -an -t 1 "${i%.avi}-cut.avi"; done

Vous pouvez remplacer "${i%.avi}-cut.avi" par "output/$i" pour écrire les fichiers de sortie dans le dossier output sans changer leur nom.

Vous pouvez utiliser Bash sur Windows avec Cygwin, mais cette boucle devrait être facile à traduire en une version native de Windows (si quelqu'un le sait, n'hésitez pas à éditer ce message).

Notes pour la vidéo:

  • FFmpeg est disponible en tant que version statique pour chaque système d'exploitation majeur - il peut être installé en extrayant l'archive téléchargée.
  • Si vous voulez un point de départ plus précis pour la coupe, envisagez de placer le -ss derrière -i "$i".
  • Si les fichiers vidéo sont endommagés au début et que FFmpeg ne peut pas décoder l'entrée, cela pourrait ne pas fonctionner du tout.

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