我目前正在将视频数据从视频 DVD 转码为 x264 MP4 文件,但原始 MPEG-2 流似乎存在一些奇怪的问题。此视频 DVD 是使用 PVR 自制的数字电视录制 (DVB-S),随后刻录到标准 DVD-R。录制的节目在我的独立 DVD 播放器中完美播放。
检查过一个转码的 MP4 文件后,我注意到在某些点(无论我编码的原始视频的范围如何,总是相同的帧)视频中出现了奇怪的卡顿。一个帧冻结了大约一秒钟。帧数保持正确,因此不存在音频同步问题,只是大约 20 个帧被一个特定帧的重复帧替换。无论我使用什么软件,这种情况似乎都会发生。我尝试过使用原生 MPEG-2 解码的 Avidemux 2.6.3 或通过 Avisynth 2.6.0 提供帧,以及使用 MPEG-2 插件的 VirtualDub 1.9.11。这三种方法每次都会在相同位置引入相同数量的相同帧的重复帧。
检查源 VOB 时,我检查了流的这个特定部分,发现播放时也出现了轻微的卡顿(使用 Windows Media Player、VideoLAN、MPlayer 和 AviDemux 的内部预览进行了测试),但它是不是完全相同的冻结。它在流中发生的时间比在转码文件中发生的时间早大约一秒,并且冻结时间大约是转码文件中的一半(约 10 帧)。无论我是直接从 DVD-R 播放原始视频还是将 VOB 文件复制到硬盘后播放,都会发生这种情况,因此不是驱动器的问题。
根据一位朋友的建议,我将 VOB 解复用为基本 M2V 和 AC3 流,然后直接将两者重新复用为新的 MPEG-PS 文件。事实上,无论是直接播放重新复用的文件,还是从中生成的转码,卡顿现象都消失了。
所以,问题的症状已经解决,但我想知道为什么简单地对原始视频进行解复用和重新复用就足够了?在这个过程中是否重建了某种索引,解决了原始数据固有的问题?但是,为什么转码后的冻结不同,甚至跨不同的解码器和编码器;为什么我在独立的电视 DVD 播放器上播放时没有注意到冻结?