我有一个录音A(视频和音频),时长约42分钟。
我还有一个单独的音频流B同一事件,与视频中的音频完全相同,但 a) 质量好得多,并且 b) 仅涵盖前 29:34 分钟。
是否可以直接用音频流 B 替换录音 A 的前 29:34 分钟音频,同时保留录音 A 剩余的 12 分钟左右的音频?换句话说,将音频流 B “覆盖”在录音 A 的音频流之上。
理想情况下,解决方案是将录音 A 的前 29:34 分钟的音频从文件中删除(从而减小文件大小),但即使只是将其静音而不减小文件大小,也是可以接受的。
答案1
你需要做的是从中提取原始音频录音A,剪辑它,以便只保留最后 12 分钟左右的音频,然后将其合并音频流B,最后将其与视频文件再次合并。
步骤 1:提取原始音频
要提取原始音频,您首先需要知道录音 A 的音频格式,您可以通过运行来找出它ffprobe Recording A
。为了举例说明,我假设视频文件为.mp4
,音频为.ogg
:
ffmpeg -i RecordingA.mp4 -vn -acodec copy audio.ogg
这应该创建一个名为 的新文件audio.ogg
。
第 2 步:剪辑原始音频
提取出来之后,你需要剪辑它以便只剩下最后 12 分 26 秒(假设录音 A 正好是 42 分钟):
ffmpeg -ss 1774 -t 2520 -i audio.ogg clipped.ogg
这应该创建一个名为 的新文件clipped.ogg
。
步骤 3:与音频流 B 合并
现在,您需要将剪辑的音频与音频流 B 合并。为此,请运行以下命令:
ffmpeg -i "concat:AudioStreamB.ogg|clipped.ogg" -i file2.mp3 -acodec copy final.ogg -map_metadata 0:1
这应该创建一个名为 的新文件final.ogg
。
最后一步:与视频合并
重新编译音频后,您需要将其替换为视频。为此,请运行以下命令:
ffmpeg -i RecordingA.mp4 -i final.ogg -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 RecordingB.mp4
新文件,名为RecordingB.mp4
,应该是您想要的。