使用 ffmpeg 淡入淡出视频和音频

使用 ffmpeg 淡入淡出视频和音频

这个超级用户的回答使用 ffmpeg 在两个视频之间进行淡入淡出到目前为止,我已经尝试了许多解决方案,并且看到了那里的每个 SO 链接,现在是时候向大家寻求帮助了。

我正在尝试同时淡入淡出 2 个 ts 格式的视频,每个视频时长 10 秒,并带有音频和视频。

步骤如下:

  1. 添加复杂滤镜黑屏
  2. 视频 1 在 9 秒后淡出,淡出持续时间为 1 秒
  3. 视频 2 在 9 秒处淡入,淡入持续时间为 1 秒
  4. 将黑色滤镜输出调整为 19 秒

这对于单独播放视频来说效果很好,但是当我尝试添加音频时,无法忽略此错误消息:

输出垫“默认”,其过滤器实例“Parsed_asetpts_4”的音频类型为 asetpts 未连接到任何目的地

看来我没有正确连接音频输出。我想我需要修改 [over] 行以包含音频。但我该怎么做呢?

`ffmpeg -i vid1.ts -i vid2.ts -f lavfi -i color=black -filter_complex \
"[0:v]format=pix_fmts=yuva420p,\
fade=t=out:st=9:d=1:alpha=1,setpts=PTS-STARTPTS[v0];\
[0:a]\
afade=t=out:st=9:d=1,asetpts=PTS-STARTPTS[a0];\
[1:v]format=pix_fmts=yuva420p,\
fade=t=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+9/TB[v1];\
[1:a]\
afade=t=in:st=0:d=1,asetpts=PTS-STARTPTS+9/TB[a1];\
[a0][a1]amix=inputs=2;\ 
[2:v]scale=720x406,trim=duration=19[over];\
[over][v0]overlay[over1];\
[over1][v1]overlay=format=yuv420[outv]" -vcodec libx264 -y -map [outv] final.ts`

答案1

这将同时处理音频和视频:

ffmpeg -i segment1.mp4 -i segment2.mp4 -an \
-filter_complex \
"   [0:v]trim=start=0:end=9,setpts=PTS-STARTPTS[firstclip];
    [1:v]trim=start=1,setpts=PTS-STARTPTS[secondclip];
    [0:v]trim=start=9:end=10,setpts=PTS-STARTPTS[fadeoutsrc];
    [1:v]trim=start=0:end=1,setpts=PTS-STARTPTS[fadeinsrc];
    [fadeinsrc]format=pix_fmts=yuva420p,      
                fade=t=in:st=0:d=1:alpha=1[fadein];
    [fadeoutsrc]format=pix_fmts=yuva420p,
                fade=t=out:st=0:d=1:alpha=1[fadeout];
    [fadein]fifo[fadeinfifo];
    [fadeout]fifo[fadeoutfifo];
    [fadeoutfifo][fadeinfifo]overlay[crossfade];
    [firstclip][crossfade][secondclip]concat=n=3[output];
    [0:a][1:a] acrossfade=d=1 [audio]
" \
-map "[output]" -map "[audio]" result.mp4

这基本上与这个答案,但只涵盖了视频。一定要检查答案,因为它是解释得非常好

希望他们vcrossfade将来能添加过滤器...!

答案2

这样做:这是两个视频的交叉淡入淡出

ffmpeg -i big_buck.mp4 -i big_buck.mp4 -an -filter_complex "
[0:v]trim=start=0:end=4,setpts=PTS-STARTPTS[firstclip];  
[1:v]trim=start=1,setpts=PTS-STARTPTS[secondclip]; 
[0:v]trim=start=4:end=5,setpts=PTS-STARTPTS[fadeoutsrc]; 
[1:v]trim=start=0:end=1,setpts=PTS-STARTPTS[fadeinsrc]; 
[fadeinsrc]format=pix_fmts=yuva420p, fade=t=in:st=0:d=1:alpha=1[fadein]; 
[fadeoutsrc]format=pix_fmts=yuva420p,fade=t=out:st=0:d=1:alpha=1[fadeout]; 
[fadein]fifo[fadeinfifo]; [fadeout]fifo[fadeoutfifo]; [fadeoutfifo]
[fadeinfifo]overlay[crossfade]; [firstclip][crossfade]
[secondclip]concat=n=3[output]; [0:a][1:a] acrossfade=d=1 [audio]" -map "
[output]" -map "[audio]" result.mp4 -y

它只适用于两个视频

相关内容