cBlog

Tips for you.

パラノイアのためのフレーム単位のTSカット編集ツールを作った

スポンサーリンク
※当ブログのAmazon、iTunes、サウンドハウス等のリンクはアフィリエイトを利用しています。

$ ./tscut.py

歴史

yaritakunai.hatenablog.com

MPEG TSファイルのカットをしたかったがいいソフトが無かったので自分でPythonスクリプトを書いた。ここで言ういいソフトというのは、

  • Macで使えて
  • ストリームもメタデータも何もいじらない

ソフトである。

要するに現状ただ切るだけのソフトである。

github.com

使い方は簡単にREADMEにもあるが、
ffplay -v quiet -vf "drawtext=fontsize=32:text='\''%{pts} %{pict_type}'\''" input.ts
等で所望シーンのタイムスタンプ[A, B)とピクチャタイプを確認して、
./tscut.py cut -t 188 --start A --end B input.ts output.ts

どこでも切れるがカット後の画像が乱れないよう、Iフレームの2個前のBフレームを端点にすることをおすすめする。

PTS(再生順)が
... B-1 B0 I1 B1 B2 P1 B3 B4 P2 B5 B6 P3 B7 B8 P4 B9 B10 I2 B11 B12 P5 ...
となっているとき、DTS(データ順)は
... I1 B-1 B0 P1 B1 B2 P2 B3 B4 P3 B5 B6 P4 B7 B8 I2 B9 B10 P5 B11 B12 ...
となっている。B-1の時間から切ると、データの並びを壊さずI1から出力することができる。同様にP4までで出力を切ると、データの並びを壊さずにB8まで出力できるからだ。(Pフレームまでならどこでもよいのだが、再連結を考えるとIフレームの直前で終わった方がよいと考えた。)この辺、間違っていたら教えてください。

将来的に追加したい機能は、

  1. ピクチャタイプの検出
  2. ドロップの検出
  3. ファイルの連結
  4. (同期ずれの検出)

です。4.に関しては、1パケット未満でドロップしているデータが手元に無いのでできるかわかりません。