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ść.
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.Źródło: https://ffmpeg.org/trac/ffmpeg/ticket/309
źródło
-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:
W ten sposób unika się samoreferencji przez dwa kolejne skalowanie, a zaokrąglanie odbywa się w drugim etapie. Urocze, prawda? :)
źródło