处理视频里的声音
如果画面没问题,只需要处理声音,这一页会说明工具如何读取音轨、输出什么, 以及怎么把它重新对回画面上。如果你还在判断自己的文件能不能打开, 先看去除视频里的噪音。
我们只读声音,别的都不碰
你的浏览器在文件原地打开它,从容器里把音频取出来。视频轨从不被解码、不被修改、 也不被上传 —— 音频同样如此。这里根本没有上传这一步,这也是为什么没有排队、 没有一封「你的文件正在处理」的邮件。
对 mp4 和 mov,我们读容器自己的索引,只取我们要的那一段对应的字节, 所以一个 2 GB 的文件不会变成内存里的 2 GB。你的原文件是以只读方式打开的, 原封不动。
输出格式
一个 48 kHz 的 16 位单声道 WAV —— 只有音频,30 秒大约 2.9 MB。有两件事要预先安排:
- **它是单声道的。**模型跑之前一切都会被并成一个声道,因为模型是单通道的。 如果你的机器录的是立体声对、或者一支枪麦和一支领夹分在两个声道上,它们回来时是一路。
- **它没有和你的原声做电平匹配。**我们不做任何响度归一化;在我们自己的样例上, 处理后的轨比原轨约低 2 LU。调电平放在这一步之后,不是之前。
把它放回画面上
结果卡片会把你的整个文件画成一条,上面标出处理过的那 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
两条命令都在你自己的设备上运行,不会经过我们的服务器。如果你的原文件是立体声, 记住替换进去的这一轨是单声道的;如果交付格式要求立体声,就把这条单声道音轨分别复制到左右声道。