APIを使ってオーディオビジュアライザを...FFmpegだけでGoProやPS4の動画を編集してみた2014年10月17日ishizimaTweet動画を編集したい動画をシェアしやすくなった最近、Web上で動画をシェアする機会が増えたように感じます。前までInstagramやFlickrなど、静止画がメインでした。それが、スマートフォンの性能向上やGoProのようなウェアラブルでタフなカメラの台頭、更に携帯電話網の広帯域化なんかも相まって、撮る・観る双方の環境が整ってきたように思います。サービス面においても、Vineの登場やInstagramの動画サポートといった、よりカジュアルにシェアできる環境が整っています。一方で、編集はどうでしょうか。撮った動画をそのままシェアすることはできません。iMovieは使いやすいですけど、たかだか15秒程度の動画を作るにはオーバースペックで面倒すぎます。こっちは動画の中から15秒選びたいだけなんだよ、みたいな。いって、例えばInstagramでデジカメの長尺動画を直接開くとサイズを理由に拒否されました。いうことで、FFmpegを使って動画編集にチャレンジしてみたいと思います。編集って書いてますけど、切り貼りとキャプション合成くらいです。SNSにポイっとシェアしたいだけですから。FFmpegのインストールお使いのOS環境に合わせてインストールしてください。--with-freetype動画を用意するサンプルとしてタイトル通りPS4の標準機能で録画した動画とGoProで撮影した動画を用意します。GOPR0107.MP4はい、大きいですね。日常的に動画を編集する人からすれば小さい部類かもしれませんが、ちょっとシェアしたいだけの素人を威圧するには十分なファイルサイズです。これを編集する場合、iMovieなどではいちいちSSDなりHDDなりにコピーされて苦しいことになりますが、ffmpegなら直接SDカード上から書き出してもよいわけです。切り出しポイントを把握する動画を再生してどのあたりから見せたいか探しましょう。Macの場合、FinderからQuickLookするなどして切り出し開始のタイミングを決めます。切り取るさて、いよいよ加工です。単純に先頭を指定して、VINEに合わせて6秒分切り取ってみます。尺をそれぞれ秒で指定します。キーフレームから指定したいだとか細かい内容についてはドキュメントを参照してください。映像と音声の圧縮コーデックを指定します。なっていたり再エンコードされてるかもしれません。この辺あまり詳しくないのでよく分かってないです。)なお、HandBrakeで作成した動画を上記の手順で切り取ると失敗することもあるようです。手元の環境にHandBrakeを入れていないので具体的な設定値など確認できていませんが、ご注意ください。切り取った複数の動画を無劣化で結合する複数箇所を繋げたい場合です。ファイルを切り出します。2つとします)コンテナを変更してから結合ffmpegではMPEG4コンテナのまま再エンコードなしの結合ができません。コンテナをストリーム形式に変更して結合し、再度コンテナを戻すという手順を踏みます。結合ts形式にしたのをcatで繋いでるだけですので、ファイルが3つでも4つでも好きなだけくっつけられます。MPEG4コンテナに戻します。してmp4ファイルを出力これでできあがり。キャプションを入れるさて、公開するにあたって字幕など何かしらキャプションを合成したいってこともあるでしょう。SNS上でも再現されるよう、直接動画に埋め込んでみます。字幕の準備フォント設定まずフォントの設定ファイルを作ります。<dir>~/Library/Fonts</dir></fontconfig>.confという拡張子ですがXMLですね、これ。次にFONTCONFIG_PATHにfonts.confの場所を指定します。FONTCONFIG_PATH=/path/to/fonts.conf字幕情報の準備ffmpegはASSと呼ばれる形式の字幕データを参照します。従って、ASSファイルを用意しなければなりません。