自動CMカットとエンコードを行います。
必要
join_logo_scp
自動CMカットソフトです。
こちらの記事を参考に導入してください。
FFmpeg
ダウンロードページからffmpeg-git-full.zipをダウンロードします。
解凍して「bin」フォルダにあるffmpeg.exeをEpgTimer.exeと同じフォルダに入れます。
バッチファイル
拡張子を.batにして保存して、EpgTimer.exeと同じフォルダに入れます。
jlse_bat.batがあるフォルダのパスを指定してください。
@echo off rem jlse_bat.batがあるフォルダのパス(""を付けない、\を付ける) set jlse_dir=C:\join_logo_scp\ rem 自動CMカットの開始 call "%jlse_dir%jlse_bat.bat" "$FilePath$" rem エンコードの開始 ffmpeg.exe -i "%jlse_dir%result\$FileName$\in_cutcm_logo.avs" -vf bwdif=1 -c:v libx264 -preset medium -crf 23 -aspect 16:9 -b:a 192k "$FolderPath$\$FileName$.mp4" rem 一時ファイルの削除 rd /s /q "%jlse_dir%result\$FileName$" del "$FilePath$.lwi"
使い方
予約登録画面で「録画後実行bat」にバッチファイルを指定します。
出力先はTSファイルと同じフォルダです。
プリセットの「変更」をクリックすれば、バッチファイルを毎回指定する手間が省けます。
解説
-i "%jlse_dir%result\$FileName$\in_cutcm_logo.avs"
in_cutcm_logo.avsを入力ファイルに指定しています。
ロゴ除去しない場合はin_cutcm.avsに書き換えてください。
-vf bwdif=1
インターレース解除です。
1で60fps出力、0で30fps出力です。
-c:v libx264
エンコーダーの指定です。
libx265にすると遅くなりますが、高圧縮になります。
-preset medium
画質と速度のバランスです。10種類あります。
ultrafast
superfast
veryfast
faster
fast
medium
slow
slower
veryslow
placebo
上に行くほど低画質で高速に、下に行くほど高画質で低速になります。
デフォルトはmediumです。
-crf 23
画質と圧縮率のバランスです。範囲は0~51です。
値が小さいほど高画質で低圧縮に、大きいほど低画質で高圧縮になります。
libx264のデフォルトは23です。
libx265のデフォルトは28です。
-aspect 16:9
アスペクト比の指定です。
-b:a 192k
音声ビットレートの指定です。
rd /s /q "%jlse_dir%result\$FileName$"
「result」フォルダに出力されるファイルを削除しています。
必要なら消してください。
del "$FilePath$.lwi"
LWLibavVideoSourceが生成するインデックスファイルを削除しています。
カスタマイズ
逆テレシネ
映画やアニメにおすすめです。
インターレース解除の部分を書き換えます。
-vf pullup -r 24000/1001
リサイズ
-s 1280x720
1280×720にリサイズされます。
マージンの指定
指定したマージン以上録画予定がないときにバッチファイルを実行します。
xtne6f版EDCBで追加された拡張命令を使います。
@echo offの下に書きます。
rem _EDCBX_BATMARGIN_=10
単位は分なので、この場合10分以上録画予定がないときに実行されます。
TSファイルを削除
バッチファイルの最後に書きます。
del "$FilePath$"
ただ自動CMカットは完璧ではないので、エンコード結果を確認してから削除するのがおすすめです。
コメント
なぜか録画後自動で実行されません
助けてください
バッチファイルはカスタマイズせずにそのまま使っていますか?
あ、すみません
いろいろ試していたら実行されるようになりました
了解です。
質問させていただきます。
join_logo_scpは導入済みで、別記事「EDCBで録画後に自動CMカット」内にある下記記述では正常に動作します。
@echo off
rem jlse_bat.batのパス(””を付ける)
set jlse_bat=”C:\join_logo_scp\jlse_bat.bat”
call %jlse_bat% “$FilePath$”
ffmpegも導入済みで、別記事「EDCBで録画後にFFmpegでエンコード」内にある下記記述では正常に動作します。
ffmpeg.exe -i “$FilePath$” -vf bwdif=1 -c:v libx264 -preset medium -crf 23 -c:a copy -bsf:a aac_adtstoasc “$FolderPath$\$FileName$.mp4”
しかし、本記事のようなCMカットとエンコードを組み合わせたバッチだと、CMカットの処理すら実行されなくなります。ディレクトリは見本と同じ構成なので、特に書き換えずにできるはずなんですが…。
どのようにしたらよいでしょうか?
FFmpegは32bitでしょうか?
AviSynth+なら64bitも使えますが、通常のAviSynthは32bitしか使えません。
あとCMカットすらできないというのが気になるので、以下のようにCMカットのみのバッチファイルで試してみてください。
「EDCBで録画後に自動CMカット」の記事とは微妙に違うので注意してください。
ご返信ありがとうございます。ffmpegは32bitを使用しています。
また、記述いただいたバッチでは処理されませんでした。「EDCBで録画後に自動CMカット」の記事の記述は実行されて、こちらは実行されない理由がわかりません…。
jlse_bat.batがあるフォルダのパスにスペースや日本語が含まれていませんか?
C:\join_logo_scpに置いてあるので半角スペースは含まれていないかと思います。
ちなみにバッチファイルの文字コードはUTF-8で問題ないでしょうか?
Shift-JISがいいです。
あとは3箇所にある %jlse_dir% を普通のフォルダパスに書き換えれば確実に動くと思います。
"%jlse_dir%jlse_bat.bat"
を"C:\join_logo_scp\jlse_bat.bat"
にするなどできました!文字コードが原因だったようです。UTF-8からShift-JISに変換したところ、問題までエンコードいきました。ご指摘いただいた代入の部分はそのままで大丈夫でした。
ご丁寧にご対応いただきましてありがとうございました!大変助かりました!!
解決してよかったです。