2013-05-06 31 views
6

Muszę przetwarzać wsadowo kilka filmów, aby przeskalować ich wysokość do 240, zachowując proporcje takie same. Komenda, który dostaje zadanie prawie zrobić to:Błąd skalowania wideo przy użyciu filtrów libav

$ 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 

Co ciekawe, jak widać, jest -vf "scale=-1:240"

Działa to na filmach, gdzie skalowane szerokość wyjścia okazuje się być liczbą parzystą . W przeciwnym razie pojawi się następujący komunikat o błędzie:

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

Jak mogę to rozwiązać?

Edytuj: Zgodnie z tym link, próbowałem użyć , który generuje film, ale wynikowa jakość wideo jest naprawdę słaba.

Edytuj nr 2: To jest nie jest duplikatem, ponieważ jest nieprawidłowo oznaczony. To pytanie zostało wysłane dużo wcześniej niż drugie.

+0

Jeśli chodzi o duplikat to naprawdę nie ma znaczenia, która pytanie jest starszy. Zazwyczaj pytanie z mniejszą liczbą głosów zostaje oznaczone jako duplikat. – LordNeckbeard

+0

@LordNeckbeard To też ma sens, ale jest sprzeczne z definicją SO w powyższym polu, szczególnie - "oznaczone jako duplikat ... To pytanie zostało zadane wcześniej i już ma odpowiedź". –

+0

Tak, to pytanie było wielokrotnie zadawane przez wielu użytkowników. Dyskutowanie o tym, kto jest pierwszy, jest stratą czasu. Rozwiązanie jest takie samo dla wszystkich: jako efekt uboczny niektóre zostaną oznaczone jako duplikaty, niezależnie od kolejności czasowej. Co ważniejsze: 1) Ludzie nie szukają przed zadawaniem pytań. 2) Ludzie pytają o nietypowe pytania, które nie mają nic wspólnego z programowaniem: Stack Overflow służy tylko do programowania pytań. – LordNeckbeard

Odpowiedz

8

Aktualizacja; można teraz używać:

-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?


Link rzeczywiście mówi:

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

które poprawnie skaluje wysokość do parzystej liczby, jeśli chcesz skalować szerokość musisz użyć tego idiomu:

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

Matematyka za nim:

iw ow 
-- = -- 
ih oh 

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

Co oznaczają te skróty? – Xeoncross

+0

@StevenPenny To absolutnie słuszne. Oczywiście współczynnik proporcji musi zostać pomnożony i nie podzielony. Dzięki –

Powiązane problemy