У меня есть многошаговый процесс для создания загружаемой копии прямой трансляции с экранными элементами, записываемыми в видео.
Первая команда создает прозрачное анимированное наложение из списка кадров в текстовом файле.
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» и цикл второго файла вместо генерации полного набора кадров.