貧者のcomskip (3) - ffmpegのshowinfoがウソつきな件

無音検出とシーンチェンジをffmpegのフィルターでこなしてたんだが、showinfoフィルターのptsとpts_time、TBが整合しない例が出てきた。ffprobeやffmpegではTBは90Kと表示されている。

  Duration: 01:54:07.91, start: 52853.131111, bitrate: 15803 kb/s
  Program 151 
    Metadata:
      service_name    : ?BS?D+F|?1
      service_provider: ?|����D+F|
    Stream #0:0[0x140]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, bt709, top first), 1440x1080 [SAR 4:3 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x141]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 199 kb/s


で、showinfoの方は、

[silencedetect @ 0x33d4880] silence_start: 59698.4
[Parsed_showinfo_2 @ 0x3621600] n: 979 pts:10745785784 pts_time:59698.8 pos:1352
3154900 fmt:rgb24 sar:4/3 s:1440x1080 i:P iskey:0 type:P checksum:094E5428 plane
_checksum:[094E5428] mean:[138] stdev:[65.5]
[Parsed_showinfo_2 @ 0x3621600]   side data - pan/scan
[Parsed_showinfo_2 @ 0x3621600]   side data - stereoscopic information: type - 2D
[Parsed_showinfo_2 @ 0x3621600]   side data - unknown side data type 17 (6188 bytes)
[Parsed_showinfo_2 @ 0x3621600]   side data - unknown side data type 16 (8 bytes)
[Parsed_showinfo_2 @ 0x3621600]   side data - unknown side data type 12 (8 bytes)
[silencedetect @ 0x33d4880] silence_end: 59699.3 | silence_duration: 0.959667

となる。検算してみると、pts÷pts_time=TBNになるはずなんだが、

10745785784 ÷ 59698.8 = 180000.029883348


となり、倍の値が出てしまう。ptsが嘘なのか、TBが嘘なのか分からない。しょうが無いので、自分で計算することにした。ffmpegのログファイルを喰わせて、最後のshowinfoのptsとpts_timeで計算する。

TB=$(grep Parsed_showinfo "$TEMP" | grep checksum | tail -n 1 | sed -r 's/^.*pts:\s?(.*) pts_time:\s?([0-9.]*) .*$/\1 \2/g' | awk '{printf "%d", $1 / $2}')