Ich habe ungefähr 3000 kurze Videoclips mit einer Dauer von jeweils ungefähr 3 Sekunden. Ich muss jeden von ihnen um 90 Grad drehen. Was ist der beste Weg, dies zu tun? Ich habe ein Adobe Creative Cloud-Abonnement sowie Zugriff auf Windows- und Mac-Computer. Auf der Suche nach der einfachsten Lösung zur Automatisierung / Stapelverarbeitung der Rotation so vieler Videos.
Wenn Sie sich gefragt haben - die Videos sind Teil eines E-Learning-Kurses über Schnittholz. Der Lernende sieht sich jedes zufällig ausgewählte Video an, bei dem es sich nur um einen kurzen Clip eines rotierenden Holzstücks handelt. Die Videos wurden so aufgenommen, dass das Holz (2x4s usw.) horizontal war. Aber jetzt möchte der Kunde, dass das Holz in den Clips vertikal ist.
Antworten:
Verwenden Sie
ffmpeg
und den "Transponierungs" -Filter als "schlecht" vorgeschlagen . Wenn Ihre Dateien beispielsweise mp4 sind und sich im aktuellen Verzeichnis befinden:Der Transponierungswert kann "1" oder "Uhr" für die Drehung im Uhrzeigersinn, "2" oder "Uhr" für die Drehung gegen den Uhrzeigersinn sein. Es gibt andere Werte, die ebenfalls einen Flip anwenden.
Das Audio wird per Stream kopiert , um unnötige Neucodierungen zu vermeiden.
In diesem Beispiel werden die Metadaten für die Rotation des Videostreams gelöscht. Andernfalls
ffmpeg
wird es von der Eingabe in die Ausgabe kopiert, was zu einer falschen Rotation für Spieler führt, die auf diese Metadaten achten (einige tun dies und andere nicht).Ein weiteres Beispiel, ausführlicher und flexibler, bei dem die gedrehte Datei mit einem neuen Namen im selben Verzeichnis bleibt:
quelle
Sie haben angegeben, dass Sie an einer großen Anzahl von Videos arbeiten möchten. Wenn Sie einen Multicore-Computer haben und eine normale
for
Schleife verwenden, die von Ihrer Shell bereitgestellt wird, läuft einer Ihrer Kerne heiß, während andere absolut nichts tun . Das ist nicht ideal.Was Sie für einen solchen Job tun sollten, ist die Verwendung
parallel
eines Tools, mit dem Sie mehrere Jobs gleichzeitig starten können und das alles kann, was eine for-Schleife kann, aber besser.Ich werde nicht über alle Funktionen dieses Tools schreiben, sondern mich auf Ihre spezifische Aufgabe konzentrieren.
Eine Möglichkeit, all diese Jobs zu starten, wäre:
Hier wird
{}
jeder Dateiname und{.}
der Dateiname ohne Erweiterung ersetzt.Ich werde vorschlagen, dass Sie so viele Jobs beginnen, wie Sie Kerne haben, nehmen Sie einen weg. Der Grund dafür ist, dass Ihr Betriebssystem weiterhin verwendbar bleibt. Dies erspart Ihnen auch den Fall, dass Sie eine Festplattenverschlüsselung verwenden (bei der Rechenleistung zum Lesen / Schreiben von Daten verwendet wird). Fügen Sie dazu einfach
--jobs -1
Ihre Befehlszeile hinzu, und Sie begrenzen die Anzahl der Jobs.Bitte beachten Sie, dass erst nach Abschluss jeder Codierung eine Ausgabe erfolgt. Sie werden also nicht sehen, wie viel von jedem Ihrer Videos gemacht wird.
quelle
Basierend auf dieser Antwort können Sie ffmpeg mit den folgenden Befehlen verwenden, um ein Video zu drehen:
Um einen Ordner mit Filmen stapelweise zu verarbeiten, können Sie eine Programmiersprache Ihrer Wahl verwenden und die Dateien durchlaufen. Ich habe hier Linux mit Python 2.7+ verwendet. Sie müssen nur den
folder_movies
Pfad bearbeitenpath_to_ffmpeg
und Ihren Film einstellenextension
:Danach sollte Ihr Filmordner folgendermaßen aussehen:
Der Vorteil der Verwendung von Python besteht darin, dass der Code plattformübergreifend ausgeführt wird . Das einzige, was Sie berücksichtigen müssen, sind die Pfade zum Verzeichnis und zur ausführbaren Datei ffmpeg. Um dies auf einem Windows-Computer auszuführen , müssen Sie nur die Pfade zu folgenden Elementen ersetzen:
Hinweis: Ich bin kein ffmpeg-Experte. Vielleicht gibt es eine Möglichkeit, direkt damit zu stapeln.
quelle
mkdir -p rotated; for f in *.mp4; do ffmpeg -i "$f" -vf transpose=2 rotated/"$f"; done
Dies kann direkt über die Mac- oder Linux-Befehlszeile erfolgen, z. B .: (Vorausgesetzt, Ihre Videodateien sind in diesem Beispiel .mp4).