VHSデジタル化の闇

VHSをパソコンで見られる形式にしてほしいという感じで簡単に頼まれたものの、いろいろと試行錯誤が必要だった。 もう西暦2015年なのに。 次回以降自分が同じことをする際に一発でうまくいくよう、難しいところを書いておく。 ちなみに私はドがつくシロートなので、もし参考にする無謀な方がいたら十分注意してください。

挑戦1 VHSデッキ → SGI O2直結 (失敗)

(O2のvideopanelの様子)実はあまりビデオに詳しくない自分、とりあえず繋がれば良いのでは?ということで、手元にあって一番SD品質のビデオを扱うのに信頼性高そうなワークステーション、SGI O2にビデオデッキを直結する作戦を試した。

用意したもの

方法

そのままビデオデッキをSGI O2に直結。 頼まれたのは普通のVHSなので、75Ωの同軸で繋ぐより画質が良いということは無いが、Sビデオケーブルで繋いだ。

O2のmediarecorderで640x480, JPEG-A, 48 kHzに設定して録画ボタンをクリック!

失敗

キャプチャ中の映像がたまに固まるような?ということで調べると、videopanelVTRモードを切ると固まらなくはなった。 が、今度は画面が乱れ放題。 推測だが、同期信号が乱れすぎていて良く分からないことになっている模様。 仕方ないのでSビデオケーブルの代わりに75Ωのコンポジットビデオケーブル(黄色いやつ)にしたり、videopanelの設定を弄くったり、mediarecorderの代わりにコマンドラインのdmrecordを使ったりしたものの、状況は改善せず。 この方法ではダメだ。

ちなみに右のスクリーンショットではFilter Bytassにチェックが入っているが、実際にはFilter Bypassは画面がざらつく感じになるだけなので切っておく方が良かった。

挑戦2 VHSデッキ → DV変換箱 → iMovie (失敗)

まさかSGI O2でうまくいかないとは…と狼狽えてしまったが、とにかく変換しないといけないので、別の方法を考えた。 アナログ信号をIEEE1394に変換してくれるDV変換箱をもっているので、これをIEEE1394でパソコンに繋げてDVテープの要領でキャプチャすればうまくいくに違いない!と思ったのであった。 Canopus ADVC-100

用意したもの

顛末

iMovieの取り込みボタンとデッキの再生ボタンを同時に押す。 確かに取り込みはされている、が、なぜかファイルが細切れになっている… どうやら、同期信号のロックが外れる度に別ファイルにしているようですな。クソが。

でもいいや、iMovieで全部並べて書き出しちゃえば仕事終わりだもん、と思ったのだが、最終的にできたムービーファイルの数は1000超。 全部選んでタイムラインに並べたらiMovieが固まった。

ffmpegで結合するから気にしないもん、ということで、iMovieのライブラリから*.movを取り出して、連番に改名し、index.txt

file 0.mov
file 1.mov
file 2.mov
...

と順番を書き下し、ffmpeg

ffmpeg -f concat -i index.txt -vf 'yadif=0:0:0' -c:v libx264 -preset slower -crf 22 -pix_fmt yuv420p -c:a libfaac -b:a 96k -f mp4 output.mp4

とやって無事ムービーは繋がった、ように見えた。 でもなんだかffmpegから恐ろしい数の警告が出ているような…と気にしつつ、QuickTime Playerでmp4ファイルを再生!

映像はまあ仕方ないかな、稀にフレームが10秒近く重複されてるけど…という感じだが、音が完全な雑音になっている所がある。 細切れのムービーを繋いでいるのでどうもうまくいっていないみたい。 私としてはこの品質で仕事終わりという気分にはなれない代物だった。

挑戦3 VHS → miniDVテープ → iMovie (失敗)

そういえばこのVHSデッキ、DVテープにダビングする便利機能が付いているな、ということで、もしかしたらDVテープに一度ダビングすれば、そのテープを取り込むことで、それなりに見られる映像にデジタイズできるかも、という作戦。 Sony WV-DR9

用意したもの

うまくいかない

ビデオデッキWV-DR9でのダビングはボタンをいくつか押すだけで簡単にでき…ない。 書込禁止の爪が折られているVHSからはDVテープにダビングしてくれないらしい。 ありがとう著作権保護…ということで、ビニールテープで爪を復元すれば簡単にコピーできた (今回依頼を受けたテープは自作ビデオに字幕機でキャプションを入れる等したものなので、著作権的にはクリア。 もしかして字幕機のせいで同期信号がおかしかったのかな…)。 依頼を受けたテープは90分なのに対し、miniDVテープは60分のものしか手持ちが無いため、LPモードにてダビングした。

ビデオデッキのIEEE1394端子とパソコンを繋いで、iMovieで取り込みボタンをクリック! 今回はDVデッキなので勝手にモーターがまわり始める。 ボタンを同時に押す苦労は無い。

あれ、なぜかしょっちゅうフレームが落ちて、取り込み画面が黒くなる… VHSテープの状態が悪かったからなのか、DVテープの段階でいくつかのフレームが抜けているような感じを受けた。 ビデオデッキに直結したビデオモニタの映像はそんな風には見えないので、どうやら、本来やるべきフレーム落ちの際の補間 (というか直前フレームの繰り返し)をiMovieはやってくれていないみたいだ。 iMovieの取り込み画面がチラチラして体に悪そうな感じだ。 これじゃあダメだ。

挑戦4 VHS → miniDVテープ → SGI O2

まあ液晶ビデオモニタではそれなりに見られる絵が出てきてるので、このアナログ出力を拾ってやればいいでしょ、ということで、最終作戦だ。 Sony LMD-1410

用意したもの

見える、見えるぞ!!

挑戦3でminiDVテープにダビングする所まではやっているので、あとはアナログ出力(Sビデオ)をO2のビデオ入力に繋いで、コマンドラインでdmrecordを叩くだけだ! 事前にvideopanelVTR modeは切っておいた。 videoinで確認したところその方がスムーズに映っているように見えたので。

dmrecordは、

dmrecord -p video,device=mvp,comp=jpeg,engine=ice,quality=90 -p audio,channels=1 output.mov

として起動したが、1時間ちょっと記録した所で様子を見たら

Hit the Enter key to begin recording... 
Hit <ctrl>-c to stop recording...
VL: Resource temporarily unavailable.
vlDMBufferGetValid(video.server, video.path, video.drain, &buf) failed in file capture.c, line 754
audio queue = 83774 samples 83.8% full
Audio buffer overflow (can't write movie file fast enough).
Error capturing audio for frame 85275
Post-processing output file 'output.mov' ... 
Timing information:
Recording could not be done in real time.
85258 image frames were captured.
17 image frames replicated.

Warning: failed to capture 17 of 85275 image frames.

Compression information:
Average compressed frame size:   86699.6 bytes
Average compression ratio:       7.1 : 1
Bit rate achieved:               20787098.9 bits/sec

などと言って死んでいた。 それでも、元テープの品質を考えると、フレームのドロップ率はかなり低い。 ちなみに、理由は調べてないが、dmrecordでキャプチャしたファイルはQuickTimeでは開けなくて、ffmpegでは読める。 エラーメッセージのcan't write movie file fast enoughは嘘っぽい気がする。

エラーメッセージで検索するとO2はCBRの方がうまくいく [nekochan.net]という情報があったのでこちらを試す:

# dmrecord -p video,device=mvp,comp=jpeg,engine=ice,brate=30000000 -p audio,channels=1 output.mov

Hit the Enter key to begin recording... 
Hit <ctrl>-c to stop recording...
Recording was done in real time successfully.
Post-processing output file 'output.mov' ... 
Timing information:
164303 image frames = 5482.25 seconds of video captured.

Compression information:
Average compressed frame size:   125998.1 bytes
Average compression ratio:       5.7 : 1
Bit rate achieved:               30209299.6 bits/sec

というわけで、CBRで30 Mbpsに設定したところ、90分のビデオを1フレームも落とさずにキャプチャできた。 大成功だ。 キャプチャしたファイルは90分で20 GBytesで、DVと概ね同じサイズになった。

このファイルをO2からエンコードサーバーに移し、ffmpegでエンコードする。 なお、scpでコピーすると20 GBytesに7 時間という恐ろしい予想時間が表示されたため、ftpで送ることにした。 ftpなら大体1 時間で20 GBytesの転送ができた (O2は100 Mbps Fast Ethernetで、サーバー側は10 Gb Ethernet)。

ffmpeg -i output.mov -vf 'yadif=0:0:0' -c:v libx264 -preset slower -crf 22 -pix_fmt yuv420p -c:a libfaac -b:a 48k -f mp4 output.mp4

オーディオのビットレートが変に低く見えるのは、キャプチャの段階で32 kHzモノラルにしたのでそれに合わせている。 VHSだしこんなものだろう。

無事mp4ファイルが完成。 MacPro4,1のQuickTimeで再生を確認したところ、フレーム落ちで画面が黒くなったり固まったりは起きておらず、音も安定して再生されていることを確認できた。 mp4ファイルのサイズは1.1 GBytesだった。 成功!!

結論