1. はじめに
家族ムービーがDVテープで数十本ある.手元にはまだDV+VHSのデッキ,ミニDVのハンディカムがあり,動いているけどテープが出てこないとか動作が怪しくなってきた.
動いてるうちにキャプチャしておく!と一念発起してそのワークフローとffmpeg
ラッパーを作ったので記録.
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 アーカイブまで
インストールすべきは以下ソフトウェアの項で説明
- デッキとPCをFirewireで繋ぐ
- デッキのIDを得る
ffmpeg -f avfoundation -list_devices true -i ""
- キャプチャ
ffmpeg-dl -f avfoundation -capture_raw_data true -i "<ID>" -c copy -map 0 -f rawvideo video.dv
1時間で約13.5GBのファイルになる. - マーカ点でファイル分割
dvpackager -e dv -s video.dv
- 細かすぎるファイルを結合.
cat
が使える.cat foo_1.dv ... foo_n.dv > foo.dv
- ファイル名を日付ベースに変更
mv_datetime.py video_part*.dv
- 保存したいフォルダに移動.video.dvは削除
2.3 渡すムービーの作成
- 日付を書き込む
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 ハードウェア
私が持ってるデッキは,
両方とも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)しかない.
- Thunderbolt 3(USB-C)- Thunderbolt 2 アダプタ
- Thunderbolt - FireWire 800 アダプタ
- FireWire 800 - FireWire 400 アダプタ
- 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.py
とrender_datetime.py
はgithubにあげてある.
ffmpeg-python
とPyExifTool
を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になる.デッキはとっくの昔に修理できないし,メルカリ等でも良品は入手が難しくなっていく.
結論:善は急げ