1

В продолжение этого вопроса: у меня есть довольно сложный сценарий, который берет видео (mid.mov), накладывает поверх него набор изображений и накладывает перекрестные переходы на видео intro (intro.mov) и outro (outro.mov) в его конечные точки:

introDuration=5.63
outroDuration=7.08    
crossfadeDuration=1.0
introStartFade=4.63
midDuration=57.04
midStartFade=56.04

ffmpeg -i "intro.mov" -i "mid.mov" -i "outro.mov" -loop 1 -i "animation/middle_%2d.png" -filter_complex \
"[0:v]trim=0:$introStartFade,setpts=PTS-STARTPTS[introvideo1]; \
[0:v]trim=$introStartFade,setpts=PTS-STARTPTS[introvideo2]; \
[1:v]trim=0:$crossfadeDuration,setpts=PTS-STARTPTS[midvideo1]; \
[1:v]trim=$crossfadeDuration:$midStartFade,setpts=PTS-STARTPTS[midvideo2]; \
[1:v]trim=$midStartFade:,setpts=PTS-STARTPTS[midvideo3]; \
[2:v]trim=0:$crossfadeDuration,setpts=PTS-STARTPTS[outrovideo1]; \
[2:v]trim=$crossfadeDuration:,setpts=PTS-STARTPTS[outrovideo2]; \
[3:v]setpts=1.0*PTS[midAnimation]; \

[introvideo2]format=pix_fmts=yuva420p,fade=t=out:st=0:d=$crossfadeDuration:alpha=1[fadeoutintrovideo]; \
[midvideo1]format=pix_fmts=yuva420p,fade=t=in:st=0:d=$crossfadeDuration:alpha=1[fadeinmidvideo]; \
[midvideo3]format=pix_fmts=yuva420p,fade=t=out:st=0:d=$crossfadeDuration:alpha=1[fadeoutmidvideo]; \
[outrovideo1]format=pix_fmts=yuva420p,fade=t=in:st=0:d=$crossfadeDuration:alpha=1[fadeinextrovideo]; \

[midvideo2][midAnimation]overlay=shortest=1[midvideo]; \

[fadeoutintrovideo][fadeinmidvideo]overlay[crossfadeintrovideo]; \
[fadeoutmidvideo][fadeinextrovideo]overlay[crossfadeoutrovideo]; \
[introvideo1][crossfadeintrovideo][midvideo][crossfadeoutrovideo][outrovideo2]concat=n=5[outputvideo]; \

[0:a][1:a] acrossfade=d=$crossfadeDuration:c1=ipar:c2=ipar [audiotemp]; \
[audiotemp][2:a] acrossfade=d=$crossfadeDuration:c1=ipar:c2=ipar [outputaudio]" \
-map [outputvideo] -map [outputaudio] "out.mov"

Используя последнюю сборку (FFmpeg 3.3.3 "Гильберт"), сценарий достигает определенной точки, я получаю сообщение "Ошибка при фильтрации" (ярко-красный), а затем висит на последнем кадре (мне нужно » Ctrl-C "несколько раз, чтобы выйти).

Если я уберу эту строку, она будет работать нормально:

[midvideo2][midAnimation]overlay=shortest=1[midvideo];

Я пробовал более свежую сборку (ffmpeg-86877-g8e275a7), но она все еще зависает в той же точке.

Если я вернусь к более ранним версиям (я пробовал до FFmpeg 3.2.7 "Hypatia"), он работает нормально. Есть ли проблема со скриптом, или это ошибка, введенная в FFmpeg?

1 ответ1

2

Это не проблема сценария. В декабре 2016 года был добавлен коммит, который прервал операцию shortest=1 в некоторых фильтрах. Этот коммит был отменен в июне, но он привел к побочным эффектам, поэтому аннулированный коммит был отменен в июле.

Если вам нужен кратчайший, то вам нужно будет использовать старую версию на данный момент. Есть исправление в очереди, но нет ETA в его приложении.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .