kick the base

好きな映画、音楽、マンガ、プログラム、デザイン、3DCG、ゲームのこと。

シェルスクリプト/FFmpeg: 動画にまつわる自動化の話

ぼくはPlugsというCG系の動画チュートリアルサービスを運営しています。

上記サービスの動画編集はぼくがひとりでせっせと行っており、だいぶ大変な作業のため、少しでも自動化できないかなと思い下記簡単なシェルスクリプトを作りました。

  • 動画に自動的にウォーターマークを合成する(出現タイミング・位置はランダムに)
  • 動画の再生時間を調べる

なんとも地味なスクリプトですが、ドンピシャのものがわりと見つからなかったのでお探しの方はご活用ください。

環境

Mac OSです。

大前提

ffprobeコマンドおよびffmpegコマンドを使うのでffmpegをインストール*1しておいてください。Homebrewが入ってれば$ brew install ffmpegで行けます。

Homebrewが入ってないもしくはHomebrewとはなんぞやという方は以前コマンドライン for デザイナー2 -Homebrew編という記事を書いたのでそちらをご参考ください。

動画に自動的にウォーターマークを合成する

このスクリプトを作るまではAdobe After Effectsで手作業でやってました。ヒュー!アナログ!!

コードを見ていただければ使い方は説明するまでもないと思いますが、一応書いておきます。

下準備

透過pngのウォーターマーク画像を作っておき、動画のあるフォルダに入れておきます。

またwatermark.shは事前に$chmod 755 watermark.shして実行権限を与えておきましょう。

実行

.
├── watermark.sh
├── donut00000.mp4
├── donut00001.mp4
├── donut00002.mp4
└── watermark.png

こんな感じのディレクトリにcdして$ ./watermark.shしてあげればディレクトリ内の動画ファイル全てに対してウォーターマークを合成してくれます。

sample_+元ファイル名で書き出されます

動画の再生時間を調べる

ディレクトリ内のすべての動画に対して時・分・秒で再生時間を出力します。短すぎるチャプターはくっつけようなどの判断材料に。

下準備

check_duration.shは事前に$chmod 755 check_duration.shして実行権限を与えておきましょう。

実行

.
├── check_duration.sh
├── sample_donut00000.mp4
├── sample_donut00001.mp4
└── sample_donut00002.mp4

こんな感じのディレクトリにcdして$ ./check_duration.shしてあげればディレクトリ内のすべての動画ファイルの再生時間を出力してくれます。

結果はこんな感じ。

sample_donut00000.mp4,0:03:23.435000
sample_donut00001.mp4,0:01:37.835000
sample_donut00002.mp4,0:05:55.926000

まとめ

FFmpeg便利ですね。

あともう少ししたらHoudiniのチュートリアル出るのでみんな買ってね。鋭意製作中です!!!

*1:ffprobeはffmpegをインストールすると同時に入ります