FFMPEG удалить шаг создания оверлейного видео в многошаговом процессе - PullRequest
1 голос
/ 18 апреля 2020

У меня есть многошаговый процесс для создания загружаемой копии прямой трансляции с экранными элементами, записываемыми в видео.

Первая команда создает прозрачное анимированное наложение из списка кадров в текстовом файле.

ffmpeg -loglevel panic -f concat -safe 0 -r 30 -vcodec png  -i /tmp/bottomThird/UNKNOWN/36000/bt_files.txt -r 30 -codec:v png /tmp/bottomThird/UNKNOWN/36000/d8d55cd61873959017ed8dce8a0dcb61.mov

Текстовый файл содержит последовательность кадров для анимации, которая имеет «открывающиеся кадры», а затем l oop кадров, по существу:

/tmp/bottomThird/UNKNOWN/img/00001.png
/tmp/bottomThird/UNKNOWN/img/00002.png
/tmp/bottomThird/UNKNOWN/img/00003.png
/tmp/bottomThird/UNKNOWN/img/00004.png
/tmp/bottomThird/UNKNOWN/img/00005.png
/tmp/bottomThird/UNKNOWN/img/00006.png
/tmp/bottomThird/UNKNOWN/img/00007.png
/tmp/bottomThird/UNKNOWN/img/00008.png
/tmp/bottomThird/UNKNOWN/img/00009.png
/tmp/bottomThird/UNKNOWN/img/00010.png
/tmp/bottomThird/UNKNOWN/img/00005.png
/tmp/bottomThird/UNKNOWN/img/00006.png
/tmp/bottomThird/UNKNOWN/img/00007.png
/tmp/bottomThird/UNKNOWN/img/00008.png
/tmp/bottomThird/UNKNOWN/img/00009.png
/tmp/bottomThird/UNKNOWN/img/00010.png
...

повторяется до тех пор, пока не будет достигнуто количество кадров ( в данном случае 36000 кадров).

Результирующий файл MOV находится в диапазоне 2 ГБ, так как в основном это просто контейнер с скопированными изображениями кадров.

Промежуточный файл следующего шага создается с использованием нескольких оверлеев. Выше MOV, текст, который отображается после 40 кадров и остается stati c до конца, и второе наложенное изображение в стиле водяного знака.

ffmpeg  -i /tmp/embedGenerator/51039542/51039542.mp4  -vf "movie=/tmp/embedGenerator/51039542/bt_51039542.mov[inner];movie=/tmp/embedGenerator/51039542/bt_51039542_blank.png[overlay];movie=/tmp/embedGenerator/51039542/cover.png[cover];[in][inner] overlay=(W-w)/2:H-h-15 [out];[out][overlay] overlay=(W-w)/2:H-h-15:enable='between(n,40,36000)' [fin];[fin][cover] overlay=0:0 [final]" -shortest -b:v 5000k  -f mpegts /tmp/embedGenerator/51039542/intermediate.ts

Я бы хотел избежать шага создания анимированный файл MOV и объедините оба шага в одну команду, главным образом, чтобы избежать необходимости временного хранения такого большого файла.


Одна альтернатива, которую я рассмотрел, но еще не попробовал, - это создание 2 файлов MOV. «Запись», а затем последовательность «l oop» и цикл второго файла вместо генерации полного набора кадров.

1 Ответ

0 голосов
/ 19 апреля 2020

Вы можете просто указать вход concat непосредственно как второй вход и использовать его для наложения. То же самое для других входов, используемых в дальнейших оверлеях.

ffmpeg -i /tmp/embedGenerator/51039542/51039542.mp4 -f concat -safe 0 -r 30 -i /tmp/bottomThird/UNKNOWN/36000/bt_files.txt -i /tmp/embedGenerator/51039542/bt_51039542_blank.png -i /tmp/embedGenerator/51039542/cover.png -filter_complex "[0][1] overlay=(W-w)/2:H-h-15 [out];[out][2] overlay=(W-w)/2:H-h-15:enable='between(n,40,36000)' [fin];[fin][3] overlay=0:0" -shortest -b:v 5000k -f mpegts /tmp/embedGenerator/51039542/intermediate.ts

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...