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

Jon*_*n_W 4 video bash shell ffmpeg

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

我正在尝试同时使用音频和视频对 2 个 ts 格式的视频进行交叉淡化,每个 10 秒。

步骤是:

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

这仅适用于视频,但是当我尝试添加音频时,我无法跳过此错误消息:

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

看来我没有正确连接音频输出。我想我需要更改 [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`
Run Code Online (Sandbox Code Playgroud)

Mer*_*erc 7

这将同时执行音频和视频:

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
Run Code Online (Sandbox Code Playgroud)

这与此答案基本相同,但仅涵盖视频。请查看答案,因为它的解释非常精彩

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

  • (可能为时已晚,但对后代有益......) (2认同)