ffmpeg complex_filter fadeout无效

时间:2015-04-11 03:41:54

标签: ffmpeg

我本来想要做的就是用b.mp4连接a.mp4,在视频的整个持续时间内显示我的%c.png叠加在ontop上,并且还显示d.png重叠在ontop但仅持续1秒然后让它淡出。所有这些都有效,除了d.png保持重叠并且永不淡出:

ffmpeg -i ./temp/a.mp4 -i media/b.mp4 -i media/splash/%c.png -i ./temp/d.png -y -filter_complex [0:v]scale=568x320,setpts=PTS-STARTPTS[v0];[1:v]scale=568x320,setpts=PTS-STARTPTS[v1];[2:v]scale=212:242,setpts=PTS-STARTPTS[v2];[3:v]trim=duration=0.5,fade=t=out:st=0:d=0.5[3:v];[v0][0:a][v1][1:a]concat=n=2:v=1:a=1[bg][a];[bg][v2]overlay=(W-w)/2:(H-h)/2,format=yuv420p[v];[v][3:v]overlay=(W-w)/2:(H-h)/2,format=yuv420p[v] -map [v] -map [a] -r 29.97 -vcodec libx264 -s 568x320 -flags +loop -b 400k -bufsize 4M -bt 256k -refs 1 -coder 0 -me_range 16 -subq 4 -partitions +parti4x4+parti8x8+partp8x8 -g 250 -keyint_min 25 -level 30 -qmin 10 -qmax 51 -qcomp 0.6 -trellis 2 -sc_threshold 40 -i_qfactor 0.71 -acodec aac -strict experimental -ab 80k -ar 48000 -ac 2 -strict experimental -f mp4 -metadata:s:v:0 rotate=90 ./temp/1428723401371.mp4

Lord Neckbeard,我知道你在外面。我一直在使用complex_filter阅读你的stackoverflow帖子上的淡入/淡出几个小时,我尝试过的任何东西都没有成功。请主,接受上述作为我的谦卑奉献给你并帮助我在1秒后淡出d.png。

2 个答案:

答案 0 :(得分:2)

试试这个:

ffmpeg -y -i a.mp4 -i b.mp4 -i c_%03d.png -loop 1 -i d.png -filter_complex \
"[0:v]scale=568:-2,setpts=PTS-STARTPTS[v0]; \
 [1:v]scale=568:-2,setpts=PTS-STARTPTS[v1]; \
 [2:v]scale=212:-1,setpts=PTS-STARTPTS[v2]; \
 [3:v]trim=duration=0.5,fade=t=out:st=0:d=0.5[v3]; \
 [v0][0:a][v1][1:a]concat=n=2:v=1:a=1[bg][a]; \
 [bg][v2]overlay=(W-w)/2:(H-h)/2[bg2]; \
 [bg2][v3]overlay=(W-w)/2:(H-h)/2,format=yuv420p[v]" \
-map "[v]" -map "[a]" -c:v libx264 -preset fast -c:a aac -strict experimental \
-ab 80k -metadata:s:v:0 rotate=90 -movflags +faststart output.mp4
  • 避免在每个过滤链中使用相同的链接标签进行输入和输出:

    • 错误:[v3]filter0,filter1[v3]
    • 右:[v3]filter0,filter1[foo]
  • 添加-loop 1作为d.png的输入选项,可让淡入淡出按预期工作。否则它作为单帧而不是连续流。默认情况下,overlay将循环覆盖输入的最后一帧,这就是为什么它只是停留在那里。可以使用eof_action重叠选项更改此行为。

  • 默认情况下,image file demuxer会将-framerate 25用于c_%03d.png,因此您可能希望将其添加为具有适当值的输入选项,以更改帧速率,因此特定输入的持续时间。

  • 使用x264预设而不是列出大量编码选项。请参阅FFmpeg Wiki: H.264 Encoding Guide

  • 并非所有玩家都会关注视频流旋转元数据。

答案 1 :(得分:0)

覆盖滤镜具有" repeatlast"的设置,默认设置为ON。在叠加过滤链中设置repeatlast = 0,然后会看到主视频。对不起,我已经太晚了几年,希望这个答案仍能帮助别人。