美文网首页
使用 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