Изменение размера видео с помощью ffmpeg / avconv для вставки в статический размер игрока

У меня есть видеопроигрыватель html 5 размером 700 пикселей, высотой 400 пикселей. Я пытаюсь использовать avconv для использования ffmpeg для изменения размера (сохраняя соотношение сторон) и убедившись, что он вписывается в мой плеер.

Вход может быть файлом любого размера, поэтому мне нужно изменить размеры более крупных, но центрируйте меньшие с черными полосками. До сих пор я пробовал: -s и -aspect , я видел, что pad используется с переключателем -vf но не понимает, как она работает достаточно, чтобы получить то, что мне нужно.

  • Как выбрать левый аудиоканал с помощью ffmpeg и downmix для моно?
  • Слайд-шоу FFMPEG с изображений - отображается только один кадр
  • Какая команда ffmpeg создает видео более совместимую на всех устройствах?
  • Как создать видео с изображений с помощью FFmpeg?
  • Concat mp4 с пустым видео
  • Как сохранить аудиофайлы asf / asx / mms на диск (предыдущие предложения не работают)
  • Изображений

    Это приблизительное представление о том, что мне нужно. Я не уверен, что это возможно. Это почти как максимальная ширина CSS / max-height. Я понимаю, что это может быть просто беспорядок слов, но если кто-то поймет, о чем я говорю, я буду благодарен за помощь, спасибо.

    Команда avconv:

    avconv -y -i control.avi -vcodec libx264 -b 2000k -bufsize 20M -acodec aac -strict experimental -ar 44100 -ab 256k bigbuck_out.mp4

  • Как выбрать левый аудиоканал с помощью ffmpeg и downmix для моно?
  • Проблемы с сжатием FFmpeg с потерями
  • Как разрезать на точные кадры с помощью ffmpeg?
  • Фильтр Boxblur имеет несвязанный выход
  • Ffmpeg добавляет новое аудио в видео (микширование 2 аудио)
  • Как преобразовать файл mkv в mp4 с субтитрами и сменить звук DTS на AAC или AC3?
  • 3 Solutions collect form web for “Изменение размера видео с помощью ffmpeg / avconv для вставки в статический размер игрока”

    Простым методом является использование параметра force_original_aspect_ratio в force_original_aspect_ratio фильтре .

    Оригинальное изображение
    Исходное изображение. Представляет видеоизображение формата 640×480, 4: 3.

    В этих примерах исходное изображение будет масштабироваться так, чтобы оно соответствовало выходному соотношению 16: 9, сохраняя при этом исходное соотношение сторон. Для этого вы можете:

    • Добавьте черные полосы с фильтром прокладки в стойку или почтовый ящик, чтобы изображение соответствовало надлежащим образом, или
    • Используйте фильтр урожая, чтобы отключить избыток

    Персоналии или почтовый ящик

    Изображение в виде столба
    Изображение в виде столба. Установка входа 640×480 (4: 3) в выход 1280×720 (16: 9).

     ffmpeg -i input -vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2" output 
    • Это улучшит изображение. Если вы хотите избежать масштабирования, см. Пример ниже.

    • Letterboxing будет происходить, если входное соотношение сторон шире, чем выходное соотношение сторон. Например, вход с соотношением сторон 2,35: 1, вставленным в выход 16: 9, приведет к созданию почтового ящика.

    То же, что и выше, но без масштабирования

    Нет масштабирования
    640×480 (4: 3) на выход 1280×720 (16: 9) без масштабирования.

     ffmpeg -i input -vf "scale='min(1280,iw)':min'(720,ih)':force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2" output 

    урожай

    Введите описание изображения здесь
    Обрезанное изображение. 4: 3, соотношение выходных форматов 16: 9.

     ffmpeg -i input -vf "scale=1280:720:force_original_aspect_ratio=increase,crop=1280:720" output 

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

    Во-первых, в вашей оболочке определить ширину и высоту вывода:

     width=700 height=400 

    Затем запустите команду:

     ffmpeg -i in.mp4 -filter:v "scale=iw*min($width/iw\,$height/ih):ih*min($width/iw\,$height/ih), pad=$width:$height:($width-iw*min($width/iw\,$height/ih))/2:($height-ih*min($width/iw\,$height/ih))/2" out.mp4 

    Это урезается до нужных вещей, необходимых для изменения размера и добавления дополнительных параметров видео и аудио, как вы сочтете нужным. Обратите внимание, что цифры для width и height должны быть делятся на 2, чтобы работать для большинства кодеков.

    Вот объяснение того, что происходит:

    • Масштабирование:
      • Сначала нам нужно выяснить, масштабироваться ли по ширине или по высоте.
      • Для этого мы разделим ширину вывода на ширину ввода и высоту вывода по высоте входа. Это даст нам масштабные коэффициенты для каждого измерения.
      • Затем мы проверяем, какой из них ниже (с min() ) и выбираем только этот коэффициент для изменения размера.
      • Наконец, мы умножаем как ширину и высоту входного сигнала на этот коэффициент ( iw*min(…):ih*min(…) ).
    • Обивка:
      • $width:$height – ширина и высота вывода
      • Чтобы выяснить, где разместить результирующее видео, нам нужно вычесть масштабированную ширину от максимальной выходной ширины и масштабированную высоту от максимальной выходной высоты.
      • Масштабированные ширины и высоты – это выражения из фильтра scale .
      • Мы разделим полученное смещение на 2, чтобы добавить границы с обеих сторон.

    Мне кажется, что вам нужно сделать это в три этапа:

    1. Проверьте коэффициент входного сигнала
    2. Масштабируйте видео с DAR> 7/4 шириной (измените ширину до 700 и масштабируйте высоту, чтобы сохранить соотношение сторон), и масштабируйте их с помощью DAR <7/4 по высоте
    3. Поместите видео так, чтобы оно соответствовало размеру 700: 400.

    FFmpeg / avconv может выполнять масштабирование / заполнение с помощью видеофильтров за один шаг, перекодируя только один раз. Например, чтобы взять видеоролик 16: 9, масштабируйте его по ширине, а затем введите почтовый ящик:

     ffmpeg -i input.avi -filter:v 'scale=700:-1,pad=700:400:(ow-iw)/2:(oh-ih)/2' \ -c:v libx264 -b:v 2000k -bufsize 20M -c:a aac -strict experimental -ar 44100 -b:a 256k output.mp4 

    … но для первого шага (для определения соотношения сторон и сравнения его с требуемым 7: 4) вам придется использовать какой-то скрипт.

     ffprobe input.avi 2>&1 | sed -n '/Video:/s/.*DAR \([0-9]*:[0-9]*\)].*/\1/p' 

    … вы получите соотношение сторон видео, которое будет выглядеть как «16: 9» или «4: 3». В сценарии bash я бы использовал что-то вроде:

     #!/bin/bash ## Get the aspect ratio in the form x/y dar=$(ffprobe test0.mp4 2>&1 | sed -n '/Video:/s/.*DAR \([0-9]*:[0:9]*\)].*/\1/p' | sed 's|:|/|') ## use bc to do x/y*100 (bash can't handle floats) DAR=$(bc <<< 'scale=2; $dar*100') ## ${DAR%.00} will remove the trailing .00 left by bc if [ ${DAR%.00} -ge 175 ]; then ffmpeg -i "$1" -filter:v 'scale=700:-1,pad=700:400:(ow-iw)/2:(oh-ih)/2' \ -c:v libx264 -b:v 2000k -bufsize 20M -c:a aac -strict experimental -ar 44100 -b:a 256k "${1%.*}.mp4 else ffmpeg -i "$1" -filter:v 'scale=-1:400,pad=700:400:(ow-iw)/2:(oh-ih)/2' \ -c:v libx264 -b:v 2000k -bufsize 20M -c:a aac -strict experimental -ar 44100 -b:a 256k "${1%.*}.mp4 fi exit 0 

    Очевидно, вам придется адаптировать его к вашим потребностям.

    Давайте будем гением компьютера.