0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ffmpegでVHSテープをデジタル化してみた

Posted at

実家の押し入れから昔のVHSテープが大量に出てきました。子どもの頃の録画や親のビデオ映像で、劣化も進んでおり放置すれば見られなくなりそう。業者に頼む方法もありますが、自分で処理を把握したいので、今回はオープンソースのffmpegを使ってデジタル化に挑戦しました。本記事はその試行錯誤の記録です。

VHSデジタル化を始める前に考えたこと

まず「入力の質」がすべてを決めると痛感しました。
どんなに後処理を頑張っても、最初のキャプチャが悪ければどうしようもない。いわゆる Garbage In, Garbage Out ですね。

そこで気をつけたのが以下の2点です。

  • S端子での接続
    黄色いコンポジット端子だと色がにじんだりモアレが出たりするので、なるべくS端子で取り込みました。デッキもキャプチャデバイスも対応していたのでこれは必須。

  • TBC(タイムベースコレクタ)の導入
    VHS特有の画面の揺れや歪みはTBCでかなり改善します。高価な外付け機材を用意するのは難しかったので、TBC機能が内蔵されているS-VHSデッキを中古で入手しました。

ffmpegでのキャプチャ

キャプチャ自体は意外とシンプルでした。自分の環境(macOS)では avfoundation を使いました。

ffmpeg -f avfoundation -list_devices true -i ""
ffmpeg -f avfoundation -i "0:0" -c:v utvideo -c:a pcm_s16le capture.mkv
  • utvideo という可逆圧縮コーデックを使うことで、ディスク容量は食うけど画質を落とさずに保存できます。
  • ここではあえてフィルタ処理は一切せず、「後でどうにでもできる素材」を残す方針にしました。

Linuxなら v4l2、Windowsなら dshow を指定する感じになります。

インターレース解除

取り込んだ映像を再生すると、動きのある部分で横縞が出ます。これがインターレース。ここからが本番でした。

ffmpegにはいくつかのデインターレースフィルタがあります。

  • yadif: 定番。軽くて速い。とりあえずの第一歩。
  • w3fdif: 斜め線のギザギザが減る。
  • bwdif: yadifより動きの検出がうまくて高品質。

実際に使ってみると、動きの多い場面では bwdif の方が安定して見えることが多かったです。

-vf "bwdif=parity=auto:deint=all"

「結局どれがベストか?」は映像の種類によって違うので、何本か試して目で判断するのが早いと思います。

ノイズと色調整

VHSの映像はどうしてもザラザラしているので、ノイズリダクションも試しました。

  • hqdn3d: 時間方向も考慮したノイズ除去。軽めでちょうどいい。
  • nlmeans: 強力だけど重い。長時間のテープにはちょっとつらい。

さらに、映像の端にトラッキングノイズが出ることが多いので crop で切り落とし。
色も若干薄いので eq で彩度を上げました。

-vf "bwdif,crop=iw-16:ih-16,hqdn3d,eq=saturation=1.1"

これを通すだけで「見やすさ」がかなり変わります。

エンコードと保存形式

最終的に残すファイルは H.264 か H.265 にしました。

  • H.264 (libx264) → 互換性が高く、再生環境を選ばない
  • H.265 (libx265) → サイズを抑えられるけど再生環境に注意

品質は -crf 18〜20 あたりにしました。-preset slow を使うと時間はかかるけど圧縮効率が良くなります。

バッチ処理で一気に変換

テープが10本以上あると、いちいち手動でコマンド打つのは無理。シェルスクリプトでまとめました。

#!/bin/bash
for f in ./captures/*.mkv
do
  fname=$(basename "$f" .mkv)
  ffmpeg -i "$f" \
    -vf "bwdif,crop=iw-16:ih-16,hqdn3d" \
    -c:v libx264 -crf 19 -preset slow -tune film \
    -c:a aac -b:a 256k \
    "./archives/${fname}.mp4"
done

これで一晩回しておけば一気に処理できます。ログを吐くようにしておくと失敗したファイルも追跡しやすいです。

上級者向けの補足

ここまで紹介した方法でも十分に見やすい映像になりますが、「より高品質に残したい」「後世にアーカイブとして残したい」という場合は以下も検討すると良いです。

  • QTGMC(高品質デインターレース)
    Avisynth や Vapoursynth を使う必要がありますが、現状もっとも高品質とされるデインターレースフィルタです。動きの滑らかさやシャープさが段違い。ただし処理はかなり重いです。

  • 可逆圧縮コーデックでの保存
    ffmpeg なら ffv1 というコーデックがあり、長期保存に向いています。ディスク容量は大きくなりますが、劣化の心配がありません。

  • 色空間の保持
    VHSの信号は本来「アナログNTSC」ですが、キャプチャ時に YUV420 に落とすと色情報が減ります。キャプチャデバイスやソフトによっては YUV422 で取り込めるので、可能なら保持した方が安心です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?