Я хотел бы преобразовать много видеофайлов во флэш-видео для веб-сайта нашей компании. У меня есть требование, чтобы все видео были в формате 360p, поэтому их размер должен быть Nx360.
FFMpeg использует -s аргумент , чтобы указать целевое разрешение , как W х H . Я не знаю W idth, так как это зависит от соотношения сторон исходного файла. Если источник 640x480, цель будет 480x360. Если источник 848x480, цель будет 636x360.
Есть ли способ сделать это с некоторым переключателем ffmpeg? Что он сохранит пропорции, а я укажу только высоту целевого видео?
Я мог бы легко решить эту проблему, создав программу, которая запустит ffprobe, чтобы получить исходный размер видео, вычислить соотношение сторон и затем рассчитать новую ширину.
Пока у вас недостаточно очков, чтобы комментировать существующий ответ, но он следует за ответом пользователя 65600 и идет дальше, когда конкретным кодекам требуется ширина / высота, кратная 2 (например, libx264)
Когда вы используете -1 (переменная / неизвестная), он может вернуть нечетный #. Чтобы гарантировать четное число #, вы должны использовать что-то вроде
trunc(ow/a/2)*2
, которое автоматически вычислит самый близкий четный # при сохранении соотношения сторон.Источник: https://ffmpeg.org/trac/ffmpeg/ticket/309
источник
-vf "scale=trunc(ow/a/2)*2:360"
не работает из-за ошибки "самообращения".Вместо этого работает следующее:
Таким образом, избегаются самостоятельные ссылки путем двух последовательного масштабирования, а округление выполняется на втором этапе. Милый, не правда ли? :)
источник