一、背景
最近在找《生化危机 1》原版真人片头,作为收藏。搜索发现,原版由于年代久远,视频分辨率、清晰度、帧率都不太符合要求。又找到了 4K 60FPS 的版本,但这个版本后面人物介绍部分的背景音乐不尽如人意。
想到一个办法,就是把新的高清视频的部分音轨替换为原版视频的音轨。
这里考虑用 FFmpeg 完成。
二、思路
按照网上的建议,把新版视频从音频更换点分开,把第二部分的音频替换,然后再把视频拼接。
这种思路上是可以的,但是对于视频切割、合并,可能还是能看出来,而且处理比较慢。
最终思路:
由于视频长度、内容一样,所以只把音频提取后剪辑,然后再替换原有视频的整个音轨。有两个优势:
- 处理速度快
- 只要音频没杂音或者断开,不容易发现处理痕迹。
三、目标
原始视频:Original-Opening.mp4
高清视频:Opening-HD.webm
期待结果:
把 Opening-HD.webm
这个视频的 0:3:10.400
之后的音频部分,替换为 Original-Opening.mp4
的 0:3:9.900
之后的内容。
三、操作步骤
(一)处理音频
1、提取 Opening-HD.webm
在 0:3:10.400
之前的音频,保存为 audio1.ts
ffmpeg -i Opening-HD.webm -to 0:3:10.400 -vn audio1.ts
2、提取 Original-Opening.mp4
在 0:3:9.900
之后的音频,保存为 audio2.ts
ffmpeg -i Original-Opening.mp4 -ss 0:3:9.900 -vn audio2.ts
3、合并 audio1.ts
和 audio2.ts
为 new_audio.ts
(1)编写要合并的文件列表 inputs.txt
file audio1.ts
file audio2.ts
(2)合并音频
-safe 0
用于在使用 -f concat
的时候,允许使用相对路径,允许路径中有特殊字符。
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
格式,然后再进行拼接,效果会更好。
(完)