DV in AVI Type-1 の動画を作成する
2025-08-30 05:15 時点での情報
結論
DirectShow の Graph を弄るためのオープンソースソフト GraphStudioNext を用いることで可能。
背景
L-SMASH Works は DV in AVI Type-1 では特別な処理を行っている。
マルチトラック対応を行う際にそこ周りの変更を行う必要があり、そのデバッグ用にファイルが欲しかった。
ネットを探しても、 Type-2 なサンプルはあるのだが Type-1 なサンプルが見つからなかった。
FFmpeg や XMedia Recode でも Type-1 なファイルは作成できないようだった。
前提知識
DV in AVIとは
DV-AVI とも呼ばれることもある。
Digital Video というコーデックが AVI の中に入っているもの。
DV in AVI Type-1, Type-2 の違いは?
DV カメラは、インターリーブされたオーディオ-ビデオを生成する。ビデオの各フレームには、オーディオ情報も含まれている。DV データを AVI ファイルに保存する場合は、以下のオプションがある。
・インターリーブされたデータを AVI RIFF ファイル内に 1 つのストリームとして格納する。これを type-1 ファイルと呼ぶ。
・インターリーブされたデータを、別々のオーディオ ストリームとビデオ ストリームに分割する。これを type-2 ファイルと呼ぶ。
まぁ、端的に言うと、
Type-1 は動画と音声をひとまとめにして扱っている
Type-2 は動画と音声を別々に扱っている
って感じ。
一般的な動画ファイルでは Type-2 的な手法が使われていることが多いため、特殊。
なぜ L-SMASH Works で Type-1 に対し特別な処理をしているのか
L-SMASH Works では、「映像と音声は別々である」として扱っている(そもそも、依存ライブラリである libavformat がそのようなデータの渡し方をしてくる)
L-SMASH Works は、それぞれの映像・音声で、ファイルのどのバイトにシークした際、どこの箇所の映像・音声が得られるかというのをインデックスファイルに書き込む。
DV in AVI Type-1 を libavformat と libavcodec に食わせた際、「どのフレームはファイルのどのバイト」という情報が、映像では得られるが音声では全く得られない。(最初のフレームさえも)
つまり音声フレームをシークした際にファイルのどのオフセットにシークすべきかがまったくわからず、高速なシークが不可能となり、処理によってはエラーが発生する。
作成のために試した手法
前提知識にかなり行数を割いてしまったが、どうやって作成するかが必要な情報である。
1. DV 対応ビデオカメラから出力
1-1. USB接続
DV 対応ビデオカメラが手元にあり、USB 接続で PC 映像送出のためのキットも手元にあるということで、試すことにした。
(当時の USB の転送レート的に圧縮されていないか微妙なとこではあるなとは思っていたが。)
1. CD-ROM からドライバインストール (インストーラーをXP互換モードで起動しない限りインストール不可)
2. 専用ソフトのインストール
3. ビデオカメラを繋いでみる
認識はしたものの「Driver is unavailable.」というわけで、Windows 11 では使えませんでした。残念。
1-2. i.LINK接続
以下のURLを参考にやってみようかと。
手元に
IEEE 1394 6pin 端子付き PC
i.Link 4pin 端子付き DV 対応ビデオカメラ
4pin - 4pin ケーブル
はあったのだが、4pin - 6pinケーブルが見つからなかったため、断念。
まぁ、miniDV テープに保存されている過去の映像をバックアップしておきたいため、あとでやるつもりではある。が、今は時間が惜しい。(無理につなげてビデオカメラを壊したくはない。)
2. DirectShowで出力
DirectShow には以下のものが Windows 標準で搭載されている。
DV Decoder
DV Encoder
DV Splitter
DV Muxer
「これは使えそうだ。プログラムを書いてどうにかしようか。」と考えていたところで、とある情報を見つけた。
Windows には DirectShow のフィルターをノードベースで弄れる GraphEdit というツールがある。
これでどうにか...と思って開いたのだが、Graph を追加しようとすると落ちる。これは使えない。
2025-09-11 追記
muken さんからの情報提供で知ったのですが、GraphEdit は 100 を超えるメディアタイプが登録されている場合、落ちるようです。
というわけで調べたところ、別のオープンソースなノードベースで弄れるソフトを見つけた。これなら動いた。
とりあえずファイルの再生ができるかということで、こんな感じでノードを組む。
LAV~~~というのは Windows 標準ではなく後からインストールしたものであるため、皆さんの環境には入っていない可能性がある。私の環境では、 K-Lite Codec Pack Basic のインストールにより LAVFilters は既に入っていた。
「progress2.mp4」となっているところは「File Source (Async.)」でファイルを指定したものである。
https://scrapbox.io/files/68b171a04bfc749b02ecce8a.png
再生ボタン(Start)をクリックすると、以下の図のようにきちんと再生された。
(progress2.mp4はマルチトラック進捗報告用の動画)
https://scrapbox.io/files/68b1719d129efc6c71b8bbd9.png
というわけで、ノードを組み替えて、DV in AVI Type-1 を生成するのがこちらである。
「dv-avi-type-1.avi」となっているところは「File Writer」でファイルを指定したものである。
https://scrapbox.io/files/68b1719bbbcbf4965ae98ecb.png
注意事項として、LAV Audio Decoder をダブルクリックし、以下のような設定で 16-bit Integer 出力を強制しない限り、正常に音声が Mux されない。
https://scrapbox.io/files/68b1719831d80c4b086ba23e.png
蛇足
DV in AVI Type-2 はこちら。
https://scrapbox.io/files/68b171934d7b152c559bb17d.png
蛇足2
私は Mr-Ojii版 L-SMASH Works のアーカイブを手元に残しているのだが、遡ってみたところ以下の間で壊れたようである。
また、現在の r1200 でも DV in AVI Type-1 を読み込んだ際には壊れているはずである。仕事が増えた。
Mr-Ojii版 L-SMASH Works r1129 (FFmpeg 5.0)
Mr-Ojii版 L-SMASH Works r1132 (FFmpeg 6.1)
r1244 にて修正しました。