LoginSignup
0
0

DVテープを今のうちにPCにアーカイブする

Posted at

1. はじめに

家族ムービーがDVテープで数十本ある.手元にはまだDV+VHSのデッキ,ミニDVのハンディカムがあり,動いているけどテープが出てこないとか動作が怪しくなってきた.
動いてるうちにキャプチャしておく!と一念発起してそのワークフローとffmpegラッパーを作ったので記録.
dvtapes.jpg

1.1 条件

  • Macでできること
  • OSSで完結すること
  • ロスレスでキャプチャ・保管すること
  • 多少のエラーは無視してキャプチャできること
  • DVテープの日付時刻情報をキープすること
  • 日付,イベントの切れ目で分割すること
  • 家族に渡すムービーは日付・時刻をレンダリングしたmp4にすること

1.2 リサーチ

こちらの方がほぼ同じ発想で方法を公開されていた.
"Capturing and Archiving MiniDV Tapes on macOS"
以下,途中までLéoさんの方法の受け売り.逐語訳ではないけれどエッセンスを半分以上お借りしている.

1.3 構築環境

macOS 14.4.1 (Sonoma)
LéoさんもmacOS.Windows, Linuxは要人柱
Pythonは3.9以降(dictのunionを使っている)

2. ワークフロー

2.1 概略

2.2 アーカイブまで

インストールすべきは以下ソフトウェアの項で説明

  1. デッキとPCをFirewireで繋ぐ
  2. デッキのIDを得る ffmpeg -f avfoundation -list_devices true -i ""
  3. キャプチャ ffmpeg-dl -f avfoundation -capture_raw_data true -i "<ID>" -c copy -map 0 -f rawvideo video.dv 1時間で約13.5GBのファイルになる.
  4. マーカ点でファイル分割 dvpackager -e dv -s video.dv
  5. 細かすぎるファイルを結合.catが使える.cat foo_1.dv ... foo_n.dv > foo.dv
  6. ファイル名を日付ベースに変更 mv_datetime.py video_part*.dv
  7. 保存したいフォルダに移動.video.dvは削除

2.3 渡すムービーの作成

  1. 日付を書き込む render_datetime.py --filter " -vf yadif" --encode " -c:v libx264 -preset slow -crf 20 -c:a ac3" -o .mp4 *.dv out

これで,デインターレースして*.dvにマッチするファイルを一気にmp4にしてフォルダー"out"に保存.なお,デインターレースした結果fpsが倍になっている.-mode send_frameを yadifに追加すれば同じfpsになる.

3 インフラ

3.1 ハードウェア

私が持ってるデッキは,

  • WV-DR7: SonyのDV+VHSダブルデッキ
  • DCR-TRV30: SonyのミニDVハンディカム

両方ともDV(Mini FireWire)出力がある.IDはそれぞれ"WV-D", "DCR-TRV30"だった.PCは,

  • Macbook Air M2 (2023) / OS 14.4.1 (Sonoma)

PCとデッキの接続方法

Mac側にはUSB-C (Thunderbolt 3/4)しかない.

  1. Thunderbolt 3(USB-C)- Thunderbolt 2 アダプタ
  2. Thunderbolt - FireWire 800 アダプタ
  3. FireWire 800 - FireWire 400 アダプタ
  4. FireWire 400 - Mini FireWire ケーブル

これでやっとデッキに繋がる.LéoさんはDV Line Protectorというのを入れてるが,既に絶版ぽい.心配なら,デッキとPCの筐体外装をあらかじめ短絡して等電位にしておいてからケーブルを接続すれば良い(かも).

【番外:デッキに繋がるモニターがない!】

デッキで再生してる映像を確認したい.でもデッキの映像出力は,アナログコンポジットとS端子.自宅にはそんな入力のあるモニタは既にない.仕方なく,これを買った.
 コンポジット ー HDMI出力用コンバーター
ただし,アナログなりの絵になる.モニタリング用には十分.

3.2 ソフトウェア

Homebrewで調達できるものは揃える.以下,Léoさんの方法そのまま

brew tap amiaopensource/amiaos
brew tap mediaarea/homebrew-mediaarea
brew install ffmpegdecklink dvrescue mediainfo
brew link --force ffmpegdecklink

Pythonスクリプトmv_datetime.pyrender_datetime.pygithubにあげてある.
ffmpeg-pythonPyExifToolをPyPIから取ってくる.

使用したソフトのバージョンは以下の通り

  • OS: macOS 17.3 and 17.4.1 (Sonoma)
  • python 3.11.9 and 3.12.2
  • ffmpeg 6.1.1
  • ffmpeg-dl 5.1.4
  • ffmpeg-python 0.2.0
  • dvresque 24.01
  • mediainfo 24.03

【番外:ffmpegのDV出力でエラーが出る件】

render_datetime.pyにdvフォーマットのファイルを出力させると,
Assertion cur_size >= size failed at libavutil/fifo.c:2703 ...
というエラーが出ることがある.あるいは,出力のdvファイルが6秒くらいで切れた状態になる.

その場合,--bugオプションをrender_datetime.pyに追加してみて.
mp4を出力するときは,このエラーは出ない.

このエラーはffmpegがエラーを含むdvファイルをうまく扱えないことにあるように見える.ここにまとめてある.

4. まとめ

今ならまだ,OS側でDV接続をサポートしていたり,ケーブルが売られていたり,OSSのツールが公開されている.
でも,OSSのツールがいつまでも動くとは限らない.macOSのAV FoundationはAppleの一存でdepricateになる.デッキはとっくの昔に修理できないし,メルカリ等でも良品は入手が難しくなっていく.

結論:善は急げ

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