Macでテスト用のダミー画像やダミー動画を自動作成する
画像や動画を扱うサービスを開発していると、ダミーのテスト画像や動画が大量に必要になることってありますよね!
巷にはダミー画像を生成するサービスは複数あるのですが、動画の方は見当たりませんでした。 調べてみるとimagemagickで静止画を作成して、それをffmpegで動画にできるようなのでBashスクリプトで作ってみました。
スクリプトの紹介
Generate a dummy video or an image on macOS · GitHub
このスクリプトは動画と画像の両方を作成できます。 実際にスクリプトで作成した画像は以下の通りです。キャプションテキストと画像サイズが書き込まれるので、テスト実施時に画面をキャプチャすればエビデンスとして残せるかと思います。
動画の方は静止画を単純にループするようになっています(オプションで音声ファイルを指定すれば音もつけられます)。 また、動画の右上には残り秒数のカウントダウンも表示されます。
スクリプトを実行するにはimagemagickとffmpegが必要です。Homebrewを入れていれば以下のコマンドでインストールできます。
brew install imagemagick ffmpeg
インストールできたら、以下のコマンドでスクリプトを試してみてください。
curl -Ls https://gist.github.com/ikoba/2852944738431d82ebffe6d9e407cc32/raw | bash -s -- -s 400x300 -t 10 -c テストケース1-1
カレントディレクトリに、横: 300px, 縦: 400pxで長さ10秒の動画が作成されると思います。
使用可能なオプションは以下の通りです。
options: -i, --image generate an image -v, --video generate a video (default) -s, --size <geometry> specify width and height (default: 600x600) -c, --caption <text> specity caption text (default: Test) -f, --font <name> specify font name (default: "ヒラギノ角ゴシック-W3" or "Hiragino-Sans-W3") --list-fonts list available fonts and exit --font-size <number> specify font point size (default: appropriate value depending on the size) --foreground <color> specify caption text color (default: white) --background <color> specify background color (default: gray) examples of color formats: 'lime', '#0f0', '#00ff00', 'rgb(0,255,0)', 'rgb(0,100%,0)' --image-type <type> specify image type (default: png) -a, --audio <file> specify an audio file if you want to merge it with the video -t, --time <second> specify video length in seconds (default: 15) -o, --out <directory> specify output directory (default: working directory) -h, --help show usage and exit
1度に複数のダミー動画を作成する
例えば以下のようにxargsコマンドを組み合わせれば複数の動画を作成できます。
seq 10 | xargs -I SEQ ./dummy -s 400x300 -t 10 -c テストケースSEQ
スクリプトを作ってみた感想
今回はエンジニアでない方も使用するので、RubyやPythonなどがインストールされていない環境でも動作するようにBashスクリプトで作成しました(imagemagick, ffmpegはインストールしてもらう必要がありますが)。
書いてみた感想ですが、正直ちょっと辛いなと思いました。特にコマンドのオプションの取り扱いがRuby, Python, Goのように宣言的に書けず、また特殊な処理を必要とするので可読性が悪いです。他にも実行してみないとわからないような落とし穴がいくつかありました。
非エンジニア向けにも配布するという用途では、Go言語で作成したり、ツールを使ってRubyやPythonをシングルバイナリにまとめたりした方が良いのかなと思いました。あとはCUIというのも非エンジニアにはハードルが高そうです。PythonでGUIアプリを作れるFletを今度試してみたいと思います。
スクリプトを作成する上でVisual Studio Codeの以下の拡張が役に立ちました。未使用の変数や、if
に対するfi
の忘れなどの間違い、また非推奨な書き方をした場合に警告してくれます。
参考にした資料
GoogleのShellのスタイルガイドです。かなり参考になりました。
Bashのgetoptsでロングオプションを扱う方法が詳細に説明されています。