動画ファイルのメタデータ3 -チャプター追加(XMedia Recode)-
動画ファイルのメタデータ4 -チャプター追加(FFmpeg)- の続き
Pythonスクリプト
動画ファイルのメタデータ4 -チャプター追加(FFmpeg)- の続き
関連記事
前記事で参考情報1に従って、FFmpegを使い動画ファイルにチャプターを付加(メタデータだけ付加して再エンコードなし)できた。ただ、参考情報1にはPythonスクリプトを使ってチャプター情報(テキストファイル)の作成を簡単にする方法が書いてあるのでやってみた。
基本真似しただけだが、参考情報1のWebがなくなった場合に備えてコードもコピーしておく。問題あったらコメントでご指摘ください。
基本真似しただけだが、参考情報1のWebがなくなった場合に備えてコードもコピーしておく。問題あったらコメントでご指摘ください。
ただし日本語タイトルに供えて、UTF-8の設定等を変更している
必要条件等(参考情報1に記載の内容+α)
- 'chapters.txt'(チャプターの設定ファイル)と'FFMETADATAFILE'(元の動画ファイルからメタデータを書き出したもの)(と動画ファイル)は同じフォルダにあること
(ファイル名もそのまま。Pythonスクリプトに埋め込まれている)
(ややこしので、Pythonのスクリプトと動画ファイル、'chapters.txt'、'FFMETADATAFILE'は同じフォルダに置く) - 1行に、H:MM:SS形式の時刻と(スペースを空けて)タイトルが記入されていること。
UTF-8形式 - 出力は、元のFFMETADATAFILEに追加される
- 元の動画にはチャプターがないこと
- It expects an final END chapter which is ignored, but provides the end point for the last real chapter.
(意味がよくわからないけどたぶん)最後の行のチャプターは無視されるが、実際のチャプター(最後から2行目のチャプター)の終了時間を提供するためにある
FFMETADATAFILE作成
ffmpeg -i INPUT.mp4 -f ffmetadata FFMETADATAFILE
できたファイル(FFMETADATAFILE)の中身は以下
;FFMETADATA1 major_brand=mp42 minor_version=0 compatible_brands=isommp42 encoder=Lavf61.7.100
チャプターデータ作成
以下のようなファイルを作成。参考情報1とちょっと違うけど、これがよさそう
00:00:00 00:01:24 タイトル1 00:04:32 タイトル2 00:42:15 dummy
* 00:00:00はタイトルなしだが、00:00:00の後ろにスペースあり。スクリプトの正規表現のマッチングのため必要
* 最後の行は、動画の長さ時間。タイトル2のチャプターの終わりの時刻を記載するためのもので、dummyというタイトルは記入されない
参考情報1から以下を修正
・UTF-8を指定(日本語対応のため)
・時間が2桁であった場合に対応(10時間以上の動画はないと思うけど)
・ファイル名は"FFmpegChapter.py"にした
import re chapters = list() with open('chapters.txt', 'r', encoding='utf-8') as f: for line in f: print(line) x = re.match(r"(\d{1,2}):(\d{2}):(\d{2}) (.*)", line) hrs = int(x.group(1)) mins = int(x.group(2)) secs = int(x.group(3)) title = x.group(4) minutes = (hrs * 60) + mins seconds = secs + (minutes * 60) timestamp = (seconds * 1000) chap = { "title": title, "startTime": timestamp } chapters.append(chap) text = "" for i in range(len(chapters)-1): chap = chapters[i] title = chap['title'] start = chap['startTime'] end = chapters[i+1]['startTime']-1 text += f""" [CHAPTER] TIMEBASE=1/1000 START={start} END={end} title={title} """ with open("FFMETADATAFILE", "a", encoding='utf-8') as myfile: myfile.write(text)
Pythonスクリプトを実行して、チャプターを追加したFFMETADATAFILEを作成
python FFmpegChapter.py
*スクリプト、動画ファイル、'chapters.txt'、'FFMETADATAFILE'は同じフォルダに置いて実行する。
できたファイル(FFMETADATAFILE)の中身は以下
;FFMETADATA1 major_brand=mp42 minor_version=0 compatible_brands=isommp42 encoder=Lavf61.7.100 [CHAPTER] TIMEBASE=1/1000 START=0 END=83999 title= [CHAPTER] TIMEBASE=1/1000 START=84000 END=271999 title=タイトル1 [CHAPTER] TIMEBASE=1/1000 START=272000 END=2534999 title=タイトル2
FFmpegで動画ファイルにメタデータ(FFMETADATAFILE)を追加
ffmpeg -i INPUT.mp4 -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT.mp4
結果確認
- ffmpegでメタデータ書き出し
ffmpeg -i OUTPUT.mp4 -f ffmetadata FFMETADATAFILE_OUTPUT
できたファイルの中身は以下
;FFMETADATA1 major_brand=isom minor_version=512 compatible_brands=isomiso2avc1mp41 encoder=Lavf61.7.100 [CHAPTER] TIMEBASE=1/1000 START=0 END=84000 title= [CHAPTER] TIMEBASE=1/1000 START=84000 END=272000 title=タイトル1 [CHAPTER] TIMEBASE=1/1000 START=272000 END=2534999 title=タイトル2- MPC-BEのプロパティー確認
確かにチャプターが付加できている。
最後に実際に再生して確認する。

0 件のコメント:
コメントを投稿