自動CMカット処理の結果を手がかりにして高速にCMカットを行います。
ついでにチャプター情報も生成する事で本編のパート毎に移動可能にします。
人間が行う作業はlogoGuilloの出力結果をAviUtlで確認し、ずれている場合に修正するだけです。
30分番組10本の修正作業に要した時間を計測してみたところ、約24sec/話でした。
エンコード自体はAvisynthで行う事を前提にしていますが、動画を読み込む際に音声も読み込めばAviUtlでのエンコードにも応用できます。
大まかなフローを先に書きます。
1.BATでの自動処理A
- logoGuilloで.keyframe形式でCMカット結果(仮CMカットファイル)を出力
2.手動作業
- logoGuilloAUP.aufを導入したAviUtlで動画を開く
- 本編の出入りのフレームがマークされる
- マークフレームに移動し、正しい位置をキーフレーム指定
- キーフレームリストを書きだし(本CMカットファイル)
3.BATでの自動処理B
- 書き出したキーフレームリストからTrimコマンドとチャプターを生成
- エンコードしてチャプター埋め込み
0.必要なものを導入する
- logoGuillo (+動作に必要な環境一式)
- atf02 (logoGuilloに同梱)
- logoGuilloAUP.auf (logoGuilloに同梱)
- AviUtl(「フレーム番号の表示を1からにする」のチェックを外す)
- ジャンプウィンドウプラグイン (aviutl_jump_210.lzh)
- mp4chaps.exe
- Javaランタイム (JRE, atf02の動作に必要)
1.仮CMカットファイルの生成(自動)
1-1. m2v+aacを用意
m2vとaacを用意します。
1-2.GOPリスト生成
m2v.vfp用のGOPリストをMPEG-2 VIDEO VFAPI Plug-In同梱のmme.exeで生成します。
コマンド例
mme.exe -g -q "video.m2v"
1-3.logoGuilloで自動CMカット
導入マニュアルと同様な方法で.keyframe形式でCMカット結果を出力します。
その際、元のファイル名が"video.m2v"なら、出力ファイル名は"video.m2v.txt"とします。
以後、このファイルを仮CMカットファイルと呼びます。
2.確認作業と本CMカットファイルの出力(手動)
作業の内容自体は私の手動CMカットの方法とほぼ同じです。
AviUtlの動作とキーの設定は AviUtlで手動CMカットした結果をAvisynth用のTrimコマンドにする方法 を参考にして下さい。
2-1.AviUtlで動画を開く
AviUtlのメニューで
「表示」>「logoGuillo連携を有効にする」
のチェックを有効にした状態で"video.m2v"を開きます。
自動的に仮CMカットファイル("video.m2v.txt")が読み込まれ、本編の出入りのフレームがマークフレームに指定されます。
2-2.キーフレームを打っていく
ジャンプウィンドウの左上のボタン
「前の[mark],[key]フレームに移動」
「次の[mark],[key]フレームに移動」
を押してマークフレームに移動します。
マークフレームがCMと本編の境界(の本編側)か確認します。
正しい位置ならそのまま、間違っていたら正しいフレームに移動し、AviUtlで「現在のフレームをキーフレームにする」を実行します。
この操作をショートカットキーに指定しておくと便利です。
*CMから本編に入った直後のフレーム、本編からCMに移る直前のフレーム、の順に番組の最後まで打っていきます。
*いきなり本編から始まる場合は一番最初のフレームをキーフレームにします。
*本編で終る場合は一番最後のフレームをキーフレームに指定します。
2-3.本CMカットファイルを出力
AviUtlのメニューで
「ファイル」>「エクスポート」>「キーフレームリスト」
を選び、キーフレームのリストを出力します。
ファイル名はデフォルトの"video.txt"とします。
以後、このファイルを本CMカットファイルと呼びます。
3.エンコードとチャプター処理(自動)
3-1.atf02でTrimコマンドとチャプターを生成
BAT内の処理で以下のコマンドを実行します。
for /f "usebackq tokens=*" %%i in (`java -cp %ATF_PATH% atf02 "%FLIST_PATH%" -chap "%CHAP_PATH%" -offset -1.0 `) do @set AVS_TRIM=%%i
各パスはフルパスで以下の内容を指定しておきます。
"ATF_PATH" atf02が置いてあるディレクトリ
"CHAP_PATH" チャプターの出力先("video.chapters.txt")
"FLIST_PATH" AviUtlで書き出した本CMカットファイル("video.txt")のパス
実行すると、変数"AVS_TRIM"にAvisynth用のTrimコマンドが代入されるのでそのままAVSファイルに書き込んでエンコードします。
また、チャプターファイルが"video.chapters.txt"に出力されます。-offset -1.0としているので、理想値より1.0秒手前にチャプターが打たれます。
確実にチャプター位置にシークしたい場合はx264のオプションでkeyintやscenecutを変更して積極的にキーフレーム判定されるようにすると良いと思います。
3-2.チャプターの埋め込み
エンコードしたmp4ファイルにチャプターを埋め込みます。
mp4chaps.exe -i "video.mp4"
を実行すると"video.mp4"にチャプター"video.chapters.txt"が埋め込まれます。
*MP4Boxでチャプターを埋め込むよりも対応プレーヤーが多い為、mp4chaps.exeを使用しています。
*Media Player Classic系のプレーヤーでチャプター付mp4を再生した際にチャプター名が画面中央下に常時表示されてしまう場合は
Play>Subtitles>Enable
のチェックを外せば消えます。
以上で半自動CMカットの方法の紹介は終わりです。
余裕があればもう少し分かりやすく書き直したいと思います。
関連記事
エンコード関連記事一覧