TV番組のエンコード with mencoder
FreeBSD環境で、TV番組を録画してから、手動でCMカットして、つないでエンコードして一つのaviファイルを作るまでの道のりです。たぶんかなり我流です。基本的にmencoderの世話になります。
■ 必要なソフト
- xawtv
- xawtvそのものは使わないのですが、付属のプログラム"streamer"を使います。
- mplayer
- 付属のエンコーダ"mencoder"を使います。(mplayer本体も一応使いますが。)
- transcode
- 付属のavi連結ツール"avimerge"を使います。
■ 録画
実は、VHSなんです(ぉぃ)。
■ キャプチャ
streamerを使います。
# 30分の場合 (1800秒) streamer -t 0:1800 -s 640x480 -r 29.97 -o output.avi -f mjpeg -F stereo
■ 手動CMカット
カットポイント探索
mplayer -idx -speed 0.5 output.avi
速度半分のスロー再生(speed 0.5)です。mjpegはそのままではカーソルキーによるサーチが効かないので、-idxオプションをつけてインデックスを生成しています。
カーソルキーでムービー全体を飛び回りつつ、カットする地点が何秒なのかをさぐります。切り替わる地点を分かりやすくするため、スロー再生にしています。
「今何秒地点なのか」は、コンソールに出ています。
A: 34.5 V: 34.5 A-V:0.001 ct: 0.029 ...(略) # これは34.5秒地点
…うーん、もっと楽にできないんでしょうか。
切り出し
CMを除いた本編を、ファイルから切り出します。
- 8.7秒目〜217.5秒目(208.8秒間)
- 367.8秒目〜923.8秒目(555.8秒間)
- 1043.9秒目〜1737.0秒目(692.9秒間)
だったとしたら、次のようにします。
mencoder output.avi -idx -ss 8.7 -o output_a.avi -ovc copy -oac copy -endpos 208.8 mencoder output.avi -idx -ss 367.8 -o output_b.avi -ovc copy -oac copy -endpos 555.8 mencoder output.avi -idx -ss 1043.9 -o output_c.avi -ovc copy -oac copy -endpos 692.9
チェック
切り出し工程で作成したファイルがうまく切り出せているかどうか、ここで各ファイルを視聴して確かめます。 目と耳と反射神経で求めた数値ゆえ微妙にずれていることがあって、CMの先頭の音声が0.2秒くらい混ざっていることがあるので…。
失敗していたら、長さを微妙に変えて切り出しなおしです。
ファイル統合
一つのファイルにまとめます。
avimerge -o output_m.avi -i output_a.avi output_b.avi output_c.avi
■ エンコード
mencoder -forceidx output_m.avi -o output_enc.avi \
-ovc lavc -lavcopts vcodec=mpeg4:vhq:v4mv:vqmin=2:vqmax=9:vbitrate=2000:keyint=300 \
-vf pp=md \
-oac mp3lame
- -lavcopts
- vhq : High Qualityモードでエンコード。画質がよくなる。
- v4mv : 4 motion vectorなるものを使うらしい。とりあえず指定してある。
- vqmin=2、vqmax=9 : 量子化の幅を指定。2と9という数字の根拠はよくわかっていない。
- vbitrate=2000 : ビットレート。
- keyint=300 : キーフレームの間隔。
- -vf pp=md : インターレース解除。Median Deinteracer Filterを使用。
ちなみに、もし比率が16:9なら、
-aspect 16:9
を加える必要があります。
できあがり
output_enc.aviが完成品です。
