Лучшие пресеты для масштабирования старых видео 4:3 и 5:4 с помощью ffmpeg

У нас есть видео в формате строки (.mov) с соотношением сторон 4:3 (768x576) и 5:4 (720x576). У нас есть рекомендуемый пресет для потоковой передачи через DASH на проигрыватели HTML5 и Silverlight (это второй проход):

ffmpeg -i input.mp4 -an -vcodec libx264 -profile:v main -pass 2 \
-vf scale=320:180 -pix_fmt yuv420p -g 75 -keyint_min 25 -b:v 384k \
-maxrate 384k -bufsize 384k -passlogfile passlogfile_fp output_320x180_384.mp4 

с еще 5, но с другим разрешением и битрейтом:

  • 480:270 -б:в 700к
  • 800:450 -б:в 1300к
  • 960:540 -б:в 1300к
  • 1280:720 -б:в 3500к
  • 1920:1080 -б:в 5000к

С исходным видео 4:3 мы довольны результатом — изображение не растягивается, но игроки добавляют черную рамку, чтобы соответствовать ширине. Хотя мы не уверены, подходит ли этот пресет для этих исходных видео.

С 5:4 мы не очень довольны, потому что изображение растянуто для дисплея 16:9. Как мы можем добиться того же эффекта, что и с исходным видео 4:3? Эти пресеты вообще подходят для этих форматов видео или нужно искать что-то другое?

Ценю твою помощь. Наши знания о кодировании довольно ограничены.

Ответы (1)

Чтобы сохранить соотношение сторон исходного фильма с помощью масштабатора FFMpeg, вы должны указать масштаб с неизвестным:

ffmpeg -i input.mp4 -an -vcodec libx264 -profile:v main \
  -pass 2 -vf scale=-1:180 -pix_fmt (etc...)

«-1» сообщит скалеру, что выход должен быть высотой 180 пикселей, и сколько пикселей в ширину выход должен быть, чтобы сохранить исходное соотношение сторон.

Это даст вам фильмы со старым соотношением сторон, вам нужен способ заставить исходный фильм превратиться в произвольный прямоугольник. В документации приведен пример того, как вы это делаете:

ffmpeg -i input.mp4 -vf scale="'if(gt(a,4/3),320,-1)':'if(gt(a,4/3),-1,240)'"  

В этом примере будет создан фильм размером 320x240 с сохранением исходного соотношения сторон в пикселях, каким бы оно ни было. Вывод будет располагаться в верхнем левом углу (я думаю), поэтому вам нужно будет сделать фильтр, чтобы репо.