私は私だけのみかた

しかし真に利己的に行動することは尋常の知性では難しい。

mAgicAnime.NETでコマンドラインエンコーダを使おう

はじめに

mAgicAnime.NETはとても便利です。
一度番組を登録すると毎週きっちり録画してくれて、番組名とサブタイトルを取得してくれて、保存先フォルダに転送するとそのファイル名がちゃんとついてくれる。
ただ、ドキュメントがあまり充実していなくて「さわりゃあわかるでしょ」という感じ。mpeg2録画してどんどん小さくエンコードしたいのですが、できるとは書いてあるがやり方がみつからない。
で、ちょっと触ってたら試行錯誤してできるようになったので(というかもう半年運用してますが)ここに書いておきます。

mAgicAnime.NETを入手する

http://members2.jcom.home.ne.jp/kurusugawa/mAgicAnime/
これがなきゃ始まりませんな。その前にIO-DATAの録画ボードを買わないといけないけど。

コマンドラインエンコーダを入手する

好みで。今回の例では携帯動画変換君ffmpegをc:\3gpconvに設置して使います。
http://www.nurs.or.jp/~calcium/3gpp/
なぜ直接ffmpegを入手しないかというと、豊富に用意された設定ファイル群を流用するためです。既にffmpeg使いオプションなんか完璧ですという方は好きに最新版を使ってやってください。

携帯動画変換君の設定を流用してバッチファイルを作る

まあ直接やってもいいんですが融通がきかないし、インターフェースが激しく重いので細かいオプション変更時に泣けます。
私はvga.batとwide.batという二つのバッチファイルを用意しています。
とりあえず今の私の設定はこんな感じ。ちょうてきとーです。
vga.batの場合

start /LOW /B /WAIT c:\3gpconv\cores\ffmpeg.exe -y -i %1 -title %3 -bitexact -vcodec h264 -deinterlace -coder 1 -bufsize 128 -g 250 -s 640x480 -r 29.97 -b 1024 -mbd 2 -4mv -trell -aic -passlogfile %2 -pass 1 -acodec aac -ac 2 -ar 48000 -ab 64 -f mp4 %2
start /LOW /B /WAIT c:\3gpconv\cores\ffmpeg.exe -y -i %1 -title %3 -bitexact -vcodec h264 -deinterlace -coder 1 -bufsize 128 -g 250 -s 640x480 -r 29.97 -b 1024 -mbd 2 -4mv -trell -aic -passlogfile %2 -pass 2 -acodec aac -ac 2 -ar 48000 -ab 64 -f mp4 %2

長いけど2行ね。
wide.batの場合

start /LOW /B /WAIT c:\3gpconv\cores\ffmpeg.exe -y -i %1 -title %3 -bitexact -vcodec h264 -deinterlace -coder 1 -bufsize 128 -g 250 -croptop 54 -cropbottom 58 -cropleft 8 -cropright 6 -s 640x368 -r 29.97 -b 768 -mbd 2 -4mv -trell -aic -passlogfile %2 -pass 1 -acodec aac -ac 2 -ar 48000 -ab 64 -f mp4 %2
start /LOW /B /WAIT c:\3gpconv\cores\ffmpeg.exe -y -i %1 -title %3 -bitexact -vcodec h264 -deinterlace -coder 1 -bufsize 128 -g 250 -croptop 54 -cropbottom 58 -cropleft 8 -cropright 6 -s 640x368 -r 29.97 -b 768 -mbd 2 -4mv -trell -aic -passlogfile %2 -pass 2 -acodec aac -ac 2 -ar 48000 -ab 64 -f mp4 %2

なぜか2パスの上にログファイル消してない…!2パスは効いてるのか俺!確かめてないぞ俺!しかも -threads 2 も追加してないからシングルコアCPUなのがばればれだぞ俺!
普通にPC向けh.264にする場合、Transcodeing_PC_H264.ini標準の設定は

Command0=""<%AppPath%>\cores\ffmpeg" -y -maxfr 30 -i "<%InputFile%>" -title "<%Title%>" -timestamp "<%TimeStamp%>" -bitexact -vcodec h264 -coder 1 -bufsize 128 -g 250 -s 640x480 -b 1500 -acodec aac -ac 2 -ar 48000 -ab 64 -f mp4 "<%OutputFile%>.MP4""

となっています。(長いけど一行)これをまずbatにコピペします。
次に、引数を変更します。

  • "<%InputFile%>" を %1 に
  • "<%Title%>" を %3 に
  • -timestamp "<%TimeStamp%>" を消去
  • 末尾の"<%OutputFile%>.MP4""を %2 に

携帯動画変換君からもらえるデータの代わりにmAgicAnime.NETから投入できるデータに変更するわけですね。
その次に頭のCommand0=""<%AppPath%>\cores\ffmpeg" をffmpegのフルパスに変更して終了…なのですが、これだとmAgicAnime.NETの実行時優先度と同じ優先度で動いてしまいます。100%全開のエンコードによってPCがハングアップしたかのようなグダグダな操作感を楽しめることでしょう。
それを防止するため、先頭に start /LOW /B /WAIT を追加します。実行時優先度を下げるだけにしないのは、mAgicAnime.NETのバッチエンコードキューが「自分が実行したエンコードプログラムの終了を監視して次のエンコードを開始させる」仕様なのが理由です。そうしないとまとめてエンコードキューに追加した時にその数だけffmpegが同時起動するよ。

mAgicAnimeにバッチファイルを登録する

これがわかりにくかった。まず、設定が出てこない。
ファイル→オプションから設定画面を出し、再エンコードタブを選択し、「利用可能なエンコーダ」を「コマンドライン」にして「設定」ボタンをクリック。…何も起こらない。こ、細かい設定はどこでするのよ?(ここで1日目挫折)
その設定の後に個別の番組のプロパティを出してください。

エンコードタブでチェックボックスを入れると、画面が変わります。

プロファイルには何もないと思いますので、「新規作成」を選んでください。やっと肝心の設定画面が出たッ!

  • プロファイル名を入力。
  • エンコーダ実行ファイルパスでバッチファイルを選択。
  • エンコード後の拡張子に適切なものを入力。(今回はmp4)

コマンドライン引数に、"{0}" "{1}" "{2}_{4}"を入力。これ重要です。スペースの位置まで重要です。入力ファイル名、出力ファイル名、タイトル_サブタイトルの3つをエンコーダに与え、バッチファイル側で上記の%1,%2,%3として受け取っているわけですね。

  • 一番下のコンボボックスで好きな方を選択。今回は「出力ファイル名には保存ファイル名を渡す」を選択。


これでOKを押して閉じればプロファイル欄で今作ったプロファイルが選択できるようになります。選択して下のOKを押してください。
今設定対称にしていた番組の録画ファイル欄を右クリックして「エンコードキューに入れる」を実行するとエンコードが始まります。
それぞれの録画番組のプロパティを開けて同様に再エンコードの設定を済ませましょう。作ったプロファイルは全ての番組で共通なので、2度目からはプロファイルを選択するだけです。
番組によって高圧縮だったりiPod用だったりの設定が個別に必要な人はそれぞれ別のものを作って設定しましょう。私は上下カットする設定とカットしない設定を二つ作って使い分けています。
ポータブル機器とPC保存用が必要だというような場合は、一つのプロファイルの中では作り分けられないですからバッチファイルの中に複数行のエンコードを書き、連続で作ってしまった方が良いでしょうね。

まとめ