Ustawiam wyściółkę do listy filmów. Gdy rozdzielczość była 854x480, działała, gdy przełączyłem się na 1280x720, nie działa. Najprawdopodobniej jest to z powodu liczb nieparzystych, jak stwierdzono w tym pytaniu: FFMPEG PAD Filtr obliczający nieprawidłowy Szerokość.

To był mój oryginalny kod (skrypt bash tworzący części kompleksu filtra):

# Resolution
RES_X=1280
RES_Y=720
...
FILTER_COMPLEX_LIST="${FILTER_COMPLEX_LIST}[$i:v]scale=$RES_X:$RES_Y:force_original_aspect_ratio=1,pad=width=$RES_X:height=$RES_Y:x='if(lt(in_w,$RES_X),($RES_X-in_w)/2,0)':0,setsar=1[v$i];"

Zmieniłem obliczenie szerokości padu i wysokości padu, ale błąd jest taki sam.

FILTER_COMPLEX_LIST="${FILTER_COMPLEX_LIST}[$i:v]scale=$RES_X:$RES_Y:force_original_aspect_ratio=1,pad=width=ceil($RES_X/2)*2:height=ceil($RES_Y/2)*2:x='if(lt(in_w,$RES_X),($RES_X-in_w)/2,0)':0,setsar=1$

To jest błąd:

[Parsed_Pad_19 @ 0x558B4FE3BB40] Obszar wejściowy 0: 0: 1280: 675 Nie w obszarze wyściełanym 0: 0: 1280: 674 lub zero-rozmiar [parsed_pad_19 @ 0x558b4fe3bb40] Nie można skonfigurować podkładki wejściowej na parsed_pad_19 Konfigurowanie złożonych filtrów. Błędny argument

Nie rozumiem, dlaczego wyściełany obszar nie jest w pierwszej kolejności padded area 0:0:1280:720. Gdzie powinienem dodać funkcję CEIL () lub Floor (), aby wykonać tę pracę?

0
ottpeter 7 wrzesień 2020, 13:50

1 odpowiedź

Najlepsza odpowiedź

Analiza dzienników zdałem sobie sprawę z tych linii:

... [parsed_pad_1 @ 0x564355d71aa0] Ustawienie "Szerokość" do wartości "1280" [parsed_pad_1 @ 0x564355D71AA0] Ustawienie "Wysokość" do wartości "720" [parsed_pad_1 @ 0x564355D71AA0] Ustawienie 'x' do wartości "IF (LT (IN_W, 1280) ) (1280-in_W) / 2,0) '[parsed_pad_1 @ 0x564355D71AA0] Ustawienie "Wysokość" do wartości "0" [Parsed_Setsar_2 @ 0x564355B92140] Ustawienie "SAR" do wartości "1' [parsed_scale_3 @ 0x564355d7dde0] Ustawienia" W " Aby cenić "1280" [parsed_scale_3 @ 0x564355D7DDE0] Ustawienie "H" do wartości "720" [parsed_scale_3 @ 0x564355D7DE0] Ustawienie "Force_original_aspect_ratio" do wartości "1" [parsed_scale_3 @ 0x564355d7dte0] W: 1280 H: 720 flagi: "Bilinear" Interl : 0 [Parsed_pad_4 @ 0x564355B845A0] Ustawienie "Szerokość" do wartości "1280" [parsed_pad_4 @ 0x564355B845A0] Ustawienie "Wysokość" do wartości "720" [parsed_pad_4 @ 0x564355B845A0] Ustawienie "X", jeśli (LT (in_W, 1280) , (1280-in_W) / 2,0) '[parsed_pad_4 @ 0x564355B845A0] Ustawienie "wysokość" do wartości "0" ...

... co sugeruje, że w kodzie

FILTER_COMPLEX_LIST="${FILTER_COMPLEX_LIST}[$i:v]scale=$RES_X:$RES_Y:force_original_aspect_ratio=1,pad=width=$RES_X:height=$RES_Y:x='if(lt(in_w,$RES_X),($RES_X-in_w)/2,0)':0,setsar=1[v$i];"

: 0 nie ustawiają wartości dla Y, ale na wysokość. (Po ustawieniu wartości dla x, w pobliżu końca linii).

To jest dziwne, ponieważ większość czasu ten kod nie zawodził. Po zmianie tej linii

FILTER_COMPLEX_LIST="${FILTER_COMPLEX_LIST}[$i:v]scale=$RES_X:$RES_Y:force_original_aspect_ratio=1,pad=width=$RES_X:height=$RES_Y:x='if(lt(in_w,$RES_X),($RES_X-in_w)/2,0)':y=0,setsar=1[v$i];"

To działa.

Y = powinien również zawierać funkcję LT (), aby dostosować zawartość na środkową, ale teraz nie działa. Problem polegał na tym, że tylko niektóre parametry zostały wyraźnie ustawione, ostatni parametr nie był, więc FFMPEG wykonał kolejność parametrów, więc ustawiono niewłaściwy parametr na 0.

Dziękuję Gyanowi opowiedzieć o opcji -Report .

0
ottpeter 7 wrzesień 2020, 17:06