叠加两个视频时的音频问题 (ffmpeg)
Posted
技术标签:
【中文标题】叠加两个视频时的音频问题 (ffmpeg)【英文标题】:Audio issues when overlaying two videos (ffmpeg) 【发布时间】:2021-07-31 23:45:15 【问题描述】:我正在尝试在 2 分钟的视频上叠加一个 10 秒的短视频,并让 10 秒的视频显示在 30 秒的标记处。这是我到目前为止所拥有的
start = 30
subprocess.run(
f'ffmpeg -y \
-i os.path.join(path, "2minutevideo.mp4") \
-i os.path.join(path, "popup.mov") \
-filter_complex \
"[0:v]setpts=PTS-STARTPTS[v0]; \
[1:v]setpts=PTS-STARTPTS+notify_start/TB[v1]; \
[v0][v1]overlay=enable=\'between(t, notify_start, notify_start + get_duration(os.path.join(path, "popup.mp4")))\' [out1]" \
render_flags -r 24 -map 1:a -map [out1] -async 1 \
os.path.join(source_folder, "test.mp4")')
它的作用是 popup.mov 在 30 秒后显示并播放整个持续时间。但是,我有两个问题:
-
popup.mov 的音频仍然在开头播放。我已经尝试了它的偏移量,设置了 pts,但两者似乎都不起作用或有错误。
播放的唯一音频是 popup.mov 的音频。我希望 2minutevideo 和 popup.mov 都播放音频。是的,我知道这是因为 -map 1:a 仅将弹出窗口的音频映射到最终视频,但我不知道如何同时播放音频。我需要混合吗?
谢谢
【问题讨论】:
【参考方案1】:添加adelay 和amix 过滤器:
start = 30
subprocess.run(
f'ffmpeg -y \
-i os.path.join(path, "2minutevideo.mp4") \
-i os.path.join(path, "popup.mov") \
-filter_complex \
"[0:v]setpts=PTS-STARTPTS[v0]; \
[1:v]setpts=PTS-STARTPTS+notify_start/TB[v1]; \
[v0][v1]overlay=enable=\'between(t, notify_start, notify_start + get_duration(os.path.join(path, "popup.mp4")))\' [out1]; \
[1:a]adelay=notify_starts:all=1[a1];[0:a][a1]amix[a]"
render_flags -r 24 -map [out1] -map [a] -async 1 \
os.path.join(source_folder, "test.mp4")')
这纯粹是一个 ffmpeg 问题。 python代码只是噪音。如果没有蟒蛇挡路,你可能会更快得到答案。
【讨论】:
以上是关于叠加两个视频时的音频问题 (ffmpeg)的主要内容,如果未能解决你的问题,请参考以下文章
FFMPEG:结合“从图像创建视频”+ 缩放到 x + 添加音频 + 覆盖徽标