FFmpeg застревает после печати Предупреждение: временная метка EOF ненадежна

#ffmpeg #overlay #movie

#ffmpeg #наложение #Фильм

Вопрос:

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

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

В то время как команда работает в большинстве случаев. В некоторых случаях я вижу предупреждение о ненадежности временной метки EOF, и после этого FFmpeg застревает на неопределенный срок.Это происходит с некоторыми конкретными случаями ввода, а также, похоже, различается в зависимости от разных версий ffmpeg, я пробовал с версиями ffmpeg 4.1, 4.0.4 и 3.4.1. Похоже, он работает только с 4.0.4, в то время как в других версиях он не работает.

Я делюсь примером команды вместе с ресурсами для Windows, для которой я сталкиваюсь с этой проблемой

Ниже приведена команда:

     ffmpeg -i assetsw_re_p_3w_re_p_3_%d.jpg -loop 1 -i assetstext_0.png -loop 1 -i assetstext_1.png -loop 1 -i assetstext_2.png -loop 1 -i assetstext_3.png -loop 1 -i assetstext_4.png -loop 1 -i assetstext_5.png -loop 1 -i assetstext_6.png -loop 1 -i assetstext_7.png -lavfi "[0:v]loop=loop=-1:size=121:start=1[lip0];[1:v]scale=w=693:h=155[si_1];[lip0][si_1]overlay=x=13:y=13:shortest=1[over_0];[2:v]scale=w=693:h=45[si_2];[over_0][si_2]overlay=x=13:y=871:shortest=1[over_1];[3:v]scale=w=693:h=155[si_3];[over_1][si_3]overlay=x=13:y=236:shortest=1[over_2];[4:v]scale=w=693:h=40[si_4];[over_2][si_4]overlay=x=13:y=1089:shortest=1[over_3];[5:v]scale=w=693:h=84[si_5];[over_3][si_5]overlay=x=13:y=1141:shortest=1[over_4];[6:v]scale=w=693:h=31[si_6];[over_4][si_6]overlay=x=13:y=1207:shortest=1[over_5];[7:v]scale=w=693:h=85[si_7];[over_5][si_7]overlay=x=13:y=982:shortest=1[over_6];[8:v]scale=w=693:h=52[si_8];[over_6][si_8]overlay=x=13:y=148:shortest=1[over_7];movie=filename=assets\\cmedia_cropped.mp4:loop=1,setpts=N/(FRAME_RATE*TB)[mov_0];[mov_0]scale=w=720:h=487[sm_0];[over_7][sm_0]overlay=x=0:y=357:shortest=1" card_output.mp4
 

Ниже приведена ссылка на все ресурсы, используемые в команде:

https://www.dropbox.com/sh/6bwo4fg5de3fjwz/AAA471jUtLZGtti3hakT1bgfa?dl=0

Конечный результат должен выглядеть примерно так:

https://www.dropbox.com/s/s92t6qij2lrl2j7/card_output1.mp4?dl=0

Пожалуйста, я не понимаю причины этого. Есть ли в любом случае, что я могу улучшить свою команду, чтобы мне не приходилось сталкиваться с этой проблемой. Любая помощь будет оценена.

Ответ №1:

Похоже, проблема заключается в этой части команды [0:v]loop=loop=-1:size= 121:start= 1[lip0].

По какой-то неизвестной причине FFmpeg не выполняет бесконечный цикл над моим входным набором изображений, вместо этого он выполняет цикл только один раз. Если вместо этого я установлю loop=(любое число ve), тогда он работает нормально.

FFmpeg застрял, потому что длительность набора изображений (при 25 кадрах в секунду) была меньше продолжительности видео в movie filter (movie=filename=assets \ cmedia_cropped.mp4: loop = 1, setpts= N / (FRAME_RATE * TB) [mov_0]), и кажется, чтокак ошибка в самом FFmpeg, так как в документации четко написано, что -1 приведет к бесконечным циклам, но в данном случае этого не происходит.

https://ffmpeg.org/ffmpeg-all.html#loop