用 FFmpeg 给视频添加 AI 配音
请注意:Supertonic 3 目前不支持中文,文中的 SuperClonica 声音可朗读其支持的 31 种语言。FFmpeg 可以把任何音频放到任何视频上,但不能生成自然的语音:它的可选 flite 滤镜听起来像机器人,而且大多数构建都没有包含它。实用的做法分两步:先用文字转语音引擎生成脚本配音,再让 FFmpeg 把音频加到视频上。
本指南用免费的 SuperClonica 引擎离线完成第一步,并给出第二步的 FFmpeg 命令。每条命令都在测试视频上运行过:它们用 -c:v copy 保持视频流不变,即使是长视频也几秒就能完成。
生成脚本配音
用 python -m pip install superclonica-cpu 安装一次引擎;首次运行会下载模型,之后离线使用。把旁白保存为文本文件并生成:
superclonica --text-file script.txt --voice M3 --lang en --normalize --output voice.wav
先在目录页面挑选声音:30 到 100 个字符的句子可免费、无需注册地试听。每个声音都会说 31 种语言;修改 --lang 即可用英语、西班牙语或日语朗读同一份脚本。暂不支持中文。
替换音轨
对于录屏或无声片段,画面取自视频,声音取自配音:
ffmpeg -i video.mp4 -i voice.wav -map 0:v -map 1:a -c:v copy -c:a aac voiced.mp4
视频保持完整时长;如果配音较短,后面是静音。这里不要加 -shortest:与流复制一起使用时可能卡住,或把画面截到配音的长度。
把配音叠在音乐上
若要在旁白下保留原声或音乐,先降低音量再混合两者:
ffmpeg -i video.mp4 -i voice.wav -filter_complex "[0:a]volume=0.25[music];[music][1:a]amix=inputs=2:duration=first:normalize=0[a]" -map 0:v -map "[a]" -c:v copy -c:a aac voiced.mp4
volume=0.25 把音乐调到四分之一,duration=first 保持视频时长,normalize=0 防止 amix 把人声减半。
只在说话时压低音乐
侧链压缩器会像剪辑师一样,在人声响起时压低音乐、在停顿处恢复:
ffmpeg -i video.mp4 -i voice.wav -filter_complex "[1:a]asplit=2[v][key];[0:a][key]sidechaincompress=threshold=0.02:ratio=10:attack=20:release=400[music];[music][v]amix=inputs=2:duration=first:normalize=0[a]" -map 0:v -map "[a]" -c:v copy -c:a aac voiced.mp4
想压得更深就调高 ratio,音乐恢复太快就加长 release。
把多句台词放在精确时间点
每句台词单独生成一个文件,按毫秒把每句延迟到对应时刻,再全部混合:
ffmpeg -i video.mp4 -i line1.wav -i line2.wav -filter_complex "[1:a]adelay=500:all=1[l1];[2:a]adelay=4000:all=1[l2];[0:a]volume=0.25[music];[music][l1][l2]amix=inputs=3:duration=first:normalize=0[a]" -map 0:v -map "[a]" -c:v copy -c:a aac voiced.mp4
这里第一句从 0.5 秒开始,第二句从 4 秒开始。因为每句是单独的文件,修改脚本时只需重做一句,而不是整条音轨。如果已有字幕,我们的“SRT 转语音”指南会自动生成带时间轴的音轨。