Эффективная командная строка для обрезки видео, наложения на него другого фрагмента и масштабирования результата с помощью ffmpeg - PullRequest
0 голосов
/ 26 мая 2018

Мне нужно конвертировать много видео таким образом, чтобы я взял 2 разных кадрирования из каждого кадра одного видео, сложил их один над другим и уменьшил результат, создав новое видео меньшего размера.Я хочу преобразовать этот fullHD кадр (две области кадрирования помечены красным) в этот небольшой составной кадр .

Прямо сейчас я использую следующий код:

ffmpeg  -i "video.mkv" -filter:v "crop=560:416:0:0" out1.mp4
ffmpeg  -i "video.mkv" -filter:v "crop=560:384:1060:128" out2.mp4
ffmpeg  -i out1.mp4 -vf "movie=out2.mp4[inner]; [in][inner] overlay=0:32,scale=280:208[out]"  -c:v libx264 -preset veryfast -crf 30 result.mp4

Это работает, но очень неэффективно и требует временных файлов (out1 и out2).И проблема в том, что у меня более 100 000 таких видео (они большие и хранятся на NAS, а не на жестком диске моего компьютера).Преобразование всех из них с помощью пакетного сценария Windows (для цикла) займет ... 48 дней.Можете ли вы помочь мне оптимизировать скрипт?

1 Ответ

0 голосов
/ 26 мая 2018

Используйте фильтры обрезки, vstack, масштаба и форматирования:

ffmpeg -i input.mkv -filter_complex "[0:v]crop=560:24:0:0[top];[0:v]crop=560:384:1076:128[bottom];[top][bottom]vstack,scale=280:-2[out]" -map "[out]" -c:v libx264 -preset veryfast -crf 30 -movflags +faststart result.mp4

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

ffmpeg -i input.mkv -filter_complex "[0:v]scale=iw/2:-1,split[v0][v1];[v0]crop=560/2:24/2:0:0[top];[v1]crop=560/2:384/2:1076/2:128/2[bottom];[top][bottom]vstack[out]" -map "[out]" -c:v libx264 -preset veryfast -crf 30 -movflags +faststart result.mp4

Вам придется поэкспериментировать, чтобы увидеть, какой из них самый быстрый для вас.

...