FFMpeg:如何将两个视频剪辑的两个音频流合并为 PIP,音频从特定的时间偏移开始

FFMpeg:如何将两个视频剪辑的两个音频流合并为 PIP,音频从特定的时间偏移开始

我正在使用 FFMPEG 中的画中画功能合并两个视频。全分辨率背景视频的长度可以变化,但 PIP 视频只有 10 秒长。PIP 视频需要在 7 秒后准确显示。我已成功使用以下命令合并了两个视频。

现在我还需要合并音频流。这也可以,只是视频使用的偏移量(使用 -itsoffset 7 和 enable=between(t, 7, 17) 设置)不适用于合并的音频流,导致 PIP 视频的音频已经在视频开头开始,即 00:00 而不是 00:07,并且音轨也会在 10 秒后(PIP 轨道的持续时间)切断。

我当前的命令如下:

ffmpeg -i "background_vid.mp4" -itsoffset 7 -i "pip_vid.mp4" -filter_complex "[1]scale=iw/4:ih/4 [pip]; [0][pip] overlay=main_w-overlay_w-10:main_h-overlay_h-10:enable='between(t,7,17)' [v];[0:a][1:a]amerge[a]" -map "[v]" -map "[a]" -profile:v main -level 3.1 -b:v 5000k -ar 44100 -ab 128k -s 1920x1080 -vcodec h264 -acodec aac output.mp4

需要澄清的是,背景视频的音频应照常在 00:00 开始。我希望 pip_vid 的音频(持续时间为 10 秒)与 background_vid 音频(可变长度)从 00:07 秒开始合并,与 PIP 视频出现在屏幕上的时间相同。PIP 视频消失后,背景视频的音频流应继续播放。

有什么办法吗?任何帮助都非常感谢,

谢谢!

答案1

音频混合过滤器不考虑起始时间戳,因此您必须首先用静音填充流。

使用

ffmpeg -i "background_vid.mp4" -itsoffset 7 -i "pip_vid.mp4" -filter_complex "[1]scale=iw/4:ih/4 [pip]; [0][pip] overlay=main_w-overlay_w-10:main_h-overlay_h-10:enable='between(t,7,17)' [v];[1:a]aresample=async=1:first_pts=0[pip-a];[0:a][pip-a]amerge[a]" -map "[v]" -map "[a]" -profile:v main -level 3.1 -b:v 5000k -ar 44100 -ab 128k -s 1920x1080 -vcodec h264 -acodec aac output.mp4

相关内容