使用 MPlayer 播放 MPEG-TS:当前时间戳和持续时间错误

使用 MPlayer 播放 MPEG-TS:当前时间戳和持续时间错误

最近我在 MPlayer 上播放了很多 MPEG-TS 视频。这些视频的来源不明,所以我不知道这些 TS 视频是用什么软件制作的。

问题是MPlayer 的 OSD 经常报告错误的时间戳和持续时间;这似乎是 MPEG-TS 特有的因为我从来没有遇到过(或者至少我不记得遇到过)MPEG-4 或 H.264 这样的问题。

例如,我从我的一个 TS 视频中剪切了以下示例(使用 FFmpeg):托管在 Google Drive 上的 sample.ts(无意侵犯版权)。ffprobe sample.ts印刷品

Input #0, mpegts, from 'sample.ts':
  Duration: 00:00:09.99, start: 1.423344, bitrate: 2827 kb/s
  Program 1
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #0:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv), 1920x1080 [SAR 1:1 DAR 16:9], max. 104857 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x101]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 123 kb/s

当我使用 MPlayer 播放此视频(未传递任何选项)时,osd 时间戳大约从 开始00:00:01,而报告的持续时间为00:03:40(请注意,该视频只有 10 秒长!)。

我也测试过这个问题ffplay(使用-vf showinfo),时间戳问题与 MPlayer 一致:第一帧显示的信息是

[Parsed_showinfo_0 @ 0x7fbd5242c620] n:0 pts:129003 pts_time:1.43337 pos:564 fmt:yuv420p sar:1/1 s:1920x1080 i:P iskey:1 type:I checksum:405DDE4C plane_checksum:[58C83B11 F8FAD95C B874C9D0]

请注意, 是 ,pts_time1.43337不是预期的0。因此我猜这个问题与 libav* 有关。 反正,至少ffplay报告了正确的持续时间,而 MPlayer 则报告了错误,这让我觉得这个场景更加令人费解。

我的问题是

  1. 这是一个已知问题/缺陷吗?

  2. 有没有什么办法可以解决这个问题?

这对我来说真的很烦人,因为我需要不时提取帧时间戳以进行 FFmpeg 查找。任何帮助都非常感谢。


供您参考,我的 MPlayer 是MPlayer UNKNOWN-4.2.1从 MacPorts 端口安装在 OS X 10.9.3 上的mplayer-devel @36449_4+osd

答案1

显然,我问这个问题是因为对 MPEG-TS 缺乏了解。这种行为是意料之中的,因为 MPEG-TS 就是这么设计的。根据 Etienne Buira 在MPlayer 用户邮件列表

据我所知,该格式无法可靠地知道它在流中的位置(设计为连续的,并且由于时间戳不能永远增长,因此需要循环它们)。

使用 FFmpeg 重新创建时间戳:

ffmpeg -i input.ts -c:a copy -c:v copy -fflags +genpts output.ts

相关内容