So verkleinern Sie ein Video mit FFmpeg

103

Kann ich meine Videos mit FFmpeg verkleinern?

Ich habe eine Originalgröße von 1024x576, jetzt möchte ich die Größe des Videos auf 720x480 ändern, um die Anforderungen zu erfüllen.

Wie kann ich das machen?

Alan
quelle
ffmpegkann veraltet sein, siehe hier und hier
verrückt nach natty
13
@nuttyaboutnatty Die "veralteten" Nachrichten betrafen nur die alten, toten, gefälschten "" Nachrichten ffmpegvon der Libav-Abzweigung, nicht ffmpegvon FFmpeg, das am 15.04. zurückkehrte.
Logan

Antworten:

165

Das grundlegendste Beispiel ist folgendes:

ffmpeg -i input.avi -s 720x480 -c:a copy output.mkv

Die Verwendung des scaleFilters bietet mehr Flexibilität:

ffmpeg -i input.avi -filter:v scale=720:-1 -c:a copy output.mkv

Das -1weist ffmpeg an, automatisch die richtige Höhe in Bezug auf die bereitgestellte Breite zu wählen, um das Seitenverhältnis beizubehalten. -1kann auch für die Breite verwendet werden, wenn Sie eine bestimmte Höhe angeben.


Ein Nachteil der Skala bei der Verwendung libx264ist , dass dieser Geber erfordert auch Werte und Skalierung kann automatisch einen ungeraden Wert wählen zu einem Fehler führt: width or height not divisible by 2. Sie können scale anweisen, für eine bestimmte Höhe einen geraden Wert zu wählen (720 in diesem Beispiel):

scale="trunc(oh*a/2)*2:720"

... oder eine bestimmte Breite (in diesem Beispiel 1280):

scale="1280:trunc(ow/a/2)*2"

Beachten Sie, dass Ihre ffmpeg Build über nicht erkennen klagen könnten -coder -filterOptionen. Es kann auch nicht unterstützt werden scale. In diesem Fall sollten Sie ein neueres ffmpeg verwenden, das Sie als statisches Build herunterladen oder selbst kompilieren können .

Jimhark
quelle
1
Ich habe es versucht ffmpeg -i output.mkv -filter:v scale=720:-1 -acodec copy -threads 12 output_shrink.mkv(in der ffmpeg-Version 0.8.6-6: 0.8.6-0ubuntu0.12.10.1), habe aber den Fehler bekommenUnrecognized option 'filter:v'
doug65536
6
Nach mehrmaligem Durchstöbern der Handbuchseite für ffmpeg stellte ich fest, dass -filter:vdie Option anscheinend in geändert wurde -vf.
Doug65536
2
@ doug65536 -filter:vund -vfsind beide in Ordnung. Die von Ihnen verwendete Ubuntu-Version ist kaputt und veraltet - es handelt sich nicht wirklich um FFmpegs ffmpeg, sondern um die von Libav (der FFmpeg-Fork) unter demselben Namen bereitgestellte Binärdatei.
Slhck
1
@MightyPork wahrscheinlich ist dein ffmpeg-Build veraltet - welche Probleme treten auf ?. Wie auch immer, das hat mir wirklich geholfen ffmpeg version 2.4.10, die Größe einiger massiver Videos zu reduzieren, um Speicherplatz freizugeben - danke!
Wilf
4
'-c' ist die Abkürzung für -codec, ': a' gibt Audiostreams an, 'copy' gibt den Kopiercodec an, der die Streams (in diesem Fall Audio) kopiert, ohne sie neu zu codieren. Grundsätzlich werden die Audio-Streams durchlaufen. Dies ist häufig der Fall, wenn Sie nur den Videostream bearbeiten.
Jimhark
14

Ich verwende die folgenden Befehle, um die Skalierung für Videos und Bilder zu ändern. Für feste Breite und Höhe -

ffmpeg -i input.avi -vf scale="720:480" output.avi

und wenn Sie das Seitenverhältnis beibehalten möchten, geben Sie einfach die Höhe -1 ein und die Größe wird automatisch basierend auf der Breite angepasst -

ffmpeg -i input.avi -vf scale="720:-1" output.avi

Wenn Sie anhand der Eingabegröße skalieren möchten, z. Nehmen wir an, Sie reduzieren die Breite / Höhe um die Hälfte.

ffmpeg -i input.avi -vf scale="iw/1:ih/2" output.avi

HINWEIS :

iw : input width
ih : input height

Statische Builds können von folgender Adresse heruntergeladen werden: https://johnvansickle.com/ffmpeg/

Dokumentation: https://ffmpeg.org/ffmpeg.html#filter_005foption

Aniket Thakur
quelle
Funktioniert nicht. Fest bei handler_name: Sound Handle
Rushi M Thakker
Ich habe mit diesem Befehl eine schreckliche Videoqualität erhalten. Viel besser wenn ich output.mp4 erstelle, nicht avi. Erweiterung ist also wichtig.
4.