†ぽんこつビデオ工房†
作成開始日 2021.06.09
最終更新日 2021.06.09
[CM1|本編Aパート|CM2|本編Bパート|CM3]
という構造のファイルを考える。このファイルをAvidemuxで開いて、本編AおよびBパート部分を切り取って無変換(COPY)で保存すれば良い。ただし、前述のIフレーム問題があるので;
  [CMカス|本編Aパート]
  [CMカス|本編Bパート]
のようになる。ここで「CMカス」は0.5秒以下の長さである(場合によっては0.5秒よりも少し長いこともあるが)。そこで、ffmpegで視聴用ファイルを作成するときに、「-ss」オプションを指定して、各パートの本編の先頭位置からエンコードし、最後にエンコードしたファイルをバインドすればよい。
@mpeg(VRO/VOB)ファイルをmkvに変換する(時間情報のトリム)
AmkvファイルをAvidemuxで開く
Bパートごとに直前のIフレームでファイルを切り出して無変換で保存する
 出力コンテナはaviを推奨(音声を無変換で保存するため)
 ファイル名はパートごとに「03a.avi」「03b.avi」「03c.avi」のように
 末尾に「a,b,c…」を付けてパートを区別する
C保存した各パートのファイルを再度Avidemuxで開いて、本編先頭位置を確認する。
D本編先頭位置をミリ秒単位にして、ファイル名に付け加える
 例)Aパートの本編が「0.266秒」から始まっていれば:03a-266.avi
E全てのパートのファイル名に先頭位置情報を付け加えたら、以下のバッチを実行
【注意】先頭位置までは3フレーム(100ms)以上必要。これより短いと誤差が発生する。その場合は、もう一つ前のIフレームでカットすること。
以上で、CMが奇麗にカットされたh.264/mp4ファイルが作成される。原盤はファイル名と同名のサブディレクトリ内に移動する(ファイル名が「03x-xxx.avi」であればサブディレクトリ名は「03」となる)。
@echo off
setlocal enabledelayedexpansion
@del nn.lst 2> nul
for %%f in (*.avi) do (
set finp=%%f
echo ***** inp : !finp!
for /f "usebackq tokens=1-3 delims=-." %%a in ('!finp!') do (
set body=%%a
if not "%%c" == "" (set ss=%%b) else (set ss=0)
)
set fout=!body!.mp4
echo ***** out : !fout! !ss!
echo file !fout! >> nn.lst
if "!ss!" == "0" (ffmpeg -i !finp! !opt! !fout!) ^
else (echo @@@@@ ffmpeg -ss 0.!ss! -i !finp! !opt! !fout!
ffmpeg -ss 0.!ss! -i !finp! !opt! !fout!)
)
set out=!finp:~0,2!.mp4
ffmpeg -f concat -i nn.lst -c copy !out!
set gdir=!finp:~0,2!
md !gdir!
echo *** make dir : !gdir! ***
move *.avi !gdir!
echo 
exit /b
endlocal