MP4のチャプター名。

MP4ファイルにあとからチャプターを打つ。 では単純に連番でチャプターを打っていました。スクリプトの方もそれしか考えておらず単純にチャプター名は連番にしていたのですが、TMPEGEnc MPEG Smart Renderer 5では(というかおそらく他の編集ソフトでも)チャプターに名前をつけることができるのがわかりました。

たとえばあるビデオでは、導入部 - オープニングテーマ - サブタイトル - Aパート - アイキャッチ - Bパート - エンディングテーマ - 次回予告 などというふうに別れているとき、その説明部分まで含めてチャプターを打つことができるようです。

ちょっと手元のソースで試しにやってみたら、次のような感じになりました。

チャプター名がない場合:
0 300 2100

チャプター名がある場合:
0 300 #Name=オープニングテーマ 2100 #Name=Aパート

そしてそれをエンコード時に合成してやると…なんとVLC Media Playerでは文字化けしてしまいました。一方、MPC BEではちゃんと読めます。
文字エンコーディングの問題かもしれないと思い、チャプターファイルをUTF-8に変えてから再度合成してみます。

今度はVLCでもMPC BEでもちゃんとチャプターリストが日本語で表示されました。どうやらチャプター名はUTF-8でつければいいようです。

ちなみに、手元にあるプレイヤーソフトのCyberlink PowerDVD 17ではこのMP4のチャプターは扱えないらしいことがわかりました。さらにはChromeCastでもチャプタージャンプはできないようです。もしかしてチャプターというのは規格化されていないのでしょうか。

不思議に思ってPowerDVDで市販BDを再生してみると、ちゃんとチャプタージャンプできます。PowerDVDからChromeCastに再生させたらテレビのリモコンからチャプタージャンプできるのか試そうと思ったら、どうやら市販BDはChromeCastへ飛ばせないようです。DLNA(DTCP-IP)とかAACSとかの関係なんでしょうか。

余談ですが、ついでに調べてみたらDLNAは2017年1月5日に解散しているようです。また "ChromeCast DTCP-IP" で検索しても、ピンとくるものはなさそうなので、やっぱりその関係でしょうか。

ともあれ、TMSR5でチャプターの keyframe ファイルを作成したら、それをUTF-8でチャプター名も入った chapter.txt ファイルに変換してやればVLCでもMPC BEでもチャプター名が扱えそうです。

ということで、以前に作ったmakechap.pyを改変中です。

一方で、mp4chapsというツールを見つけました。mp4v2というツール群に入っているそうです。バイナリもあるようですが、リポジトリから最新(といっても2015年のようですが)をダウンロードしてコンパイルするのがいいかと思います。

それからMP4のチャプターファイルについてというページでチャプターファイルの形式について触れられています。
00:00:00.000 チャプター名1
の形式と
CHAPTER01=00:00:00.000
CHAPTER01NAME=チャプター名1
の形式があるようです。

現在のスクリプトは後者の形式で出力するようにしていて、これでちゃんとチャプターが打てているのでこの方向で考えてみます。

0 件のコメント:

コメントを投稿

Windowsでシンボリックリンクを試してみる。

きっかけは、1つのファイルを別の名前で起動したら違う動きになるようなスクリプトを書く、でした。  busybox なんかでは、同じ実行形式ファイルの名前を、lsにすればlsと同じ、cpとすればcpと同じ動作をするようにしてますが、Pythonスクリプトでそれと同じように argv...