J'ai environ 3000 courts clips vidéo, chacun d'environ 3 secondes. J'ai besoin de faire pivoter chacun d'eux de 90 degrés. Quelle est la meilleure façon de procéder? J'ai un abonnement Adobe Creative Cloud, ainsi qu'un accès aux machines Windows et Mac. Vous cherchez la solution la plus simple pour automatiser / traiter par lots la rotation de tant de vidéos.
Si vous vous posiez la question - les vidéos font partie d'un cours en ligne sur le bois d'oeuvre. L'apprenant regarde chaque vidéo sélectionnée au hasard, qui n'est qu'un court extrait d'un morceau de bois en rotation. Les vidéos ont été tournées de façon à ce que le bois (2x4, etc.) soit horizontal. Mais maintenant, le client veut que le bois soit vertical dans les clips.
Réponses:
Utilisez
ffmpeg
et le filtre "transposer" comme suggéré "pauvre" . Par exemple, si vos fichiers sont mp4 et se trouvent dans le répertoire courant:La valeur de transposition peut être "1" ou "horloge" pour une rotation dans le sens horaire, "2" ou "cclock" pour une rotation dans le sens antihoraire. Il existe d'autres valeurs qui appliqueront également un flip.
Le son sera copié en flux pour éviter un ré-encodage inutile.
Les métadonnées de rotation du flux vidéo sont effacées dans cet exemple. Sinon, il
ffmpeg
sera copié de l'entrée vers la sortie, ce qui entraînera une rotation incorrecte pour les joueurs qui prêtent attention à ces métadonnées (certains le font et d'autres pas).Un autre exemple, plus détaillé et plus flexible, et qui conserve le fichier pivoté dans le même répertoire avec un nouveau nom:
la source
Vous avez spécifié que vous êtes intéressé à travailler sur un grand nombre de vidéos, si vous avez une machine multicœur et que vous utiliserez une
for
boucle normale fournie par votre shell, l'un de vos cœurs fonctionnera à chaud, tandis que d'autres ne feront absolument rien . Ce n'est pas l' idéal.Ce que vous devriez faire pour un tel travail, c'est d'utiliser
parallel
un outil qui vous permet de démarrer plusieurs travaux à la fois, et il peut faire tout ce qu'une boucle for peut faire, mais mieux.Je n'écrirai pas sur toutes les fonctionnalités de cet outil, mais je me concentrerai sur votre tâche spécifique.
Une façon de démarrer tous ces emplois serait:
Ici
{}
remplace chaque nom de fichier et{.}
remplace le nom de fichier sans extension.Je proposerai que vous commenciez autant de travaux que vous avez de noyaux, enlevez-en un. La raison en est que votre système d'exploitation restera toujours utilisable, et cela vous évitera également si vous utilisez le chiffrement du disque dur (qui utilisera la puissance de traitement pour lire / écrire des données). Pour ce faire, ajoutez simplement
--jobs -1
à votre ligne de commande et vous limiterez le nombre de travaux.Veuillez garder à l'esprit qu'aucune sortie ne sera donnée avant la fin de chaque encodage. Vous ne verrez donc pas à quel point chacune de vos vidéos est réalisée.
la source
Sur la base de cette réponse, vous pouvez utiliser ffmpeg avec les commandes suivantes pour faire pivoter une vidéo:
Pour traiter par lots un dossier de films, vous pouvez utiliser un langage de programmation de votre choix et parcourir les fichiers. J'ai utilisé linux avec python 2.7+ ici. Il vous suffit de modifier le
folder_movies
cheminpath_to_ffmpeg
et de définir votre filmextension
:Ensuite, votre dossier de film devrait ressembler à:
L'avantage d'utiliser python est que le code s'exécute sur plusieurs plateformes . La seule chose que vous devez considérer sont les chemins vers le répertoire et l'exécutable ffmpeg. Pour exécuter cela sur une machine Windows, il vous suffit de remplacer les chemins d'accès par quelque chose comme:
Remarque: je ne suis pas un expert de ffmpeg, il existe peut-être un moyen de traiter par lots directement avec lui.
la source
mkdir -p rotated; for f in *.mp4; do ffmpeg -i "$f" -vf transpose=2 rotated/"$f"; done
(en supposant que vos fichiers vidéo sont .mp4 dans cet exemple).