[我观察到,如果一个剪辑来自文件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版本中包含的旧版本运行良好-在我的生产案例上(更长的剪辑)。
任何反馈将不胜感激!
我可以在Linux的FFmpeg 4.2.2上复制分段错误,但是它可以与当前git master分支(4ae8d13)的构建一起使用。因此,这很可能是已经修复的回归错误。我没有进一步调查。
使用较新的版本。 zeranoe.com和evermeet.cx都提供了macOS的编译二进制文件(Zeranoe当前提供了来自master的较新版本)。或通过Homebrew等进行编译。
遇到分段错误时,总是建议更新并重试。
如果从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
...