2013-05-06 14 views
6

Ich muss eine Reihe von Videos im Stapel verarbeiten, um ihre Höhe auf 240 zu skalieren, wobei das Seitenverhältnis gleich bleibt. Der Befehl, der den Job bekommt fast getan ist:Fehler beim Skalieren eines Videos mit libav-Filtern

$ avconv -threads 4 -ss 0.0 -i input.avi \ 
-map 0:0,0:0 -map 0:1,0:1 -vf "scale=-1:240" -y -f mpegts \ 
-async -1 -vcodec libx264 -vcodec libx264 -flags2 +fast \ 
-flags +loop -g 30 -bufsize 1024k \ 
-b 200k -bt 220k -qmax 48 -qmin 2 -r 20 -acodec libmp3lame \ 
-ab 44k -ar 44100 -ac 2 output.ts 

Der interessante Teil, wie Sie sehen können, ist -vf "scale=-1:240"

Dies funktioniert auf Videos, wo die skalierte Ausgabebreite eine gerade Zahl zu sein, stellt sich heraus, . Andernfalls erhalte ich folgende Fehlermeldung:

[libx264 @ 0x7fc4f8821e00] width not divisible by 2 (341x240) 

Wie überwinde ich das?

Edit: Wie pro link, versuchte ich mit , die einen Film ausgibt, aber die resultierende Videoqualität ist wirklich schlecht.

Bearbeiten # 2: Dies ist kein Duplikat, wie es falsch markiert ist. Diese Frage wurde viel früher als die andere gestellt.

+0

Wie für das Duplikat es nicht wirklich wichtig, die Frage älter ist. In der Regel wird die Frage mit weniger Stimmen als Duplikat markiert. – LordNeckbeard

+0

@LordNeckbeard Das macht auch Sinn, widerspricht aber der eigenen Definition von SO in der obigen Box, insbesondere - "als Duplikat markiert ... Diese Frage wurde bereits gestellt und hat bereits eine Antwort". –

+0

Ja, diese Frage wurde schon mehrmals von mehreren Benutzern gestellt. Darüber zu streiten, wer zuerst ist, ist Zeitverschwendung. Die Lösung ist für alle gleich: Als Nebeneffekt werden einige unabhängig von der zeitlichen Reihenfolge als Duplikate markiert. Noch wichtiger: 1) Menschen suchen nicht, bevor sie Fragen stellen. 2) Leute fragen nach Themen, die nichts mit Programmierung zu tun haben: Stack Overflow ist nur für Programmierfragen gedacht. – LordNeckbeard

Antwort

8

Aktualisierung; verwenden Sie können jetzt:

-vf scale=-2:240 

Is there a good list of mp4 supported resolutions and a way to have ffmpeg calculate the width after modifying by set height ratio?


Der Link tatsächlich sagt:

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

, die korrekt die Höhe auf eine gerade Zahl skaliert, wenn Sie die Skalierung wünschen Breite müssen Sie dieses Idiom verwenden:

-vf scale="trunc(oh*a/2)*2:240" 
#    ^
#    /
#  notice --- 

Math dahinter:

iw ow 
-- = -- 
ih oh 

ow = (iw * oh)/ih 
ow = oh * a 
+0

Wofür stehen diese Abkürzungen? – Xeoncross

+0

@StevenPenny Das ist absolut richtig. Natürlich muss das Seitenverhältnis multipliziert und nicht geteilt werden. Vielen Dank –