Mam odtwarzacz wideo HTML 5 o szerokości 700 pikseli i wysokości 400 pikseli. Próbuję avconv
użyć ffmpeg do zmiany rozmiaru (przy zachowaniu współczynnika proporcji) i upewnienia się, że pasuje do mojego odtwarzacza.
Dane wejściowe mogą być plikiem o dowolnym rozmiarze, więc muszę zmienić rozmiar większych, ale wycentrować mniejsze za pomocą czarnych pasków. Do tej pory próbowałem: -s
i -aspect
widziałem, że jestem pad
używany z -vf
przełącznikiem, ale nie rozumiem, jak działa wystarczająco, aby uzyskać to, czego potrzebuję.
To jest przybliżony obraz tego, czego potrzebuję. Nie jestem pewien, czy to w ogóle możliwe. To prawie jak maksymalna szerokość / maksymalna wysokość CSS. Zdaję sobie sprawę, że to może być zbieranina słów, ale jeśli ktoś zrozumie, o czym mówię, byłbym wdzięczny za pomoc, dzięki.
polecenie avconv:
avconv -y -i control.avi -vcodec libx264 -b 2000k -bufsize 20M -acodec aac -strict experimental -ar 44100 -ab 256k bigbuck_out.mp4
źródło
Odpowiedzi:
Prostą metodą jest użycie
force_original_aspect_ratio
opcji w filtrze skali .Oryginalny obraz. Reprezentuje wideo o proporcjach 640 x 480, 4: 3.
W tych przykładach oryginalny obraz zostanie przeskalowany, aby zmieścił się na wyjściu o współczynniku kształtu 16: 9, zachowując oryginalny współczynnik kształtu. Aby to zrobić, możesz:
Skrzynka na listy lub skrzynka na listy
Obraz w ramkach. Dopasowanie wejścia 640x480 (4: 3) do wyjścia 1280x720 (16: 9).
Spowoduje to przeskalowanie obrazu. Jeśli chcesz uniknąć skalowania, zobacz poniższy przykład.
Zamiast tego pojawiłoby się Letterboxing, jeśli wejściowy współczynnik kształtu jest szerszy niż wyjściowy współczynnik kształtu. Na przykład dane wejściowe o współczynniku kształtu 2,35: 1 pasujące do wyjścia 16: 9 spowodują wstawianie liter.
To samo co powyżej, ale bez skalowania
Wejście 640x480 (4: 3) do wyjścia 1280x720 (16: 9) bez skalowania.
Przyciąć
Przycięty obraz. Współczynnik proporcji 4: 3, współczynnik wyjściowy 16: 9.
źródło
color
opcję, np.pad=1280:720:(ow-iw)/2:(oh-ih)/2:color=red
(Lub można użyć wartości szesnastkowej, jeśli wolisz). Zobacz listę kolorów .Oto polecenie, które dodałoby słupki lub litery do stałej szerokości wyjściowej. Jest trochę długi, ale musisz w jakiś sposób określić wypełnienie.
Najpierw w swojej powłoce określ szerokość i wysokość wyjściową:
Następnie uruchom polecenie:
Zostało to zredukowane do niezbędnych elementów potrzebnych do zmiany rozmiaru i wypełnienia - dodaj inne opcje wideo i audio według własnego uznania. Zauważ, że liczby dla
width
iheight
muszą być podzielne przez 2, aby działać dla większości kodeków.Oto wyjaśnienie tego, co się dzieje:
min()
) i wybieramy tylko ten współczynnik do zmiany rozmiaru.iw*min(…):ih*min(…)
).$width:$height
to szerokość i wysokość wyjściowascale
filtra.źródło
-movflags +faststart
do przykładu slhck. Umożliwi to odtwarzanie stopniowo pobieranego wideo przed jego całkowitym pobraniem, a także zapoznaj się z Przewodnikiem kodowania FFmpeg i x264 oraz Przewodnikiem kodowania FFmpeg i AAC, aby uzyskać więcej instrukcji i przykładów kodowania.pad=$width:$height:(ow-iw)/2:(oh-ih)/2"
ow-iw
.Wydaje mi się, że musisz to zrobić w trzech krokach:
FFmpeg / avconv może wykonać skalowanie / wypełnianie za pomocą filtrów wideo w jednym kroku, transkodując tylko raz. Na przykład, aby zrobić wideo 16: 9, przeskaluj je pod kątem szerokości, a następnie przesuń litery do wyników:
... ale dla pierwszego kroku (wykrycie współczynnika kształtu i porównanie go z wymaganym 7: 4) będziesz musiał użyć jakiegoś skryptu.
... uzyska proporcje filmu, które będą wyglądały jak „16: 9” lub „4: 3”. W skrypcie bash użyłbym czegoś takiego:
Oczywiście będziesz musiał dostosować go do swoich potrzeb.
źródło