FFMPEGを知ってほしい
こんにちは、ネクストビートでエンジニアをしている戸田と申します。
ネクストビートでは自社メディアサイトKIDSNA STYLE(以後、Styleと略す)を運用しており、子育て情報を社会に発信しています。
Styleの課題の1つとして、SEO対策があり、速くページを表示できるようにするため、ページ容量を軽くする事に取り組んでいます。
一方、個人的に最も情報価値が高いメディア媒体は静止画よりも動画と思っており、容量の大きい動画をStyleでも上手く動画を活用できないかなと考えておりました。
そこで、画像や動画を高画質かつ低容量で表示できれば、SEO影響を最小限に抑えつつも、情報価値の高いとおもう動画を活用できるのではないか?
と思い、FFMPEGを、前職の経験を生かして導入を進めているので、本ブログで簡単に紹介できればなと思います。
本記事で扱うこと
・FFMPEGとは
・FFMPEGのインストール方法
・基本的な使い方
・コマンドの説明と思いがけない特性
・よりMp4動画読み込み速度を向上させる手法
FFMPEGとは
詳しくは検索していただくとして、使い手としての説明は、バッチ処理可能な動画ファイルにアクセス出来るソフトウェアです。
元々は動画共有サイトで動画を見た目を損なわず軽くする事が最初の用途でしたが、AI学習で動画、音声のバイナリデータ解析で利用されたり、ライブ配信でのVideoデータのフィルタ処理でも利用されるなど、動画コンテンツ事業で結構お世話になるソフトウェアです。
FFMPEGのインストール
Macなら、HomeBrewを使ったインストールが簡単なので、こちらで説明します。以下コマンドでHomeBrewがインストールされているか確認します。
% brew -v
FFMPEGをインストール
以下コマンドでインストールします。インストール後、2行目以降のコマンドでパスが通っているか確認します。
% brew install ffmpeg
% ffmpeg -version
% ffprobe -version
% ffplay -version
基本的な使い方
FFMPEGインストールで3つのソフトウェアがインストールされました。
それぞれ簡単に説明すると
FFMPEG
こちらがメインです
FFPROBE
動画メタ解析ソフトです。動画のエンコード状態などを詳細に検品できます。動画編集した後に出力した動画がおかしい場合、このソフトで原因を調査したります。
※語るとキリがないので、FFPROBEは別の機会に紹介します
FFPLAY
シェル上で動画再生ができるソフトウェアです。FFMPEGで出力した動画がPlayerで再生できるか確認するデバッグツールのようなもので、基本使わないです。
コマンドの説明と思いがけない特性
基本的なコマンド構成は以下です
※パスに日本語ファイル名やフォルダ名があると誤作動を起こす可能性があります
% ffmpeg [input options] -i input.mp4 [output options] output.mp4
-i ファイルパスが入力になります。入力にとれるファイルは画像、音声、動画になります。
出力は最後に出力先を記述すればOKです。変換方法は指定するか、I/Oの拡張子を見てFFMPEGが自動で判別します。
I/Oのそれぞれ直前にオプションを記述することで、多彩な変換が可能になります。
今回のコマンドを省略なしで記述すると、このようになります。
% ffmpeg -i input.mp4 -c:v libx264 -c:a copy output.mp4
出力オプションの-c:v -c:aはcodec:video、codec:audioの略で、出力動画のViodeo、Audioのコーデックを指定できます。
copyの場合は、元の状態をコピーするので、無劣化で変換を通すことができます。
逆にコーデックを指定すると、どうしても圧縮がかかるため、ファイルサイズが軽減できる分、元の品質から劣化します。
音声圧縮は効率が悪く意味がない場合がおおいので、ドルビー→ステレオなど、ch変換する以外は基本的に無劣化がお勧めです。
よりMP4動画読み込み速度を向上させる手法
Mp4で、なぜかブラウザで再生するまでの読み込みが時間がかかるなと感じた事はありませんか?
色々な要因が考えられますが、mp4ファイルのデータが原因の場合もあります。
MP4データ
まずダウンロードされたMp4データについて、簡単に説明すると、画像のような構成になってます。
moovがヘッダーのようなもので、mdatが実動画ファイルです。
プレイヤーで再生する時、プレイヤーは必ず最初にmoovを探しに行きますが、1方向にしか探せないので、
このようにmp4を作ってしまうと、動画読み込み時に必ず実動画データ全体を読み込まないと、再生できなくなってしまいます。
% ffmpeg -i input.mp4 -movflags +faststart output.mp4
このように-movflags +faststartのオプションを指定 する事で、必ずmoovが前に来るようになるので、読み込みが早くなります。
おわり
今回紹介した事以外にも、FFMPEGの使い道はたくさんあるので、もっと紹介できればと思います。
次回はVOD(ビデオオンデマンド)のやり方に触れてみたいと思います。
We are hiring!
株式会社ネクストビートでは、
「人口減少社会において必要とされるインターネット事業を創造し、ニッポンを元気にする。」
を理念に掲げ一緒に働く仲間を募集しております。