17

Я хотел бы преобразовать много видеофайлов во флэш-видео для веб-сайта нашей компании. У меня есть требование, чтобы все видео были в формате 360p, поэтому их размер должен быть Nx360.

FFMpeg использует аргумент -s, чтобы указать целевое разрешение как W x H. Я не знаю W idth, так как это зависит от соотношения сторон исходного файла. Если источник 640x480, цель будет 480x360. Если источник 848x480, цель будет 636x360.

Есть ли способ сделать это с некоторым переключателем ffmpeg? Что он сохранит пропорции, а я укажу только высоту целевого видео?

Я мог бы легко решить эту проблему, создав программу, которая запустит ffprobe, чтобы получить исходный размер видео, вычислить соотношение сторон и затем рассчитать новую ширину.

3 ответа3

15

Вы можете попробовать добавить этот видеофильтр:

-vf "scale=-1:360" 

-1 в этом случае означает переменную / неизвестный, таким образом, этот фильтр изменяет размер видео, чтобы сохранить соотношение сторон входного сигнала, оставляя 360 в качестве высоты.

Для меня это достигло того же результата, который вы искали.

6

Пока у вас недостаточно очков, чтобы комментировать существующий ответ, но он следует за ответом пользователя 65600 и идет дальше, когда конкретным кодекам требуется ширина / высота, кратная 2 (например, libx264)

Когда вы используете -1 (переменная / неизвестная), он может вернуть нечетный #. Чтобы гарантировать четное число #, вы должны использовать что-то вроде trunc(ow/a/2)*2 , которое автоматически вычислит самый близкий четный # при сохранении соотношения сторон.

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

Источник: https://ffmpeg.org/trac/ffmpeg/ticket/309

3

-vf "scale=trunc(ow/a/2)*2:360" не работает из-за ошибки "самостоятельной ссылки".

Вместо этого работает следующее:

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

Таким образом, избегаются самостоятельные ссылки путем двух последовательного масштабирования, а округление выполняется на втором этапе. Милый, не правда ли? :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .