Как получить ширину видео и масштабировать другое видео до этой ширины с помощью ffmpeg?

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

первый работает для разных размеров (но не масштабировать до нужного размера):

ffmpeg -i input1 -i input2 -filter_complex '[0:v]pad=iw:ih*2[int];[int][1:v]overlay=0:H/2[vid]' -map [vid] -c:v libx264 -crf 23 -preset veryfast output

второй работает, если видео имеют одинаковую ширину и одинаковый формат пиксела:

ffmpeg -i input1 -i input2 -filter_complex vstack output

Как получить ширину первого входа внутри сложного аргумента фильтра, чтобы второй вход можно было масштабировать до той же ширины? Что было бы приказ сделать это? Я бы предпочел фильтр vstack, так как он должен быть быстрее, чем комбинация pad и overlay.

6
задан Lesenger
16.02.2023 14:44 Количество просмотров материала 2395
Распечатать страницу

2 ответа

вы должны использовать scale2ref фильтр.

ffmpeg -i input1 -i input2
 -filter_complex '[1][0]scale2ref[2nd][ref];[ref][2nd]vstack'
 -map [vid] -c:v libx264 -crf 23 -preset veryfast output

обратите внимание, что это работает только хорошо, если пропорции обоих видео одинаковы. Если нет, и вы знаете соотношение сторон 2-го видео, используйте [1][0]scale2ref=iw:iw*(H/W)[2nd][ref] где (H/W) должно быть заменено на отношение высоты к ширине 2-го видео.


С сборки последней версии git ffmpeg, упрощенная версия возможна,

ffmpeg -i input1 -i input2
 -filter_complex '[1][0]scale2ref=oh*mdar:ih[2nd][ref];[ref][2nd]vstack'
 -map [vid] -c:v libx264 -crf 23 -preset veryfast output

это автоматически сохранит 2-й соотношение сторон входного сигнала.

4
отвечен Gyan 2023-02-17 22:32
  1. вы можете получить измерениях:

ffprobe-V ошибка-show_entries поток=ширина, высота по умолчанию=noprint_wrappers=1-of json input_video

  1. сохранить выходные данные в переменной, например ffprobe_output. тогда получим ширину:

ширина = ffprobe_output['ручьи'][0]['ширина']

для m4v файлов, вы должны получить их во втором массиве:

width = ffprobe_output['ручьи'][1]['ширина']

  1. шкала с шириной:

3.a) масштабировать с заданной шириной и сохранять пропорции

ffmpeg-i input_movie-VF масштаб=ширина: -1 output_movie

3.B) масштабировать с заданной шириной, сохранять пропорции, но делать высоту кратной 2 (требуется для многих форматов пикселей):

ffmpeg-i input_movie-VF масштаб=ширина: -2 output_movie

0
отвечен Agile Bean 2023-02-18 00:49

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх