FFmpeg застревает после печати Внимание: временная метка EOF не надежна - PullRequest
0 голосов
/ 13 апреля 2019

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

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

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

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

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

    ffmpeg -i assets\w_re_p_3\w_re_p_3_%d.jpg -loop 1 -i assets\text_0.png -loop 1 -i assets\text_1.png -loop 1 -i assets\text_2.png -loop 1 -i assets\text_3.png -loop 1 -i assets\text_4.png -loop 1 -i assets\text_5.png -loop 1 -i assets\text_6.png -loop 1 -i assets\text_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 голосов
/ 03 мая 2019

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

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

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

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

...