Zmień rozmiar filmów o różnych szerokościach do stałej proporcji zachowującej wysokość za pomocą ffmpeg

17

Chciałbym przekonwertować wiele plików wideo do formatu flash wideo na stronie internetowej naszej firmy. Mam wymaganie, aby wszystkie filmy miały format 360p, więc ich rozmiar to Nx360.

Ffmpeg Używa -s argument określenie rozdzielczości docelowego jako W x H . Nie znam W idth, ponieważ zależy to od proporcji pliku źródłowego. Jeśli źródłem jest 640 x 480, celem będzie 480 x 360. Jeśli źródłem jest 848 x 480, celem będzie 636 x 360.

Czy można to zrobić za pomocą przełącznika ffmpeg? Że zachowa proporcje, a ja określę tylko wysokość docelowego wideo?

Mógłbym to łatwo rozwiązać, tworząc program, który uruchomi ffprobe, aby uzyskać źródłowy rozmiar wideo, obliczyć proporcje, a następnie obliczyć nową szerokość.

Axarydax
źródło

Odpowiedzi:

15

Możesz spróbować dodać ten filtr wideo:

-vf "scale=-1:360" 

-1 w tym przypadku oznacza zmienną / nieznaną, dlatego ten filtr zmienia rozmiar wideo, aby zachować proporcje wejścia, utrzymując 360 jako wysokość.

Dla mnie osiągnęło to ten sam rezultat, którego szukasz.

użytkownik65600
źródło
6

Nie mam jeszcze wystarczającej liczby punktów, aby skomentować istniejącą odpowiedź, ale podąża ona za odpowiedzą user65600 i idzie dalej, gdy określone kodeki wymagają szerokości / wysokości, która jest podzielna przez 2 (np. Libx264)

Gdy użyjesz -1 (zmienna / nieznana), może zwrócić nieparzysty #. Aby zagwarantować parzyste #, musisz użyć czegoś takiego trunc(ow/a/2)*2, co automatycznie obliczy najbliższy parzysty # zachowując współczynnik kształtu.

-vf "scale=trunc(ow/a/2)*2:360"

Źródło: https://ffmpeg.org/trac/ffmpeg/ticket/309

Toland H.
źródło
3

-vf "scale=trunc(ow/a/2)*2:360" nie działa z powodu błędu „samodzielnego odwołania”.

Zamiast tego działają następujące czynności:

-vf "scale = -1: 360, scale = trunc (iw / 2) * 2: 360"

W ten sposób unika się samoreferencji przez dwa kolejne skalowanie, a zaokrąglanie odbywa się w drugim etapie. Urocze, prawda? :)

ddystill
źródło
Prosta skala filtru graficznego = -1: 480; scale = trunc (iw / 2) * 2: 480 'nie ma dokładnie jednego wejścia i wyjścia. Błąd otwierania filtrów!
digitalPBK