提取后添加至其他视频的PGS字幕不同步问题排查求助
字幕偏移问题排查与修复
问题背景
现有某剧集日语版与英语版视频(视觉内容一致),尝试将英语版音频、字幕合并至日语版。目前英语音频与日语视频同步正常,但字幕需偏移6秒才能匹配,需排查问题根源并修复。
英语版文件流信息
Stream #0:1(eng): Audio: dts (DTS-HD MA), 48000 Hz, stereo, s32p (24 bit) (default) Metadata: title : Stereo BPS-eng : 1572054 DURATION-eng : 00:29:08.789333333 NUMBER_OF_FRAMES-eng: 163949 NUMBER_OF_BYTES-eng: 343648948 SOURCE_ID-eng : 001100 _STATISTICS_WRITING_APP-eng: MakeMKV v1.17.2 darwin(arm64-release) _STATISTICS_WRITING_DATE_UTC-eng: 2022-12-18 02:20:00 _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES SOURCE_ID Stream #0:2(eng): Audio: dts (DTS), 48000 Hz, stereo, fltp, 1536 kb/s Metadata: title : Stereo BPS-eng : 1509000 DURATION-eng : 00:29:08.789333333 NUMBER_OF_FRAMES-eng: 163949 NUMBER_OF_BYTES-eng: 329865388 SOURCE_ID-eng : 001100 _STATISTICS_WRITING_APP-eng: MakeMKV v1.17.2 darwin(arm64-release) _STATISTICS_WRITING_DATE_UTC-eng: 2022-12-18 02:20:00 _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES SOURCE_ID Stream #0:3(eng): Subtitle: hdmv_pgs_subtitle Metadata: BPS-eng : 22140 DURATION-eng : 00:28:47.454895833 NUMBER_OF_FRAMES-eng: 836 NUMBER_OF_BYTES-eng: 4780741 SOURCE_ID-eng : 001200 _STATISTICS_WRITING_APP-eng: MakeMKV v1.17.2 darwin(arm64-release) _STATISTICS_WRITING_DATE_UTC-eng: 2022-12-18 02:20:00 _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES SOURCE_ID Stream #0:4(eng): Subtitle: hdmv_pgs_subtitle Metadata: BPS-eng : 1770 DURATION-eng : 00:28:39.655437500 NUMBER_OF_FRAMES-eng: 62 NUMBER_OF_BYTES-eng: 380532 SOURCE_ID-eng : 001201 _STATISTICS_WRITING_APP-eng: MakeMKV v1.17.2 darwin(arm64-release) _STATISTICS_WRITING_DATE_UTC-eng: 2022-12-18 02:20:00 _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES SOURCE_ID
已执行的FFmpeg命令
提取英语音频
ffmpeg -i s01e01_ja.mkv \ -muxdelay 0 \ -map 0:1 \ -vn \ -acodec copy \ s01e01_en_audio.dts
注意:此命令输入为日语版文件,实际应使用英语版文件
s01e01_en.mkv,否则提取的是日语音频,属于明显笔误。
提取英语字幕
ffmpeg -i s01e01_en.mkv \ -muxdelay 0 \ -map 0:3 \ -vn \ -c copy \ s01e01_en_sub.sup
合并英语音轨至日语视频
ffmpeg -i s01e01_ja.mkv \ -i s01e01_en_audio.dts \ -muxdelay 0 \ -map 0 \ -map 1:a \ -c copy \ -shortest \ s01e01_en_ja.mkv
合并英语字幕至已加音轨的视频
ffmpeg -i s01e01_en_ja.mkv \ -itsoffset 6 \ -i future_boy_conan_s01e01_en_sub.sup \ -muxdelay 0 \ -map 0 \ -map 1:s \ -c copy \ -shortest \ s01e01_en_ja_subs.mkv
排查与修复步骤
1. 修正音频提取的笔误
重新从英语版文件提取正确的音频:
ffmpeg -i s01e01_en.mkv -map 0:1 -vn -acodec copy s01e01_en_audio_fix.dts
2. 验证字幕源文件的同步性
直接播放英语版原视频s01e01_en.mkv,确认Track 3字幕与自身音频是否同步:
- 若原视频中字幕就不同步:问题出在源文件,需手动校正字幕时间戳
- 若原视频同步:说明提取或合并环节导致时间戳丢失,继续下一步
3. 优化字幕提取命令
去掉可能干扰时间戳的-muxdelay 0参数,重新提取字幕:
ffmpeg -i s01e01_en.mkv -map 0:3 -c copy s01e01_en_sub_fix.sup
4. 简化合并流程,减少中间环节
直接一步完成音轨+字幕的合并,避免多次拆分导致的时间戳偏差:
ffmpeg -i s01e01_ja.mkv -i s01e01_en.mkv \ -map 0 \ -map 1:1 \ -map 1:3 \ -c copy \ s01e01_combined.mkv
此命令直接从英语版提取DTS-HD MA音轨(0:1)和主字幕(0:3),合并到日语版视频中,全程保留原始流的时间戳。
5. 检查视频时长一致性
用ffprobe对比日语版与英语版的精确时长,若存在差异,需基于音频时间轴对齐字幕:
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 s01e01_ja.mkv ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 s01e01_en.mkv
6. 合并时避免截断视频
合并字幕时去掉-shortest参数,防止因字幕时长较短截断视频导致的同步问题:
ffmpeg -i s01e01_en_ja.mkv -i s01e01_en_sub_fix.sup \ -map 0 \ -map 1:s \ -c copy \ s01e01_en_ja_subs_fix.mkv
内容的提问来源于stack exchange,提问作者Diericx
相关产品推荐
相关产品推荐

