Sonilo 里预览同步、导出后配乐整体偏移,通常不是编码器把声音写丢了,而是时间轴起点、帧率、音轨采样这几类项目级设置,在预览和导出两条链路上走了不同的取值。先不要重做配乐,也不要反复换编码参数,按「时间轴起点 → 项目与素材帧率 → 音轨采样与声道」三项逐个核对,每次改动都留下可比较的记录。
配乐预览对、导出错时,先把预览窗口与导出文件的起始时间码按同一个 时:分:秒:帧 格式记下来,分清是整体后移还是起点不同;再核对项目帧率与素材帧率是否一致,最后看导出音轨的采样率、声道和音频流起始时间。每次只改一项并重新导出复测。这套排查只覆盖项目设置与封装层面的偏移,若素材本身损坏或解码异常,需要先修复素材再进入上述步骤。
对比预览窗口与导出文件的起始时间码
先在 Sonilo 预览窗口打开时间码显示,把播放头移到时间轴最左端,确认时间轴标尺的起点是 00:00:00:00 还是某个非零值;同时把画面停在第一帧,记录预览窗口显示的时间码,以及配乐波形开始的位置。这两条记录都用 时:分:秒:帧 的格式写下来,帧号按项目帧率换算,两次记录才能直接比较。
导出之后,用支持逐帧的播放器把导出文件定位到画面第一帧,记录播放器显示的时间码;再用通用的 ffprobe 读取容器和流的起始时间。命令骨架如下,替换最后的文件名为实际导出文件:
ffprobe -v error -show_entries format=start_time,duration -show_entries stream=index,codec_type,start_time,time_base,r_frame_rate -of default=noprint_wrappers=1 导出文件.mp4需要关注的字段是 format.start_time、每一路流的 start_time,以及视频流的 time_base 和 r_frame_rate。如果视频流 start_time 接近 0、音频流 start_time 明显不同,说明是封装时两轨起点没对齐;如果两路流的 start_time 一致,但画面第一帧对应的时间码本身就晚了,那更可能是时间轴起点或素材入点的问题,属于整体后移之外的另一种情况。先分清这两类,后面的核对才有方向。
核对项目帧率与素材帧率是否一致
项目帧率通常在工程设置、序列设置或时间轴属性里查看,素材帧率在素材属性或媒体信息里查看。两者不一致时,常见表现不是固定偏移,而是时间越长音画错得越多,画面出现重复帧或轻微卡顿,配乐在时间轴尾部偏得比头部明显。这类逐帧累积的偏差,靠拖动配乐位置通常修不干净。
如果确认不一致,改动前先备份工程。需要注意,修改项目帧率不会自动把已经对齐好的音频重新对齐,原来按旧帧率摆放的配乐位置会保留在时间轴上,需要重新确认入点;素材帧率高于项目帧率时一般会被抽帧,低于项目帧率时会被补帧或拉长,这两种情况对配乐起点的影响方向不同。改完帧率后,先不要动配乐位置,直接重新导出一次,再用上一节的方法对比起始时间码和偏移量。如果偏移方向没变、量级也接近,说明帧率不是主因,回到音轨设置继续查。
检查导出音轨的采样率与声道设置
音频侧要核对的项包括:采样率、声道数和声道布局、编码格式与位深、音频流 start_time、音频流时长。工程音频采样率与导出设置里的采样率保持一致,源配乐如果是 44.1 kHz 而工程跑在 48 kHz,重采样本身通常不会造成可感知偏移,但重采样与增益、淡入淡出的处理顺序不同,可能让音频起点移动很小的幅度,是否构成问题要结合导出文件来判断。
读取导出文件音轨参数可以用下面这组通用命令,按需要替换流序号和文件名:
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name,sample_rate,channels,channel_layout,start_time,duration,bit_rate -of default=noprint_wrappers=1 导出文件.mp4参数正常的情况是:sample_rate 与工程设置一致,channels 与 channel_layout 和源配乐相符,音频流 start_time 与视频流 start_time 基本对齐。异常的情况是:单声道素材被导成立体声、或立体声被压成单声道,以及音频流 start_time 明显早于或晚于视频流 start_time。后一种情况往往是容器封装把音轨起点抬了,需要回到导出设置检查音频起点,或确认时间轴上音频片段是否真的从 0 开始。
测出偏移量并只改一项复测
先给偏移量定一个统一的测法:在导出文件里找一个有明显声音标记的位置,比如拍手、鼓点或台词起音,用播放器逐帧步进,找到声音实际出现的帧和画面标记所在的帧,把两个帧号相减,换算成偏移帧数,并写清方向是声音超前还是滞后。同一个导出文件至少测两个不同位置,避免把某一次定位失误当成整体偏移。
复测时用一张固定字段的记录表,建议包含:测试编号、本次改动项、项目帧率、素材帧率、音频采样率、声道、导出文件名、视频流起始时间码、音频流起始时间码、偏移帧数、偏移方向、备注。每次只改一项,改完重新导出,其他条件保持不动。如果偏移量没有变化,说明这一项不是原因,回退后再查下一项;如果偏移方向反转或明显减小,这一项就是主因,围绕它继续收敛。
直到偏移稳定在你可接受的范围,再决定是否微调配乐入点。不要在同一个版本里同时改帧率、采样率和时间轴起点,否则下一次遇到偏移时无法判断是哪一项带来的。另外,导出文件的播放器时间码显示方式各有差异,比对时统一用逐帧步进读出的帧号,比直接看秒数更可靠。