处理视频里的声音

如果画面没问题,只需要处理声音,这一页会说明工具如何读取音轨、输出什么, 以及怎么把它重新对回画面上。如果你还在判断自己的文件能不能打开, 先看去除视频里的噪音

我们只读声音,别的都不碰

你的浏览器在文件原地打开它,从容器里把音频取出来。视频轨从不被解码、不被修改、 也不被上传 —— 音频同样如此。这里根本没有上传这一步,这也是为什么没有排队、 没有一封「你的文件正在处理」的邮件。

对 mp4 和 mov,我们读容器自己的索引,只取我们要的那一段对应的字节, 所以一个 2 GB 的文件不会变成内存里的 2 GB。你的原文件是以只读方式打开的, 原封不动。

输出格式

一个 48 kHz 的 16 位单声道 WAV —— 只有音频,30 秒大约 2.9 MB。有两件事要预先安排:

把它放回画面上

结果卡片会把你的整个文件画成一条,上面标出处理过的那 30 秒,旁边印着起点时码 —— 预览 30 秒,从 1:14 开始。从视频里裁出同一段, 再把两者合到一起:

ffmpeg -ss 1:14 -t 30 \
       -i original.mp4 -i cleaned.wav \
       -map 0:v -map 1:a \
       -c:v libx264 -crf 18 \
       -c:a aac -b:a 192k \
       -shortest check.mp4

这里的视频是故意重编码的。-ss 放在输入前面时,流拷贝只能从最近的关键帧开始, 那会让画面和声音错开最多一秒 —— 足以让你做出一个不可信的对口型判断。

在剪辑软件里是同一个意思、参数更少:导入 WAV,放到那个时码上的新音轨, 把原音轨静音,然后对着画面听。

处理整个文件

这件事不用再手动完成。结果卡片可以处理整个文件,直接输出一个 mp4, 画面逐字节拷过去,只换声音。下面这条命令留着,是给你想自己控制封装的时候, 或者你的浏览器编不了 AAC、只能拿回音频的时候用的。它里面没有裁剪, 所以视频是拷贝而不是重编码:

ffmpeg -i original.mp4 -i cleaned.wav \
       -map 0:v -map 1:a \
       -c:v copy -c:a aac -b:a 192k \
       output.mp4

两条命令都在你自己的设备上运行,不会经过我们的服务器。如果你的原文件是立体声, 记住替换进去的这一轨是单声道的;如果交付格式要求立体声,就把这条单声道音轨分别复制到左右声道。