唐突にHandBrakeなるmp4エンコーダが使い勝手がよく、今更ながら気に入ったので、
色々いじっているところです。
特にコマンドラインから扱えるのがよく、今回はこれでバッチファイルなど組んでみましたので、
紹介しようと思います。
目的としては、ほぼ全自動で
①ディスクごとにフォルダを作成し、そこにディスクの内容を保存する
②DVD起動時のタイトルリストをサムネイルとして保存する(半自動)
③DVDに収録されてるトラックを1つずつmp4ファイルとして保存する
これを延々繰り返します。
必要なツールは下記のとおりです。
・HandBrake
https://handbrake.fr/
http://sourceforge.jp/projects/handbrake-jp/wiki/FrontPage
上は本家、下は日本語プロジェクトのページです。
本家ではメジャーリリースが出ていますので、こちらの方が使い勝手はいいのでは
ないでしょうか。
コマンドライン版(CLI)単体のほかGUI版もありますが、こちらにもコマンドライン版が
同梱されていますので、GUI版での入手をお勧めします。
・Media Player Classic - Home Cinema
http://sourceforge.jp/projects/sfnet_mpc-hc/
ディスクのIFOを呼び出すのに使います。
起動したら手動で「Alt+I」で画像を保存して終了してください。この際ファイル名は
特に決めずそのまま保存してください。バッチ内でフォルダ・ファイル名を揃えます。
ディスクのサムネイルが不要なら、起動しないようにバッチを修正して使ってください。
ただ、番組情報等を得るのはここぐらいしかありませんので、あった方が後々整理に
役立つと思います。
ちなみに、IFOの画面を自動でpngにしてくれるツールとかどこかにありませんか…。
・QuickEject
http://www.tsware.jp/download/qejct/
あってもなくても動作します。
ある場合はディスク全体のエンコードが終了したらディスクを自動でイジェクトします。
上記を用意できましたら、適当にインストールします。
バッチファイルは下記をnotepadなどに貼り付けて、拡張子を.batにして保存してください。
一応ウチではDVD2MP4.batなどとしています。
@echo offgoto junbi流れ①最初だけプロンプトを出し、ディスクをセットする。*diskdrv: ディスクのドライブ名 ※「:」付けない*savedrv: 保存フォルダのドライブ ※「:」付けない*savepath: 保存フォルダのパス ※指定したドライブ・パスの下位に年月日時分でフォルダ作成*loop: 1周目か2周目以降かの判定。初回のみMPC-HC.exe起動前に説明文を表示するが、2周目以降はいきなり起動させる。*makeyn: 保存フォルダが無かった場合、作成の賛否を問う②ディスク内の\VIDEO_TS\VIDEO_TS.IFOのタイムスタンプを取得し、保存フォルダを作成する。*vidtsifo: VIDEO_TS\VIDEO_TS.IFO*Dcode: YYMMDD-HHMM。ディスクごとのフォルダ名・ファイル名として機能する。*Dcodeopt: 適当。番組名を書くといいかも。無くてもいい。Dcodeの後ろに付く。③ディスク内の\VIDEO_TS\VIDEO_TS.IFOをMPC-HCで表示→手動でAlt+Iで画像をpngで保存(最初の保存時にpngを選択)(保存フォルダは%savepath%になるようにする)→手動で終了。*showIFO: MPC-HCに相当する実行ファイルのファイル名*showIFOpath: MPC-HCに相当する実行ファイルのパス*IFOsumext: IFOサムネイルを保存する拡張子④VOBを順次mp4にHandBrakeで変換し、設定パス以下の保存フォルダに保存していく。*encorder: HandBrakeに相当する実行ファイルのファイル名*encorderpath: HandBrakeに相当する実行ファイルのパス*encorderopt: HandBrakeに相当する実行ファイルのオプション⑥終了、先頭に戻る。:junbirem ドライブ・保存フォルダの設定set diskdrv=Qset savedrv=Eset savepath=DVDtoMP4set makeyn=set loop=set Dcodeopt=マジカルアニメ・バングミ=メイrem エンコーダのexeファイル名とパスの設定rem ファイル名は空白厳禁。パス空白はドライブルートになる。当バッチと同じフォルダに入れる場合はパスを「.」(半角ピリオド)にする。set encorder=HandbrakeCLI.exeset encorderpath=E:\ols\Handbrakerem set encorderpath=.set encorderopt=
rem ディスクリスト表示のexeファイル名とパスの設定rem ファイル名は空白厳禁。パス空白はドライブルートになる。当バッチと同じフォルダに入れる場合はパスを「.」(半角ピリオド)にする。set showIFO=mpc-hc.exeset showIFOpath=E:\ols\MPC-HCrem set showIFOpath=.set vidtsifo=VIDEO_TS\VIDEO_TS.IFOset IFOsumext=pngrem イジェクトツールのexeファイル名とパスの設定rem 使う場合以外はこのままで。空白厳禁。パス空白はドライブルートになる。当バッチと同じフォルダに入れる場合はパスを「.」(半角ピリオド)にする。set ej=QuickEject.exeset ejpath=E:\ols\qejctrem set ejpath=.rem 各ツールの所在を確認if not exist %encorderpath%\%encorder% goto err0if not exist %showIFOpath%\%showIFO% goto err0rem 保存先の有無確認と無い場合の作成を問う%savedrv%:cd \:fldrchkif exist %savepath% goto mainset /p makeyn="保存フォルダが見つかりませんでした。作成しますか?(y/n)"if %makeyn% == "n" goto err1mkdir %savepath%goto fldrchkrem ------------- Start of Main Routine:mainrem ディスク挿入判定if not exist %diskdrv%:\%vidtsifo% goto mainrem VTS_01_0.IFOからタイムスタンプを取得してフォルダを作るfor %%a in ( %diskdrv%:\%vidtsifo% ) do set fdate=%%~taset ftime=%fdate:~-5%set fdate=%fdate:~0,10%set ftime=%ftime::=%set fdate=%fdate:/=%set Dcode=%fdate%-%ftime%%Dcodeopt%%savedrv%:cd %savepath%if not exist "%Dcode%" md %Dcode%rem フォルダ作成に失敗したらエラーに飛ぶif not exist "%Dcode%" goto err2rem IFOファイルのスクショを取得if not "%loop%" == "" goto gThumbIFOecho 取り込むDVDを入れてください。echo %showIFO% を起動しますので起動後にAlt+Iで画像を %IFOsumext% 形式で保存してください。echo 何かキーを押すと %showIFO% が起動します...echo;echo;echo;set /p null="":gThumbIFO%showIFOpath%\%showIFO% %diskdrv%:\%vidtsifo%if errorlevel 1 goto err3move *.%IFOsumext% "%Dcode%\%Dcode%.%IFOsumext%"set loop=1rem HandBrakeCLI.exeでエンコード:HBfor /L %%n in ( 1, 1, 9 ) do if exist %diskdrv%:\VIDEO_TS\VTS_0%%n_0.IFO %encorderpath%\%encorder% -i "%diskdrv%:\\" -t %%n -o "%Dcode%\%Dcode%-0%%n.mp4" -markers="%Dcode%\%Dcode%-0%%n.csv" %encorderopt%if not exist %diskdrv%:\VIDEO_TS\VTS_10_1.VOB goto ejfor /L %%n in ( 10, 1, 99 ) do if exist %diskdrv%:\VIDEO_TS\VTS_%%n_0.IFO %encorderpath%\%encorder% -i "%diskdrv%:\\" -t %%n -o "%Dcode%\%Dcode%-%%n.mp4" -markers="%Dcode%\%Dcode%-%%n.csv" %encorderopt%:ejrem QuickEjectがあればドライブをイジェクトif not exist %ejpath%\%ej% echo ディスクを入れ替えて、何かキーを押してください...if exist %ejpath%\%ej% echo ディスクを入れ替えてください...echo;echo;echo;if not exist %ejpath%\%ej% set /p null=""if exist %ejpath%\%ej% %ejpath%\%ej% %diskdrv%goto mainrem ------------- End of Main Routinerem エラーメッセージ:err0if not exist %encorderpath%\%encorder% echo "err0:%encorderpath% の %encorder% が見つかりませんでした。"if not exist %showIFOpath%\%showIFO% echo "err0:%showIFOpath% の %showIFO% が見つかりませんでした。"goto end:err1echo "err1:保存フォルダ %savedrv%:\%savepath% が見つからなかったため、終了します。"goto end:err2echo err2:ディスクの保存フォルダ %savedrv%:\%savepath%\%Dcode% を作成できなかったため、終了します。goto end:err3echo err3:%showIFO% が異常終了したため、バッチを終了します。rem goto end:endpause
なお、本バッチファイルの使用に伴う損害等は負いません。
責任は使用されるご自身となります。
改変・転載などはご自由にどうぞ。
1枚のエンコードに時間がかかる場合は、サムネイルを作成せずに、ISOイメージを作成して、
それをバッチで処理していく方が手間がかからないかもしれません。
また応用として、番組ごとに開始・終了時間をオプションでセットさせれば、前後のCMカットを
自動でやってくれます。
その辺りはHandBrakeの使用法を検索して見つけてください。
またオプションは、一度GUI版で最適なパラメータを見つけてから、ログファイルにあるオプションを
こちらのバッチに記載する方がいいと思います。
貴方のライブラリの整理の一助になれば幸いです。