你生成了一段带音频的视频,结果音轨明显跟画面对不上。鼓点早了半拍、台词在嘴动完之后才出来、走到一半脚步声直接没了。这跟人脸生成器的嘴型不准不是一回事——这是音频和视频本来就是两次独立生成、然后硬拼在一起,没有共享时码;或者是帧率不一致,把一个相对另一个拉伸了。
最快的修法:如果整段音频都偏同一个固定量,用一条 ffmpeg 命令挪一下就行(不重新编码):
# 把音频往后推 0.25 秒(音频来早了)
ffmpeg -i in.mp4 -itsoffset 0.25 -i in.mp4 -map 0:v:0 -map 1:a:0 -c copy out.mp4
# 把音频往前提 0.25 秒(音频来晚了)
ffmpeg -itsoffset 0.25 -i in.mp4 -i in.mp4 -map 1:v:0 -map 0:a:0 -c copy out.mp4
-itsoffset N 会把紧跟其后的那个输入的起始时间延后 N 秒,所以你把被延后那路的流和另一路的流混到一起。-c copy 表示不损画质,几秒就跑完。如果漂移是随时间越来越大的,跳到 Step 3 做帧率统一。
你属于哪一种
| 现象 | 大概原因 | 去看 |
|---|---|---|
| 从头到尾偏同一个量 | 恒定偏移(两段拼接) | Step 2 / 上面的 -itsoffset |
| 开头几乎对得上,越到后面偏得越多 | 帧率不一致或 VFR | Step 3 |
| 音频中途直接没了,画面还在播 | 模型生成时丢了音频 | Step 4(重渲) |
| 原文件好的,转换后才坏 | 转码把时间戳改坏了 | 先回测原始文件,再看 Step 5 |
| 单个人脸的嘴型不对 | 嘴型缺陷,不是同步偏移 | 看 AI 视频人脸嘴型对不上 |
常见原因
按踩坑频率排序。
1. 音频是单独一次生成
你出的是无声视频(Pika 2.5、老的 Runway Gen-3,或任何”只出视频”的跑法),后来才用 ElevenLabs、Suno 或素材库的音频加上去。两次生成没有共享时码,任何节拍点之间的延迟都会在整段里累积放大。
怎么判断:打开工程文件。如果音频轨是单独导入的,那就是两段拼接结构,漂移一定会累积。
2026 年 6 月补充:现在主流旗舰模型大多一次性把音频烤进去(Sora 2、Veo 3.1、Kling 3.0、Runway Gen-4),所以这条原因主要出现在你特意生成了无声视频、或者在上面叠了一条素材音轨的时候。
2. 导出时帧率不一致
模型按 24 fps 渲染,但导出管线或剪辑序列按 30 fps 处理。音频走真实时间,视频被拉慢或拉快,两者线性发散,10 秒之内就能听出来。
怎么判断:用 ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of csv=p=0 input.mp4 看源帧率,跟你剪辑序列的 fps 对比。
3. 模型中途丢掉音频
生成器偶尔会出一个音频中途就停的片子,比如 10 秒的片子音频在第 5 秒就没了,后面视频继续播但是哑的。Sora 2、Veo 3.1、Kling 3.0 在较长的 prompt 下都有人遇到过。
怎么判断:拉音频波形。如果画面还在跑、音频波形已经平了,那是生成端缺陷,不是同步偏移。怎么挪都没用,得重渲(Step 4)。
4. 源文件是可变帧率(VFR)
手机录屏生成界面、或从某些平台下载的片源,往往是 VFR。剪辑软件对 VFR 转换不好,漂移会非线性地累积。
怎么判断:ffprobe -select_streams v -show_entries frame=pts_time -of csv=p=0 input.mp4 看帧间隔是否恒定。如果忽长忽短,就是 VFR。
5. 转码或封装把时间戳改坏了
你用 HandBrake 或在线转换器跑了一遍,音频 PTS 被改错。
怎么判断:原下载文件同步是好的,转换后变坏。永远先测原始文件。
最短修复路径
Step 1:先量出漂移方向和大小
挑一个显眼的视觉节拍(一个拍手、关门、鼓点),在音频波形上找对应峰值,量帧偏移。
# Premiere / Resolve / CapCut
- 时间线放大到单帧
- 在 V1 视觉事件位置打 marker
- 在 A1 对应音频峰值位置打 marker
- 差值就是漂移帧数
- 除以 fps 换算秒:24 fps 下 6 帧 = 0.25 秒
漂移恒定就是 offset 问题(Step 2),漂移随时间增长就是 fps 不匹配(Step 3)。
Step 2:恒定漂移用音频偏移
最上面那条 ffmpeg 命令最快。想在剪辑软件里手动做的话:
# CapCut
- 右键音频 -> 分离音频
- 按测得的帧数前后拖
- 或选中后按 , 或 . 单帧推
# Premiere Pro
- 选中音频,Shift+左/右方向键推 5 帧(不按 Shift 是 1 帧)
- 纯偏移直接拖音频片段即可(Time Remapping 是改速度的,别用)
# DaVinci Resolve(Edit 页)
- 选中音频,按 , 或 . 做单帧滑动
- 拖动时查看器的帧计数会显示偏移量
Step 3:帧率不齐就先转固定帧率
# 用 ffmpeg 把 VFR(或不匹配的帧率)转成真正的固定帧率 CFR。
# -fps_mode cfr 是现在的写法,它取代了已弃用的 -vsync 1。
ffmpeg -i input.mp4 -fps_mode cfr -r 24 -c:a copy output.mp4
# 如果音频还在慢慢漂,让它跟着新时间戳重采样:
ffmpeg -i input.mp4 -fps_mode cfr -r 24 -af aresample=async=1 output.mp4
# 或者用 HandBrake(Video 标签)
- Framerate (FPS) -> 选 24(或对上模型的渲染帧率)
- 勾 "Constant Framerate"
# 然后重新导入剪辑,序列也设成 24 fps
目标帧率(-r 24)要用原因 2 里 ffprobe 查出来的模型实际渲染帧率,别拍脑袋猜。-fps_mode 和已弃用的 -vsync 都在 ffmpeg 官方手册 里有说明;截至 2026 年 6 月,-vsync 1 还能跑,但会打印弃用警告,所以优先用 -fps_mode cfr。
Step 4:换一次性出同步音频的模型重渲
如果是音频中途断了,或者怎么弄都还漂,就换一个生成时就把音频烤进去的模型。截至 2026 年 6 月:
# Sora 2 (OpenAI)
- 一次性出同步对白、SFX、音乐;基础片约 15 秒,Sora 2 Pro 约 25 秒
- talking head 嘴型稳定
# Veo 3.1 (Google)
- 原生 48kHz 音频(环境音 + 对白 + 拟音)锁画面;4K 输出
- 基础片 8 秒;用场景延展可串到约 140 秒,音频依然同步
# Kling 3.0 (Omni One)
- 一次性出视频 + 音频带嘴型;单片最长约 10 秒(1080p),支持多语种对白
# Runway Gen-4
- 音频(嘴型 + 环境 SFX)随视频一起合成(2026 年 5 月 3 日加入)
把节拍点写进 prompt 的示例:
A wooden door slams shut as a person enters a quiet room.
Synced audio: the slam lands on the visual contact frame.
Ambient room tone after, no music.
Step 5:兜底是剥音频重 mux
如果生成的音频就是不对、但画面要留,而你又有一条更干净的替代音轨:
# 剥掉坏音频
ffmpeg -i broken.mp4 -an -c:v copy video_only.mp4
# 装上新音频
ffmpeg -i video_only.mp4 -i new_audio.wav -c:v copy -c:a aac -shortest final.mp4
如果替换的音轨还要再挪一点,照最上面那条命令给音频输入加 -itsoffset 就行。
怎么确认修好了
- 把渲染出来的文件重新导入剪辑(别信旧时间线的缓存)。
- 跳到你的参考节拍点(拍手或关门),放大到单帧;音频峰值应当落在接触帧上,误差在 1 帧以内。
- 再跳到片子最后附近的一个节拍点重新检查。如果开头对上了、结尾还在漂,说明你修好了 offset,但 fps 还是不匹配(回到 Step 3)。
- 用全分辨率回放,不要用代理预览——代理回放可能掩盖、也可能凭空造出漂移。
预防
- 导入前先把工程序列 fps 锁成源 fps。
- 对白、sfx 关键的片用一次性同步音频的模型(Sora 2、Veo 3.1、Kling 3.0、Runway Gen-4)。
- VFR 源一律先用
-fps_mode cfr -r <帧率>转成 CFR 再剪。 - 把原始下载保留在母版文件夹,不要在 HandBrake 转换文件上剪;同步看着不对时先回测原始文件。
- 永远用全分辨率回放确认,不要只看代理预览。
常见问题
为什么漂移到 10 秒左右才看出来? 这是帧率不一致(或 VFR)的典型特征,不是恒定偏移。恒定偏移从第一帧起就偏同一个量;帧率不一致是开头几乎完美、然后线性发散。这种要做 CFR 统一(Step 3),而不是去挪音频。
音频播到一半就没了,这算同步问题吗? 不算。那是模型生成时丢了音频轨(原因 3)。挪或重 mux 现有音轨都救不回从没渲染出来的音频。重渲这段(Step 4),最好用更短的 prompt 或一次性出音频的模型。
-itsoffset 会重新编码、损画质吗?
不会。加了 -c copy 只是改时间戳、复制流,没有画质损失,几秒就跑完。只有 fps 统一(-r)那一步会重新编码视频。
该用 -async 修漂移吗?
老的 -async 音频选项已经弃用。慢漂移的正确做法是把视频统一成 CFR,再加 -af aresample=async=1,让音频跟着修正后的时间戳重采样。
在剪辑软件里好的,导出后又坏了,为什么? 你的导出设置在改帧率、或者又把 VFR 带回来了。把导出 fps 跟序列 fps 对齐、选固定帧率的预设,然后对着导出后的文件(不是时间线)重跑”怎么确认修好了”那几步。
Related
- AI video talking head lip sync off
- AI video export black frames
- AI video watermark on export
- AI video resolution downgrade after export
- AI video text overlay garbled
- AI video extension loses style
标签: #ai-video #排查 #audio-sync