Как дешево «отменить» mosai c (т.е. разделить изображение на две половины или квадранты) с помощью ffmpeg? - PullRequest
0 голосов
/ 05 марта 2020

FFMPEG позволяет легко брать несколько входов и складывать их в видео mosai c. Я ищу способ сделать обратное, в частности, я хотел бы взять видео поток, который состоит из четырех потоков, сложенных в квадранты, и разделить его на четыре отдельных видео, состоящих из координат

video1 = [0, 0.5*w, 0, 0.5*h]
video2 = [0.5*w, w, 0, 0.5*h]
video3 = [0, 0.5*w, 0.5*h, h]
video4 = [0.5*w, w, 0.5*h, h]

Я знаю что я могу сделать это с четырьмя отдельными вызовами ffmpeg, используя фильтр crop, но это кажется излишне дорогим. Есть ли способ сделать это за один звонок?

1 Ответ

1 голос
/ 05 марта 2020

фильтр обрезки

Вы можете использовать четыре обрезки фильтров в одной команде:

ffmpeg -i input -filter_complex "[0]crop=iw/2:ih/2:0:0[tl];[0]crop=iw/2:ih/2:ow:0[tr];[0]crop=iw/2:ih/2:0:oh[bl];[0]crop=iw/2:ih/2:ow:oh[br]" -map "[tl]" topleft.mp4 -map "[tr]" topright.mp4 -map "[bl]" bottomleft.mp4 -map "[br]" bottomright.mp4

фильтр битового потока

Фильтр битового потока отличается от нормальный фильтр. Обычный фильтр требует декодирования и кодирования. Фильтр битового потока работает с данными закодированного потока и выполняет модификации уровня битового потока без выполнения декодирования.

Фильтры битового потока h264_metadata и hevc_metadata могут редактировать смещения обрезки окна в SPS для H.264 и H.265 / HEV C. Это означает, что он может изменять эти значения без необходимости перекодировать видео. Размер файла останется прежним, но проигрыватель будет обрезать видео в соответствии с установленными значениями обрезки.

Пример для ввода H.264 320x240:

ffmpeg -i input.mp4 -bsf:v h264_metadata=crop_right=160:crop_bottom=120 -c copy topleft.mp4 -bsf:v h264_metadata=crop_left=160:crop_bottom=120 -c copy topright.mp4  -bsf:v h264_metadata=crop_right=160:crop_top=120 -c copy bottomleft.mp4 -bsf:v h264_metadata=crop_left=160:crop_top=120 -c copy bottomright.mp4

Эти поля установлены в пиксели. Обратите внимание, что некоторые размеры могут не отображаться, если цветность субдискретизирована (это в основном означает, что вы должны использовать только четные значения для типичного видео).

Для сценария этого вы можете использовать ffprobe, чтобы получить ширина и высота .

...