FFmpeg

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
FFmpeg
FFmpeg Logo new.svg
FFmpeg.png
開発元 FFmpegチーム
最新版 2.4.1 - 2014年09月22日(9日前) (2014-09-22[1][±]
プログラミング言語 C言語
対応OS クロスプラットフォーム
サポート状況 活発
種別 マルチメディアフレームワーク
ライセンス LGPL, GPL
公式サイト ffmpeg.org
テンプレートを表示
Libav
開発元 Libav
最新版 9.10[2] / 2013年10月10日(11か月前) (2013-10-10
プログラミング言語 C言語
対応OS クロスプラットフォーム
サポート状況 活発
種別 マルチメディアフレームワーク
ライセンス LGPL, GPL
公式サイト libav.org
テンプレートを表示

FFmpeg(エフエフエムペグ)は動画音声を変換することのできるUNIX系OS生まれのフリーソフトウェアであり、libavcodec(動画/音声のコーデックライブラリ)、libavformat(動画/音声のコンテナライブラリ)、libswscale(色空間・サイズ変換ライブラリ)、libavfilter(動画のフィルタリングライブラリ)などを含む。ライセンスコンパイル時のオプションによりLGPLGPLに決定される。コマンドラインから使用することができる。対応コーデックが多く、多彩なオプションを使用可能なため、幅広く利用されている。

解説[編集]

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 側を採用した。

サポートしているファイル形式[編集]

  • 4xm
  • 8088flex TMV
  • Adobe Filmstrip
  • Audio IFF (AIFF)
  • American Laser Games MM
  • 3GPP AMR
  • Apple HTTP Live Streaming
  • ASF
  • AVI
  • AVISynth
  • AVS
  • Beam Software SIFF
  • Bethesda Softworks VID
  • Bink
  • Bitmap Brothers JV
  • Brute Force & Ignorance
  • BWF
  • Interplay C93
  • Delphine Software International CIN
  • CD+G
  • Core Audio Format
  • CRC testing format
  • Creative Voice
  • CRYO APC
  • D-Cinema audio
  • Deluxe Paint Animation
  • DFA
  • DV video
  • DXA
  • Electronic Arts cdata
  • Electronic Arts Multimedia
  • FFM (FFserver live feed)
  • Flash (SWF)
  • Flash 9 (AVM2)
  • FLI/FLC/FLX animation
  • Flash Video (FLV)
  • framecrc testing format
  • FunCom ISS
  • GIF アニメーション
  • GXF
  • id Quake II CIN video
  • id RoQ
  • IEC61937 encapsulation
  • IFF
  • Interplay MVE
  • IV8
  • IVF (On2)
  • LMLM4
  • LOAS
  • LXF
  • Matroska
  • Matroska audio
  • FFmpeg metadata
  • MAXIS XA
  • MD Studio
  • Mobotix .mxg
  • Monkey's Audio
  • Motion Pixels MVI
  • RDT
  • REDCODE R3D
  • RealMedia
  • Redirector
  • Renderware TeXture Dictionary
  • RL2
  • RPL/ARMovie
  • Lego Mindstorms RSO
  • RTMP
  • RTP
  • RTSP
  • SAP
  • SDP
  • Sega FILM/CPK
  • Sierra SOL
  • Sierra VMD
  • Smacker
  • Sony OpenMG (OMA)
  • Sony PlayStation STR
  • Sony Wave64 (W64)
  • SoX native format
  • SUN AU format
  • テキストファイル
  • THP
  • Tiertex Limited SEQ
  • True Audio
  • VC-1 test bitstream
  • WAV
  • WavPack
  • WebM
  • Windows Televison (WTV)
  • Wing Commander III movie
  • Westwood Studios audio
  • Westwood Studios VQA
  • XMV
  • xWMA
  • YUV4MPEG pipe
  • Psygnosis YOP

サポートしている画像形式[編集]

サポートしているコーデック[編集]

libavcodecを参照。

サポートしているプロトコル[編集]

サポートしている入出力デバイス[編集]

オプション[編集]

FFmpegでは数多くのオプションを利用することができる。それらはffmpegのバージョンによって差異があるため、利用前にオプションやコーデックの表記を確認することが望ましい。オプションは ffmpeg -h で表示できる。また、コーデック名等は ffmpeg -formatsffmpeg -codecs で表示できる。( コーデック名は下記注意事項参照

一般的なオプション等の例を以下に挙げる。

メインオプション[編集]

  • -i 入力ファイル名を設定する。
  • -f 出力フォーマットの指定。
  • -y 出力するファイル名と同じ名前のファイルが出力先にある場合に上書する。
  • -fs 指定したファイルサイズになったら変換を終了する。
  • -ss 指定した時間から変換を開始する。
  • -title タイトルを設定する。
  • -timestamp タイムスタンプを設定する。
  • -vsync フレームをカットしたり加えたりして音声に動画を同期させる。

ビデオオプション[編集]

  • -b 動画部分のビットレートを設定、初期設定は200kbps。( 単位は下記注意事項参照
  • -r フレームレートの設定 初期設定は25
  • -s 動画のサイズを横×縦で設定
  • -aspect アスペクト比の設定
  • -vn ビデオを無効にする。音声部分のみのエンコードなどに使用する。
  • -vcodec ビデオコーデックを設定 設定しない場合は入力ファイルと同じコーデックを使用する。
  • -pix_fmt ピクセルフォーマット設定。例えば "-vcodec libx264" 等においてQuickTimeQTKitAVFoundation (AVKit) 互換にするには "-pix_fmt yuv420p" も合わせて指定。

オーディオオプション[編集]

  • -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 -formatsffmpeg -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ファイルに変換する例
avconv -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
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
  • Debian, Ubuntuなど、APTがインストールされた環境

apt-getコマンドを用いて、ディストリビュージョンのリポジトリに含まれているパッケージからインストールする

apt-get install ffmpeg  

FreeBSD[編集]

portsツリーに含まれており、該当ディレクトリに移動してmake installするかpkg_addコマンドでバイナリパッケージを導入する。

MacOSX[編集]

http://www.ffmpegx.com/ にて MacOSX 用の ffmpegX が配布されている。

Windows[編集]

FFmpegを利用・サポートしているアプリケーション[編集]

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オプションを使って回避できる場合がある。

関連項目[編集]

外部リンク[編集]

出典[編集]

  1. ^ Get FFmpeg” (2014年9月22日). 2014年10月2日閲覧。
  2. ^ News
  3. ^ transition: Libav 0.7
  4. ^ Ubuntu Release Management: Transition: "libav"
  5. ^ whatwg MPEG-1 subset proposal for HTML5 video codec
  6. ^ Research White Paper - WHP 155
  7. ^ BBC R&D - Automated tapeless production - home page
  8. ^ Open Source Packages
  9. ^ Model/Module : BDP-S1
  10. ^ Model/Module : BDP-S1E/BDP-S300/BDP-S280
  11. ^ Model/Module : BDP-S500/BDP-S2000ES