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?

Depth Anything (AI)を使って 深度付き動画を作成する dav2video

Last updated at Posted at 2025-02-11

初めに

dav2videoは1枚の静止画から深度を推定するDepth Anything V2を使って通常の2D動画へ深度画像を追加するPython用のツールです。
作成した深度付き動画は専用アプリを使って立体映像として視聴できます。

  • 深度付き動画

できること

  • 通常の2D動画から深度付きの動画を作成する
  • RIFEを使って30fpsの動画を60fpsや120fpsにする

最終的にはVRで立体映像として視聴するので 30fpsだとカクカク感が2D映像のときより目立ってしまいます。そこでECCV2022-RIFEを使ってフレーム補完し、60fpsや120fpsの動画として仕上げます。

動作条件

  • Windows10 / 11
  • 4GB以上のnVIDIA製ビデオカード
  • Python 3.11.4

処理速度

FullHD 30fps 1分の動画を処理するのにかかる時間は次の通りです。

設定 GTX1050Ti
4GB
GTX1080
8GB
RTX4090
24GB
備考
fast 137秒 64秒 34秒 速度優先
スモールモデル
midle 44分 12分 104秒 標準設定
ベースモデル
slow メモリ不足
約2時間
37分 5分 品質重視
ラージモデル フレーム補完あり
GTX1050Tiで使うには

ダウンロード

file.png

Pythonのインストール

このツールはPython用のスクリプトになっていますので、Pythonを公式サイトからダウンロードしてインストールしてください。

インストール画面ではカスタマイズを選択し Pythonへ パスを通すオプションをONにしてください。


インストールが終わったらPCを再起動します(再起動しないとパス設定が有効にならない)。

Windows PowerShellを起動してPythonが使えることを確認します。Pythonから抜けるには[Ctrl] + [Z]。
power_python.png

AppStoreのPythonのページが表示されるようなら パスの設定ができていません。
インストーラーで修復か再インストールしてください。

Pythonで必要なモジュール

requirements.txt
ffmpeg-python==0.2.0
keyboard==0.13.5
numpy==1.26.4
tqdm==4.66.1
opencv-contrib-python==4.8.0.76
Pillow==9.3.0

同梱のmodule_install.batで一括インストールできます。

また、PyTorchのCUDA 12版が必要です。CPU版や CUDA 11版では動かない場合があります。
動かない場合は 次の様に上書きインストールしてください。

pip install --upgrade --force-reinstall torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

使い方

以下のバッチファイルへ動画をD&Dしてください。
カレントフォルダ(dav2videoのフォルダ)へ深度付き動画が作成されます。

処理中は[Shift]を押しながら[S]キーで処理中の画像を表示します。画像ウインドウを閉じれば処理を再開します。
[Shift]+[ESC]で処理を途中で終了します。音声のコピー処理を行うので終了まで少し時間がかかります。

バッチファイル モデル 処理
解像度
フレーム
補完
備考
drop_here_fast.bat vits x1 無し スモールモデルを使った
処理速度優先の設定
drop_here_midle.bat vitb x2 無し ベースモデルを使って
処理解像度を上げた
標準設定
drop_here_slow.bat vitl x2 -60 ラージモデルを使って
さらに動画を60fpsにする
品質重視設定
drop_here_60fps.bat - - -60 フレーム補完で60fpsの動画を作成する
深度推定は行わない
drop_here_120fps.bat - - -120 フレーム補完で120fpsの動画を作成する
深度推定は行わない

numpyでエラーが起こる場合はもう一度module_install.batを実行してください。
PyTorchのインストールによりnumpyのバージョンが変わってしまいエラーが起こります。

コマンドライン オプション

書式
python dav2video.py [input_path] [opions]

input_path

入力動画のフルパス

options

オプション 説明
-d --output_dir 処理結果を保存するフォルダを指定する
省略した場合は カレントフォルダへ出力
最後の'¥'または'/'はあってもなくてもいい
例 -d="C:/video"
-m --model 深度推定に使うモデルを選択する
省略した場合は vitb

vits スモールモデル
早いけど精度が悪い フレーム毎のばらつきが多い
お勧めしない

vitb ベースモデル
精度が高い フレーム毎のばらつきが少ない

bitl ラージモデル
最も精度が高い
-t --depth_scale 深度推定処理解像度
518x518を基本に 何倍にするかを指定します
大きいほど深度推定の精度が上がります
省略した場合は 2倍
1倍:518x518   2倍:1036x1036   3倍:1554x1554
-s --slow_factor スローファクター
フレーム数をn倍にし且つfpsもn倍にする
省略した場合は 1倍
1,2,4,8,16... 2のN乗のみ可
マイナスにすると目標fpsに合わせて倍率を自動設定する
例 -s -120 なら120fpsに近い倍率になるよう自動設定される
-c --crop 画像の端を切り取ります(画像サイズが小さくなる)
左 右 上 下 (右と下はマイナスにすると 幅と高さと解釈します)
例 -c 100 -320 200 -240
左上(100,200)から320x240の画像を切り出す
-k --blank 深度推定処理のときだけ端を切り取ります
左 右 上 下 (右と下はマイナスにすると 幅と高さと解釈します)
クロップと異なり作成される動画の画像サイズはそのままです。
例 -k 4 4 4 4
左右上下それぞれ4画素切り取って 深度推定処理を行います。
-i --input_option 入力ストリームのffmpeg オプション
例 -i="-ss 1:30:00 -to 2:10:00" 処理する時間を指定する
-o --output_options 出力ストリームのffmpeg オプション
例 -o="-c:v h264_nvenc -cq 26" nvencを使う
-n --no_suffix 作成する動画のファイル名に接尾語を付けない
--log ログファイルを作成する
-r --rife_onty フレーム補完のみ行います 深度推定は無効になります
-a --analyze 解析ファイルを作成する

更新履歴

日付 バージョン 内容
2025.2.11 1.0.0 - 初版
2025.2.20 1.0.3 - 深度推定後の正規化を変更
- 解析オプション追加(-a)
- フレーム補完のみのオプション追加(-r)

ヒント

処理解像度が精度に大きく影響する

とにかく精度を上げたい場合はベースモデルかラージモデルで処理解像度オプション(-t)を上げること
SD動画など低解像度の場合も 画像サイズ以上の処理解像度にすると顕著に精度が上がります。

VR動画の一部を切り出して無理やり2D動画として扱う(クロップ)

クロップオプション(-c)を使ってVR動画の一部を切り出して2D動画として扱うことができます。

4096x2048のVR動画から 左側の1350x1800の範囲を切り取って無理やり2D動画として扱う
python dav2video.py input_vr.mp4 -c 350 -1350 100 -1800

古いアナログ映像を扱う(ブランク)

画面の端にアナログ映像特有の不安定な箇所があると深度推定が非常に不安定になります。
クロップで切り落としてもいいですが画像サイズが変わってしまうので、
画像サイズが変わらないブランクオプション(-k)を使って下さい。
ブランクは深度推定処理を行う時だけ一時的にクロップし、深度推定以外は元の画像を使います。
デジタル映像の場合もブランクで安定する場合があります

古い映像の端を4画素ブランクして 安定させる
python dav2video.py input_analog.mp4 -k 4 4 4 4

黒帯付の動画

アナログ映像と同様、黒帯も深度推定に影響を与えるので、なるべくブランクして黒帯を取り除いてください。

出力ファイルと同じ名前のファイルがある場合

ファイル名の最後に番号を付けて保存されます。

動画の一部を処理する(処理する時間を指定する)

入力ストリームオプションでffmpegコマンドを使います。

1時間30分から2時間10分までを処理する場合
python dav2video.py input.mp4 -i="-ss 1:30:00 -to 2:10:00"

ハードウエアエンコーダーnvencを使う

出力ストリームオプションでffmpegコマンドを使ってエンコーダーを指定できます。

h264 画質26の場合
python dav2video.py input.mp4 -o="-c:v h264_nvenc -cq 26"
h265 画質30の場合
python dav2video.py input.mp4 -o="-c:v hevc_nvenc -g 30 -cq 30"

GeForce GTX1050Ti 4GBで使うには

深度推定のみならラージモデルもギリギリ動作する。
しかし、一緒にフレーム補完までするとビデオメモリ不足で動かない。
最初に深度付き動画を作って、出来上がった深度付き動画を フレーム補完のみオプション(-r --rife_onty)を付けてもう一度処理することで深度付きの滑らかな動画を作成できる(drop_here_120fps.bat へドロップしてもOK)。

GeForce GTX1050Ti 4GBの場合
# 1回目 深度付き動画を作る (フレーム補完はメモリ不足で一緒にできない)
python dav2video.py input.mp4 -m vitl -t2

# 2回目 フレーム補完のみを行う (--rife_ontyで深度推定を無効にする)
python dav2video.py "1回目で作った動画" --rife_onty -s -120

ちなみに FHD 30fps 1分の動画を処理するのに 1時間53分
そのあとフレーム補完で31分、計2時間24分かかった。

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?