Batch-Größenänderung von Videos durch Zuschneiden mit Schwenken und Scannen


8

Ich versuche, eine Sammlung von ~ 120 Videoclips vorzubereiten, die im VLC Player abgespielt und während eines DIY-Events für elektronische Musik auf einen Projektor mit niedriger Auflösung (1024 x 768) projiziert werden sollen. Die Quellclips sind alle hochauflösende abstrakte Grafiken im .mov-Format mit jeweils ca. 4 GB. Sie haben verschiedene Seitenverhältnisse. Einige sind 4: 3, andere 16: 9, andere 1: 1 (Quadrat) usw.

Ich möchte alle Clips auf 1024 x 768 zuschneiden / skalieren und dabei die jeweiligen ursprünglichen Seitenverhältnisse beibehalten. Und ich möchte dies tun, ohne sie mit einem Briefkasten zu versehen und schwarze Balken entweder oben / unten oder links / rechts zu lassen. Grundsätzlich möchte ich sie so weit reduzieren, dass sie den 1024x768-Bildschirm vollständig ausfüllen und nicht kleiner. Ich glaube, das ist im Wesentlichen eine "Pan and Scan" -Technik?

(Es spielt keine Rolle, ob ein Teil des Bildes dabei entfernt wird - sie drehen nur geometrische Formen und so weiter.)

Gibt es eine Möglichkeit, die Größe aller ~ 120 Videos im Stapel mit einem einzigen FFMPEG-Befehl zu ändern? Oder gibt es ein anderes Tool für Windows oder Linux, das funktionieren würde? Es ist mir eigentlich egal, welches Ausgabeformat - nur etwas, das VLC abspielen kann, ohne abgehackt zu werden.

Antworten:


3

Wenn Sie nur 4: 3 und 16: 9 Videos hätten, würde ich vorschlagen:

ffmpeg -i input.mov -filter:v 'scale=-1:768,crop=1024:ih' \
-c:v libx264 -crf 23 -preset veryfast output.mp4

Das würde ein Video auf eine Höhe von 768 skalieren und die Breite skalieren, um das Seitenverhältnis beizubehalten. und dann wird die Breite auf 1024 zugeschnitten, wobei die Höhe bei 768 gehalten wird. Die Tatsache, dass Sie auch 1: 1-Videos verwenden, erschwert die Sache: Ein 3000x3000-Video wird auf 768x768 skaliert, und dann versucht ffmpeg, es auf 1024x768 zuzuschneiden. was offensichtlich nicht funktionieren würde, da die Ernte nicht größer sein kann als der Input ...

Die einzige Möglichkeit, dies zum Laufen zu bringen, besteht darin, alle Videos zuzuschneiden, von denen Sie angegeben haben, dass sie kein Problem darstellen. Dadurch wird die Ausgabebreite auf die Eingabehöhe und die Ausgabehöhe auf 3/4 der Eingabehöhe zugeschnitten. Anschließend wird das Video auf eine Höhe von 768 verkleinert, wobei das Seitenverhältnis mit der Breite beibehalten wird:

ffmpeg -i input.mov -filter:v 'crop=ih:3/4*ih,scale=-1:768' \
-c:v libx264 -crf 23 -preset veryfast output.mp4

Dies funktioniert nur, wenn die Originaldateien eine Höhe von 1024 oder mehr haben. Beachten Sie, dass x264 nur eine gerade Breite oder Höhe akzeptiert, was zu Problemen führen kann (in diesem Fall jedoch nicht).

Um jede .mov in einem Verzeichnis zu konvertieren, können Sie eine for-Schleife verwenden:

for f in *.mov; \
do ffmpeg -i "$f" -filter:v 'crop=ih:3/4*ih,scale=-1:768' \
-c:v libx264 -crf 23 -preset veryfast "${f/%mov/mp4}"; \
done

Um dies rekursiv zu tun, können Sie verwenden find:

find . -type f -name *.mov -exec bash -c \
'ffmpeg -i "$0" -filter:v "crop=ih:3/4*ih,scale=-1:768" \
-c:v libx264 -crf 23 -preset veryfast "${0/%mov/mp4}"' {} \;

All dies erfordert eine aktuelle Version von ffmpeg.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.