У меня есть html 5 видеоплеер, который имеет ширину 700px и высоту 400px. Я пытаюсь использовать avconv
ffmpeg для изменения размера (при сохранении соотношения сторон) и проверяю, подходит ли он моему проигрывателю.
Входными данными может быть файл любого размера, поэтому мне нужно изменить размер больших, но отцентрировать меньшие с черными полосами. До сих пор я пробовал: -s
и -aspect
я видел, pad
как используется с -vf
коммутатором, но не понимаю, как он работает достаточно, чтобы получить то, что мне нужно.
Это грубое представление о том, что мне нужно. Я не уверен, возможно ли это вообще. Это почти как CSS max-width / 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
источник
Ответы:
Простой способ - использовать
force_original_aspect_ratio
параметр в фильтре масштаба .Исходное изображение. Представляет видео с форматным соотношением 640x480, 4: 3.
В этих примерах исходное изображение будет масштабировано для соответствия форматному соотношению 16: 9 с сохранением исходного форматного соотношения. Для этого вы можете:
Pillarbox или почтовый ящик
Pillarboxed изображение. Установка входа 640x480 (4: 3) на выход 1280x720 (16: 9).
Это увеличит изображение. Если вы хотите избежать масштабирования, посмотрите пример ниже.
Вместо этого будет использоваться форматирование по буквам, если входное соотношение сторон шире, чем выходное соотношение сторон. Например, ввод с соотношением сторон 2,35: 1, вписывающийся в вывод 16: 9, приведет к почтовому ящику.
То же, что и выше, но без апскейлинга
Вход 640x480 (4: 3) на выход 1280x720 (16: 9) без увеличения.
урожай
Обрезанное изображение. Соотношение сторон 4: 3, соотношение сторон 16: 9.
источник
color
опцию, напримерpad=1280:720:(ow-iw)/2:(oh-ih)/2:color=red
(или вы можете использовать шестнадцатеричный, если хотите). Смотрите список цветов .Вот команда, которая добавит столб или почтовый ящик для фиксированной ширины вывода. Это немного долго, но вы должны будете указать отступы каким-то образом.
Сначала в вашей оболочке определите ширину и высоту вывода:
Затем выполните команду:
Это урезано до самого необходимого, необходимого для изменения размера и дополнения - добавьте ваши другие видео и аудио параметры, как вы считаете нужным. Обратите внимание, что числа для
width
иheight
должны делиться на 2, чтобы работать для большинства кодеков.Вот объяснение того, что происходит:
min()
), и выбираем только этот коэффициент для изменения размера.iw*min(…):ih*min(…)
).$width:$height
ширина и высота выводаscale
фильтра.источник
-movflags +faststart
к примеру slhck. Это позволит вашему прогрессивно загруженному видео , чтобы начать воспроизведение до его полной загрузки, а также увидеть FFmpeg и x264 Руководства по кодированию и FFmpeg и AAC Руководства по кодированию для более кодирующей инструкции и примеры.pad=$width:$height:(ow-iw)/2:(oh-ih)/2"
ow-iw
.Мне кажется, что вам нужно сделать это в три этапа:
FFmpeg / avconv может выполнять масштабирование / заполнение с помощью видеофильтров за один шаг, транскодируя только один раз. Например, чтобы взять видео в формате 16: 9, масштабировать его по ширине, а затем пометить в поле результаты:
... но для первого шага (определение соотношения сторон и сравнение его с требуемым 7: 4) вам придется использовать какой-нибудь скрипт.
... вы получите соотношение сторон видео, которое будет выглядеть как «16: 9» или «4: 3». В скрипте bash я бы использовал что-то вроде:
Очевидно, вам придется адаптировать его к вашим потребностям.
источник