FFmpeg
| 開発元 | FFmpegチーム |
|---|---|
| 最新版 | 1.2[1] / 2013年03月15日 |
| プログラミング言語 | C言語 |
| 対応OS | クロスプラットフォーム |
| サポート状況 | 活発 |
| 種別 | マルチメディアフレームワーク |
| ライセンス | LGPL, GPL |
| 公式サイト | ffmpeg.org |
| 開発元 | Libav |
|---|---|
| 最新版 | 9.4[2] / 2013年03月23日 |
| プログラミング言語 | C言語 |
| 対応OS | クロスプラットフォーム |
| サポート状況 | 活発 |
| 種別 | マルチメディアフレームワーク |
| ライセンス | LGPL, GPL |
| 公式サイト | libav.org |
FFmpeg(エフエフエムペグ)は動画と音声を変換することのできるUNIX系OS生まれのフリーソフトウェアであり、libavcodec(動画/音声のコーデックライブラリ)、libavformat(動画/音声のコンテナライブラリ)、libswscale(色空間・サイズ変換ライブラリ)、libavfilter(動画のフィルタリングライブラリ)などを含む。ライセンスはコンパイル時のオプションによりLGPLかGPLに決定される。コマンドラインから使用することができる。対応コーデックが多く、多彩なオプションを使用可能なため、幅広く利用されている。
目次 |
解説 [編集]
FFmpegは、単体ではGUIインタフェイスを持たないツールでUNIXコマンドのような動作を振る舞う。その為、対話式アプリケーションとして使用される場合、フロントエンドを用いる事も多い。コマンドラインから実行するCUIとして配布されているのは、ユーザが必要とすればフロントエンドを利用でき、スクリプトなどのバッチ処理を行う際に呼び出す事もできるという利点からである。また、FFserverと組み合わせる事により、ファイルシステムやデバイスファイルとストリーミングサーバ間のフィルタとしても動作する。
2011年3月13日に FFmpeg の開発は、開発体制の対立から ffmpeg.org と libav.org に分裂した。どちらも、ffmpeg というソフトウェアをリリースしているが、Libav 側は avconv に名称を切り替える作業を進めている。この分裂に伴い、Debian[3], Ubuntu[4] 11.04, Gentoo Linux は Libav 側を採用した。
サポートしているファイル形式 [編集]
|
|
|
サポートしている画像形式 [編集]
|
|
サポートしているコーデック [編集]
libavcodecを参照。
サポートしているプロトコル [編集]
- TCP
- UDP
- HTTP
- RTP
- RTSP
- RealMedia RTSP/RDT
- RTMP
- RTMPT, RTMPE, RTMPTE, RTMPS (librtmp経由)
- SDP
- Gopher
- MMS over TCP
サポートしている入出力デバイス [編集]
- Unix
- OSS
- JACK
- X11 grabbing
- dv1394
- bktrドライバ
- Linux
- ALSA
- Video4Linux
- Video4Linux2
- libdc1394 (IEEE 1394)
- Windows
- VfWキャプチャ
オプション [編集]
FFmpegでは数多くのオプションを利用することができる。それらはffmpegのバージョンによって差異があるため、利用前にオプションやコーデックの表記を確認することが望ましい。オプションは ffmpeg -h で表示できる。また、コーデック名等は ffmpeg -formats や ffmpeg -codecs で表示できる。( コーデック名は下記注意事項参照 )
一般的なオプション等の例を以下に挙げる。
メインオプション [編集]
- -i 入力ファイル名を設定する。
- -f 出力フォーマットの指定。
- -y 出力するファイル名と同じ名前のファイルが出力先にある場合に上書する。
- -fs 指定したファイルサイズになったら変換を終了する。
- -ss 指定した時間から変換を開始する。
- -title タイトルを設定する。
- -timestamp タイムスタンプを設定する。
- -vsync フレームをカットしたり加えたりして音声に動画を同期させる。
ビデオオプション [編集]
- -b 動画部分のビットレートを設定、初期設定は200kbps。( 単位は下記注意事項参照 )
- -r フレームレートの設定 初期設定は25
- -s 動画のサイズを横×縦で設定
- -aspect アスペクト比の設定
- -vn ビデオを無効にする。音声部分のみのエンコードなどに使用する。
- -vcodec ビデオコーデックを設定 設定しない場合は入力ファイルと同じコーデックを使用する。
オーディオオプション [編集]
- -ab オーディオの全チャンネル合計(昔はチャンネルごとだった)のビットレートを設定する。( 単位は下記注意事項参照 )
- -ar サンプリング周波数を設定する。
- -ac 音声のチャンネル数を設定する。
- -acodec 音声コーデックを設定する。設定しない場合は動画同様入力されたファイルと同じコーデックを使用する。
- -an 音声を無効にする。ビデオ部分のみのエンコードなどに使用する。
- -vol 通常の音量を256として音量を設定する。(2倍の音量にしたい時は512を指定する。)
注意事項 [編集]
- -bや-abオプションでビットレートを指定する場合、ffmpegのバージョンによってkbpsの場合と、bpsの場合があるので注意が必要である。(ffmpeg -hでヘルプメッセージを表示させて単位を確認するとよい)
- たとえば、単位がbpsの場合で64kbpsのビットレートを指定する場合は『 -ab 64k 』と指定し、単位がkbpsの場合は『 -ab 64 』と指定する。ビットレートの計算では一般的にk=1000であり1024ではない。
- -acodecや-vcodecで指定するコーデック名は、ffmpegのバージョンによって違うことがある。たとえば、AACコーデックの場合、aacと指定する場合と、libfaacと指定する場合がある。また、デコードのみやエンコードのみできるコーデックもあるため、必ず
ffmpeg -formatsやffmpeg -codecsで指定するコーデックが機能するか確認すべきである。 - FFmpeg と Libav の分裂に伴い、Libav 側は、コマンドラインツールとして、ffmpeg に代わる物として、引数などを(互換性なく)整理した avconv を2011年現在、開発中。各種 ff という接頭辞で始まるツールも av という名称に切り替えた。
使用例 [編集]
引数が異なる場合、FFmpeg.org の ffmpeg と Libav の avconv 両方併記する。なお、Libav の ffmpeg は従来通りの引数が使える。
- ヘルプの表示
ffmpeg -h
- 対応形式の確認
# ファイル形式 (コンテナ/フォーマット/スプリッター) ffmpeg -formats # コーデック形式 (映像や音声の形式/圧縮アルゴリズム) ffmpeg -codecs # プロトコル形式 (スキーマも含む) ffmpeg -protocols
- 動画をMPEG-4/AVC形式に変換する例 (ビットレート固定)
avconv -i inputfile -c:v libx264 -c:a libfaac -b:v 256k -b:a 64k outputfile.mp4 ffmpeg -i inputfile -f mp4 -vcodec libx264 -acodec libfaac -vb 256k -ab 64k outputfile.mp4 # -f の後に変換後のファイル形式、-acodec の後に変換後の音声コーデック、-vcodec の後に変換後の動画コーデックを指定する。 # -vb は変換後の映像のビットレート(ビット/秒)、-ab は変換後の音声のビットレート(ビット/秒)を指定する。
- 動画をMPEG-4/AVC形式に変換する例 (品質固定)
avconv -i inputfile -c:v libx264 -c:a libfaac -cqp 23 -aq 100 outputfile.mp4 ffmpeg -i inputfile -f mp4 -vcodec libx264 -acodec libfaac -cqp 23 -aq 100 outputfile.mp4 # ビットレートを指定する代わりに品質を指定することができる。映像は cqp 、音楽は aq となる。 # 品質指定は cqp の場合、値が小さいほど品質が高いことを意味する。aq の場合、値が大きいほど品質が高いことを意味する。 # 値の意味は変換後のコーデックによるので注意。
- 音楽をAACに変換する例
avconv -i inputfile -vn -c:a libfaac -b:a 128k outputfile.aac ffmpeg -i inputfile -f aac -vn -acodec libfaac -ab 128k outputfile.aac # -vcodec の代わりに -vn を使うことで変換後に映像を入れないという意味になる。同様に、-acodec の代わりに -an を使うことで音声を消すことも可能である。
- MP4形式の動画から再エンコード無しでFLV形式に変換する例
avconv -i inputfile.mp4 -c copy outputfile.flv ffmpeg -i inputfile.mp4 -vcodec copy -acodec copy outputfile.flv # 変換後のフォーマットによっては、そのフォーマットの仕様の制限やFFmpegが未対応であることなどにより変換前のコーデックが入れられないことがある。 # また、-vcodec copy を -vn にすることによって、再エンコード無しで音楽だけにすることが出来る。
- RTSPサーバーからMP4動画を保存する例
avconv -i rtsp://example.com/inputfile.mp4 -c copy outputfile.mp4 ffmpeg -i rtsp://example.com/inputfile.mp4 -vcodec copy -acodec copy -scodec copy outputfile.mp4 # 入力ファイルに直接URLを入れることができる。
- RTSPサーバーに動画を送信する例
avconv -re -i inputfile -f rtsp -c:v libx264 -c:a libfaac -b:v 256k -b:a 64k rtsp://example.com/outputfile.mp4 ffmpeg -re -i inputfile -f rtsp -vcodec libx264 -acodec libfaac -vb 256k -ab 64k rtsp://example.com/outputfile.mp4 # 出力ファイルにも直接URLを入れることができる。-re を付けると出力速度がリアルタイムになるように調整する。
- サーバーとして動作させる例
# ffserver.conf を適切に編集してから以下を実行。 ffserver & ffmpeg -i inputfile http://127.0.0.1:8090/feed.ffm
- DVDのVOBファイルを、VideoCD形式のMPEG-1ファイルに変換する例
aaconv -i inputfile.vob -f mpeg -c:v mpeg1video -c:a mp2 -b:v 1152k -b:a 128k -s 352x240 outputfile.mpg ffmpeg -i inputfile.vob -f mpeg -vcodec mpeg1video -acodec mp2 -vb 1152k -ab 128k -s 352x240 outputfile.mpg
- 動画を東芝のハードディスクレコーダー、レグザが認識できるMPEG2形式に変換する例
ffmpeg -i inputfile -target ntsc-svcd -ab 128k -aspect 4:3 -s 720x480 outputfile.mpg
- 複数のAVIの動画ファイルを結合する例(この例では、中間処理として、一度AVIファイルをMPEG-1ファイルに変換する必要がある(MPEG-1, MPEG-2 PS, DVも連結可能))
ffmpeg -i input1.avi -sameq inputfile_01.mpg ffmpeg -i input2.avi -sameq inputfile_02.mpg cat inputfile_01.mpg inputfile_02.mpg > inputfile_all.mpg ffmpeg -i inputfile_all.mpg -sameq outputfile.avi
なお、concatスキーマ(concat:input.avi.part1|input.avi.part2)はストリームの物理的な結合のみ行うため、この場合は使えない。
入手方法 [編集]
公式サイトでは、コンパイル済みのバイナリは配布されていないため、自分の環境に合わせてソースコードをコンパイルすることもできるが、 次のような手法でバイナリを入手することもできる。
Linux [編集]
RPMForge[1]、Livna[2]等のリポジトリを用いて、yumコマンド等でインストールできる
yum --enablerepo=rpmforge install ffmpeg
apt-getコマンドを用いて、ディストリビュージョンのリポジトリに含まれているパッケージからインストールする
apt-get install ffmpeg
FreeBSD [編集]
portsツリーに含まれており、該当ディレクトリに移動してmake installするかpkg_addコマンドでバイナリパッケージを導入する。
MacOSX [編集]
http://www.ffmpegx.com/ にて MacOSX 用の ffmpegX が配布されている。
Windows [編集]
- ffmpeg.org - http://ffmpeg.zeranoe.com/builds/ にて Windows 版のバイナリが配布されている。
- libav.org - http://win32.libav.org/ にて配布している。
FFmpegを利用・サポートしているアプリケーション [編集]
- エンコーダ
- 動画再生
- コーデック
- ffdshow
- GStreamer FFmpeg plug-in
- Perian
- Bellagio OpenMAX IL - STマイクロエレクトロニクスとノキアによって開発されているオープンソースのOpenMax IL実装
- 3D描画
- マルチメディアプレーヤ
- Gnash - オープンソースのフラッシュプレーヤー
- swfdec - オープンソースのフラッシュプレーヤー
- Moonlight - マイクロソフトが支援してノベルが開発するオープンソースのSilverlight代替実装
- 動画編集
- 音声編集
- Audacity(1.3.6以降)
- VoIP
- 構内交換機 (PBX)
- 画像処理
- OpenCV - インテルによって開発されたコンピュータビジョン向けライブラリ。
- ImageMagick - MPEG-2へ出力する際に使用する。
- ウェブブラウザ
- Google Chrome[5] - HTML5のvideoタグに使用している。また、Chromeをベースにしたメディアプレイヤーを作るという計画がある。
- 動画処理
- ラッパー
FFmpegに含まれるライブラリ群は多数のマルチメディアアプリケーションにより利用されている。また、Palmのスマートフォン(Palm WebOS[8])やソニーのブルーレイプレーヤ(BDP-S1[9]、BDP-S1E/BDP-S300/BDP-S280[10]、BDP-S500/BDP-S2000ES[11])などのデバイスにも利用されている。
音ズレ問題 [編集]
音ズレの原因は大きく分けて以下がある。
- フレームレート
- 復号タイムスタンプ(DTS)/表示タイムスタンプ(PTS)
- A/V Sync
- ディレイ
FFmpegにおいては、フレームレートは内部的に分数を用いて処理をしているためフレームレートによる音ズレが起こることは少ない。ただし小数でフレームレートを保存するコンテナも存在するため、限界もある。FFmpegのライブラリを使用する場合に、分数を小数に直してから処理すると音ズレを起こす場合がある。
コンテナの実装においてDTSをPTSに又はDTSにPTSを代入した場合や、FFmpegのライブラリを利用したアプリケーションにおいてPTSとDTSを正しく扱わなかった場合などに音ズレを伴う問題が起きる場合がある。また、負のPTSや負のDTSを使用している場合において問題が起きる場合がある。
ディレイの問題は、遅延フレーム、エンコードに必要な無音区間の挿入、デコードに必要的に出力される無音サンプルなどによって起こる。一部のコンテナやその実装においては、ディレイはタグなどのメタデータによって打ち消す。コンテナがディレイを打ち消す方法を提供しない場合は、映像/音声データの方を調節するしかない。一部独自拡張のタグにディレイ情報を埋め込むエンコーダ(LAMEのLAMEタグやiTunesのiTunSMPBなど)も存在し、様々なソフトウェア・ハードウェアが相性問題を抱えている。FFmpegはこれらの幾つかにまだ対応していない。
また、変換前の動画を出力したソフトウェア・ハードウェアや変換後の動画を処理するソフトウェア・ハードウェアのバグや仕様によって問題が起こることも多い。変換前の動画にバグがある場合、-bugオプションを使って回避できる場合がある。
関連項目 [編集]
外部リンク [編集]
- FFmpeg
- FFmpeg公式サイト
- FFmpeg Documentation
- まちがいだらけのFFmpegドキュメンテーション - 2006年11月時点の日本語訳
- Libav
出典 [編集]
- ^ Get FFmpeg
- ^ News
- ^ transition: Libav 0.7
- ^ Ubuntu Release Management: Transition: "libav"
- ^ whatwg MPEG-1 subset proposal for HTML5 video codec
- ^ Research White Paper - WHP 155
- ^ BBC R&D - Automated tapeless production - home page
- ^ Open Source Packages
- ^ Model/Module : BDP-S1
- ^ Model/Module : BDP-S1E/BDP-S300/BDP-S280
- ^ Model/Module : BDP-S500/BDP-S2000ES