【问题标题】:Audio issues when overlaying two videos (ffmpeg)叠加两个视频时的音频问题 (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 秒后显示并播放整个持续时间。但是,我有两个问题:

  1. popup.mov 的音频仍然在开头播放。我已经尝试了它的偏移量,设置了 pts,但两者似乎都不起作用或有错误。
  2. 播放的唯一音频是 popup.mov 的音频。我希望 2minutevideo 和 popup.mov 都播放音频。是的,我知道这是因为 -map 1:a 仅将弹出窗口的音频映射到最终视频,但我不知道如何同时播放音频。我需要混合吗?

谢谢

【问题讨论】:

    标签: python audio ffmpeg


    【解决方案1】:

    添加adelayamix 过滤器:

    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_start}s: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代码只是噪音。如果没有蟒蛇挡路,你可能会更快得到答案。

    【讨论】:

      猜你喜欢
      • 2018-12-27
      • 2018-05-30
      • 2014-10-10
      • 2017-04-13
      • 2012-05-15
      • 1970-01-01
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多