美文网首页
使用 FFmpeg 替换视频部分音轨

使用 FFmpeg 替换视频部分音轨

作者: 舌尖上的大胖 | 来源:发表于2024-07-22 23:06 被阅读0次

一、背景

最近在找《生化危机 1》原版真人片头,作为收藏。搜索发现,原版由于年代久远,视频分辨率、清晰度、帧率都不太符合要求。又找到了 4K 60FPS 的版本,但这个版本后面人物介绍部分的背景音乐不尽如人意。

想到一个办法,就是把新的高清视频的部分音轨替换为原版视频的音轨。

这里考虑用 FFmpeg 完成。

二、思路

按照网上的建议,把新版视频从音频更换点分开,把第二部分的音频替换,然后再把视频拼接。

这种思路上是可以的,但是对于视频切割、合并,可能还是能看出来,而且处理比较慢。

最终思路:

由于视频长度、内容一样,所以只把音频提取后剪辑,然后再替换原有视频的整个音轨。有两个优势:

  • 处理速度快
  • 只要音频没杂音或者断开,不容易发现处理痕迹。

三、目标

原始视频:Original-Opening.mp4

高清视频:Opening-HD.webm

期待结果:

Opening-HD.webm 这个视频的 0:3:10.400 之后的音频部分,替换为 Original-Opening.mp40:3:9.900 之后的内容。

三、操作步骤

(一)处理音频

1、提取 Opening-HD.webm0:3:10.400 之前的音频,保存为 audio1.ts

ffmpeg -i Opening-HD.webm -to 0:3:10.400 -vn audio1.ts

2、提取 Original-Opening.mp40:3:9.900 之后的音频,保存为 audio2.ts

ffmpeg -i Original-Opening.mp4 -ss 0:3:9.900 -vn audio2.ts

3、合并 audio1.tsaudio2.tsnew_audio.ts

(1)编写要合并的文件列表 inputs.txt

file audio1.ts
file audio2.ts

(2)合并音频

ffmpeg -f concat -safe 0 -i inputs.txt new_audio.ts

(二)替换视频的音频

Opening-HD.webm 的音频替换为 new_audio.ts

ffmpeg -i Opening-HD.webm -i new_audio.ts -c copy -map 0:v:0 -map 1:a:0 -shortest adjusted.mp4

四、补充说明

1、整体处理方式的选择

为避免对事情进行剪辑出现可感知的问题,所以尽量保证原有视频不动,而是编辑好完整的音频,然后再整个替换。避免了视频的切割处理,性能也更好。

2、对于音频的合并

开始选用的方式是保留音频原有编码和文件格式:

  • 编码:aac
  • 容器格式:m4a

发现这样合并的音频,可能会有时间戳错误。曾经出现过一次,音频合成过程中警告可能时间戳会有问题,而实际上音频在听起来的时候没问题。但这个音频在替换到视频中的时候,发现音频有跳跃情况,所以还是需要处理下。

最终采用把提取后的音频保存为 .ts 格式,然后再合并。

理由:.ts 格式不需要维护复杂的索引结构,拼接操作非常简单,适合快速、无缝地拼接。

从这个情况来看,对于需要媒体拼接的场景,尤其是两端编码、容器不一致的情况,都可以先转为 .ts 格式,然后再进行拼接,效果会更好。

(完)

相关文章

网友评论

      本文标题:使用 FFmpeg 替换视频部分音轨

      本文链接:https://www.haomeiwen.com/subject/fsjyhjtx.html