FFmpeg

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。2400:4052:7204:bd00:64a6:8c3b:272c:412a (会話) による 2020年9月23日 (水) 13:36個人設定で未設定ならUTC)時点の版であり、現在の版とは大きく異なる場合があります。

FFmpeg
FFmpegのロゴ
ArchLinux で動作中の FFmpeg
作者 Fabrice Bellard
開発元 FFmpegチーム
初版 2000年12月20日 (23年前) (2000-12-20)[1]
最新版 7.0[2] ウィキデータを編集 - 2024年4月5日 (20日前) [±]
リポジトリ ウィキデータを編集
プログラミング
言語
C言語アセンブリ言語[3]
対応OS WindowsmacOSLinux(その他各OS向けにコンパイル可能)[4]
プラットフォーム x86ARMPowerPCMIPSDEC AlphaBlackfinAVR32SH-4SPARC(その他各デスクトップPC向けにコンパイル可能)
サポート状況 活発
種別 マルチメディアフレームワーク
ライセンス LGPL 2.1+, GPL 2+
NVIDIA Performance Primitivesでコンパイルした場合は再頒布不可[5]
公式サイト ffmpeg.org ウィキデータを編集
テンプレートを表示

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

解説

FFmpegは、単体ではGUIを持たないツールでUNIXコマンドのように振る舞う。その為、対話式アプリケーションとして使用される場合、フロントエンドを用いる事も多い。コマンドラインから実行するCUIとして配布されているのは、ユーザが必要とすればフロントエンドを利用でき、スクリプトなどのバッチ処理を行う際に呼び出す事もできるという利点からである。また、FFserverと組み合わせる事により、ファイルシステムデバイスファイルストリーミングサーバ間のフィルタとしても動作する。

2011年3月13日にFFmpegの開発は、開発体制の対立からffmpeg.orgとlibav.orgに分裂した。どちらもffmpegというソフトウェアをリリースしているが、Libav英語版側はavconvに名称を切り替える作業を進めている。この分裂に伴い、Debian[7]Ubuntu[8] 11.04、Gentoo LinuxはLibav側を採用した。

2015年7月にDebianはセキュリティ問題への対応姿勢からLibavを排除し、FFmpeg採用に戻った。UbuntuもFFmpeg採用に戻っている[9]

サポートしているファイル形式

サポートしている画像形式

サポートしているコーデック

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 installコマンドを用いて、ディストリビュージョンのリポジトリに含まれているパッケージからインストールする(root権限必要)

sudo apt install ffmpeg  

FreeBSD

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

macOS

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

Windows

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

FFmpegに含まれるライブラリ群は多数のマルチメディアアプリケーションにより利用されている。また、Palmのスマートフォン(Palm WebOS[13])やソニーブルーレイプレーヤ(BDP-S1[14]、BDP-S1E/BDP-S300/BDP-S280[15]、BDP-S500/BDP-S2000ES[16])などのデバイスにも利用されている。

音ズレ問題

音ズレの原因は大きく分けて以下がある。

  • フレームレート
  • 復号タイムスタンプ (DTS)/表示タイムスタンプ (PTS)
  • A/V Sync
  • ディレイ

FFmpegにおいては、フレームレートは内部的に分数を用いて処理をしているためフレームレートによる音ズレが起こることは少ない。ただし小数でフレームレートを保存するコンテナも存在するため、限界もある。FFmpegのライブラリを使用する場合に、分数を小数に直してから処理すると音ズレを起こす場合がある。

コンテナの実装においてDTSをPTSに又はDTSにPTSを代入した場合や、FFmpegのライブラリを利用したアプリケーションにおいてPTSとDTSを正しく扱わなかった場合などに音ズレを伴う問題が起きる場合がある。また、負のPTSや負のDTSを使用している場合において問題が起きる場合がある。

ディレイの問題は、遅延フレーム、エンコードに必要な無音区間の挿入、デコードに必要的に出力される無音サンプルなどによって起こる。一部のコンテナやその実装においては、ディレイはタグなどのメタデータによって打ち消す。コンテナがディレイを打ち消す方法を提供しない場合は、映像/音声データの方を調節するしかない。一部独自拡張のタグにディレイ情報を埋め込むエンコーダ(LAMEのLAMEタグやiTunesのiTunSMPBなど)も存在し、様々なソフトウェア・ハードウェアが相性問題を抱えている。FFmpegはこれらの幾つかにまだ対応していない。

また、変換前の動画を出力したソフトウェア・ハードウェアや変換後の動画を処理するソフトウェア・ハードウェアのバグや仕様によって問題が起こることも多い。変換前の動画にバグがある場合、-bugオプションを使って回避できる場合がある。

出典

  1. ^ Initial revision - git.videolan.org/ffmpeg.git/commit”. git.videolan.org (2000年12月20日). 2013年12月25日時点のオリジナルよりアーカイブ。2013年5月11日閲覧。
  2. ^ https://ffmpeg.org/download.html#release_7.0.
  3. ^ Developer Documentation”. ffmpeg.org (2011年12月8日). 2012年1月4日閲覧。
  4. ^ Download”. ffmpeg.org. FFmpeg. 2012年1月4日閲覧。
  5. ^ オプションの外部ライブラリであるNVIDIA Performance Primitivesはプロプライエタリなソフトウェアであり、GPLの条件に基づいて配布することができないため
  6. ^ A complete, cross-platform solution to record, convert and stream audio and video.> http://www.ffmpeg.org/
  7. ^ transition: Libav 0.7
  8. ^ Ubuntu Release Management: Transition: "libav"
  9. ^ Why Debian returned to FFmpeg [LWN.net]”. 2015年12月12日閲覧。
  10. ^ whatwg MPEG-1 subset proposal for HTML5 video codec
  11. ^ Research White Paper - WHP 155
  12. ^ BBC R&D - Automated tapeless production - home page
  13. ^ Open Source Packages
  14. ^ Model/Module : BDP-S1
  15. ^ Model/Module : BDP-S1E/BDP-S300/BDP-S280
  16. ^ Model/Module : BDP-S500/BDP-S2000ES

関連項目

外部リンク