kanta's spike

Blender VSEの動作確認用にフレーム番号がついたダミーのサンプル動画を作成したい。

やりたい事を整理すると以下になります。

  • 60FPSで3秒ぐらいの動画の各フレームに連番の番号が付与されているサンプル動画を用意したい。
  • フレーム番号のフォントスタイルやフレームの背景色を指定可能にしたい。

解決策

検討

以下の2案から検討し、案2 を採用しました。 PythonによるCLIツールとして作成します。

📄 案1: ImageMagickで作成したフレーム画像から動画を生成

ImageMagickFFmpeg を使う。

Image/Sequence ストリップ用素材 # 動画編集のためのBlender ストリップの種類とその追加方法 | kanta’s spike で紹介した方法。

graph LR IMGS[フレーム画像] MPG[動画] PARAM1_1[[フレーム数]] PARAM1_2[[背景色]] PARAM1_3[[文字色]] PARAM1_4[[フォントスタイル]] PARAM1_5[[フレームサイズ]] PARAM2[[FPS]] TOOL1((ImageMagick)) TOOL2((FFmpeg)) PARAM1_1-.->TOOL1 PARAM1_2-.->TOOL1 PARAM1_3-.->TOOL1 PARAM1_4-.->TOOL1 PARAM1_5-.->TOOL1 TOOL1--->IMGS IMGS-.->TOOL2 PARAM2-.->TOOL2--->MPG
📄 案2: SVGテンプレートをもとに生成したフレームSVG画像から動画を生成

Pythonスクリプト と FFmpeg を使う。

フレーム番号を記載したテンプレート画像(SVG)を予め用意し、 フレーム番号部分をPythonにより書き換えたフレーム画像(SVG)を作成する。

あとは、フレーム画像をインプットとして FFmpeg で動画に変換する。

graph LR TMPL[テンプレートSVG] IMGS["フレーム画像(SVG)"] MPG[動画] PARAM1_1[[フレーム数]] PARAM1_2[[フレーム番号部分のID]] PARAM2[[FPS]] TOOL1(("Python\n(フレーム番号部分を置換)")) TOOL2((FFmpeg)) TMPL-.->TOOL1 PARAM1_1-.->TOOL1 PARAM1_2-.->TOOL1 TOOL1--->IMGS IMGS-.->TOOL2 PARAM2-.->TOOL2--->MPG

方針

ツールの名前は、 create-test-video.py とします。

本ツールは、テンプレートSVG画像から、指定された時間分のテストビデオを作成するツールです。 テンプレートSVG画像に記載されたフレーム番号をツールが自動置換します。

また、テンプレートSVG画像は、Inkscapeなどのツールにより、事前に作成しておきます。

graph LR TOOL(("`**create-test-video.py** Python CLI ツール`")) OPTS[[オプション]] OPTS-.->TOOL--->動画
パラメータ デフォルト値 説明
テンプレートSVG - テンプレートとなるSVG画像のパスを指定する
FPS 60 生成する画像のフレームレートを指定する
秒数 1 生成する動画の長さを指定する。 FPS×秒数 が生成するフレーム画像数になる
フレーム画像生成ディレクトリ テンプディレクトリ テンプレートから生成するフレーム画像(SVG)を格納するディレクトリ
フレーム番号のID frame_no SVG内のフレーム番号部分のID
FFmpegのパス /usr/local/bin/ffmpeg ffmpegコマンドのパス
出力動画パス output.mp4 生成する動画ファイルのパス

使い方の例は以下になります。

create-test-video.py --template template.svg --fps 60 --sec 3 --work-dir ./wk  --output output.mp4

開発

以下のリポジトリでツールを作成しました。

📄 テストビデオ作成ツール
kantas-spike/create-test-video.py
  • 実行例

    python create-test-video.py -t ./sample_template/red_inkscape.svg -o sample_output/red.mp4 -d 3
    
  • 作成結果

課題

FFmpeg で SVGを利用するためには、librsvgを有効にしてビルドする必要があるようです。

私の環境は macOS なのですが、Homebrewffmpeg では、librsvg は無効になっています。

そのため、Homebrew公式のffmpegを修正し、librsvg を有効にしたFomulaを用意しました。(差分)

📄 librsvg有効化版ffmpegのFormula
kantas-spike/homebrew-ffmpeg-with-librsvg

以下によりffmpeをアンインストール後に、

brew uninstall --ignore-dependencies ffmpeg

本Formulaをダウンロードし、以下を実行すると、 librsvg有効版ffmpegをビルド・インストールできます。(ビルドには時間がかかります。)

brew install --build-from-source --formula ffmpeg.rb

こんなことなら 案1 を採用すべきだったかもしれません。 しかし、案2 は、Inkscapeなどを使って、手軽にテンプレートを作成できるので、作成できるテストビデオを自由度を考えると 案2 で良かったと思います。

参考

作成日: 2024/06/23