ffmpeg在2个剪辑来自同一输入文件的情况下在3个剪辑之间的交叉渐变上崩溃

问题描述 投票:0回答:1

[我观察到,如果一个剪辑来自文件1.dv,并且两个剪辑从文件2.dv中切出,则在剪辑之间发生交叉淡入的情况下,ffmpeg 4.2.2(macOS)会崩溃,如下所示:

ffmpeg -f lavfi -i color=black:size=720x576:duration=11:rate=25 -i 1.dv -i 2.dv -filter_complex "\
    [1:v]trim=5:10,setpts=expr=PTS-STARTPTS,yadif,fade=alpha=1:d=2:st=3:type=out,setpts=expr=PTS-STARTPTS,fifo[s5];\
    [2:v]split=2[s7][s8];\
    [s7]trim=5:10,setpts=expr=PTS-STARTPTS,yadif,fade=alpha=1:d=2:type=in,fade=alpha=1:d=2:st=6:type=out,setpts=expr=PTS-STARTPTS+(3/TB),fifo[s15];\
    [s8]trim=12:17,setpts=expr=PTS-STARTPTS,yadif,fade=alpha=1:d=2:type=in,setpts=expr=PTS-STARTPTS+(6/TB),fifo[s22];\
    [0:v][s5]overlay=eof_action=repeat[s6];\
    [s6][s15]overlay=eof_action=repeat[s16];\
    [s16][s22]overlay=eof_action=repeat[s24];\
    [1:a]atrim=5:10,asetpts=expr=PTS-STARTPTS[s26];\
    [2:a]asplit=2[s27][s28];\
    [s27]atrim=5:10,asetpts=expr=PTS-STARTPTS[s30];\
    [s28]atrim=12:17,asetpts=expr=PTS-STARTPTS[s33];\
    [s26][s30]acrossfade=d=2[s31];\
    [s31][s33]acrossfade=d=2[s36]" \
     -map "[s24]" -map "[s36]" -ab 128k -acodec aac -crf 23 -movflags faststart -preset medium -tune film -vcodec libx264 -aspect 1024:576 out.mp4 -y

顺序有所不同:如果先使用2.dv中的两个剪辑,然后再附加1.dv中的剪辑,则一切正常。另外,如果所有剪辑都来自不同的文件。

ffmpeg 3.4.6(ubuntu 18.04)在任何情况下都没有问题。

自动编译的ffmpeg版本N-97322-gb1699f4(提交2020-04-13)适用于上述短剪辑,但是如果从2.dv中获取的两个剪辑之一变长,则会崩溃。在我的测试中,确定1500帧(64秒)是可以的,而1700(68秒)会导致分段错误。也就是说,如果您在上面的命令行中替换:

  • [[s7]trim=5:10...-> [s7]trim=0:68并因此]
  • [s27]atrim=5:10...-> [s27]atrim=0:68

有趣的是,从1.dv中获取的剪辑的长度不起作用。

ffmpeg输出显示大约20次

frame=    0 fps=0.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x  

在继续之前(例如故障情况):

frame=    4 fps=0.3 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   24 fps=1.6 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   25 fps=1.5 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   34 fps=1.9 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   36 fps=2.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   39 fps=2.1 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   40 fps=2.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   40 fps=2.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   40 fps=1.9 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    

成功案例:

frame=    5 fps=0.4 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   42 fps=3.2 q=28.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   53 fps=3.9 q=28.0 size=       0kB time=00:00:00.36 bitrate=   2.9kbits/s speed=0.0264x    
frame=   65 fps=4.6 q=28.0 size=       0kB time=00:00:00.84 bitrate=   1.2kbits/s speed=0.0594x 
...   

[来自zeranoe.com(git-2020-04-13-59e3a9a)和evermeet.cx(N-97308-g14dd0a9057-tessus,来自2020-04-12)的最新MacOS版本中包含的旧版本运行良好-在我的生产案例上(更长的剪辑)。

任何反馈将不胜感激!

ffmpeg split overlay trim
1个回答
0
投票

我可以在Linux的FFmpeg 4.2.2上复制分段错误,但是它可以与当前git master分支(4ae8d13)的构建一起使用。因此,这很可能是已经修复的回归错误。我没有进一步调查。

使用较新的版本。 zeranoe.comevermeet.cx都提供了macOS的编译二进制文件(Zeranoe当前提供了来自master的较新版本)。或通过Homebrew等进行编译。

遇到分段错误时,总是建议更新并重试。


0
投票

如果从2.dv中获取的两个剪辑之一变长,ffmpeg版本N-97322-gb1699f4也会崩溃。在我的测试中,确定1500帧(64秒)是可以的,而1700(68秒)会导致分段错误。也就是说,如果您在上面的命令行中替换:

  • [[s7]trim=5:10...-> [s7]trim=0:68并因此]
  • [s27]atrim=5:10...-> [s27]atrim=0:68

有趣的是,从1.dv中获取的剪辑的长度不起作用。

ffmpeg输出显示大约20次

frame=    0 fps=0.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x  

在继续之前(例如故障情况):

frame=    4 fps=0.3 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   24 fps=1.6 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   25 fps=1.5 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   34 fps=1.9 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   36 fps=2.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   39 fps=2.1 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   40 fps=2.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   40 fps=2.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   40 fps=1.9 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    

成功案例:

frame=    5 fps=0.4 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   42 fps=3.2 q=28.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
frame=   53 fps=3.9 q=28.0 size=       0kB time=00:00:00.36 bitrate=   2.9kbits/s speed=0.0264x    
frame=   65 fps=4.6 q=28.0 size=       0kB time=00:00:00.84 bitrate=   1.2kbits/s speed=0.0594x 
...   
© www.soinside.com 2019 - 2024. All rights reserved.