MENU

FFmpeg — 動画・音声処理を支えるデファクトCLI

FFmpeg アイキャッチ
FFmpeg

FFmpegは、動画と音声の符号化・復号・変換・配信をコマンドラインから一括処理できるオープンソースソフトウェアです。2000年12月、フランスのプログラマであるファブリス・ベラール氏によって開発が始まり、現在はLGPL/GPLライセンスで公開されています。libavcodec・libavformat・libavfilterといった内部ライブラリ群と、それらを操る「ffmpeg」「ffprobe」「ffplay」の3つのコマンドから成り、VLC・OBS Studio・YouTube・Netflixなど大規模サービスのバックエンドでも事実上の標準として利用されています。シェルから1行で「動画フォーマットを変換」「字幕を焼き込む」といった処理が完結する手軽さが世界中の開発者を惹きつけてきました。

目次

この記事の目次

  1. FFmpegを支える3つの柱
  2. 2000年ベラール氏の個人プロジェクトから
  3. ワンライナーで効く現場のユースケース
  4. GStreamerとの違い
  5. まとめ

FFmpegを支える3つの柱

FFmpegを支える3つの柱

FFmpegの中核を成すのはlibavcodecで、H.264・H.265・AV1・VP9・MP3・AAC・Opusなど現実世界で使われるほぼすべての音声/動画コーデックをデコード/エンコードできます。ベラール氏自身がH.263デコーダを書き始めたのが起点で、その後コミュニティの貢献によりコーデックのカバー範囲が拡大しました。他のソフトが「FFmpegに丸投げ」する形で動画機能を実装するケースは枚挙にいとまがなく、Chromeのメディア再生バックエンドにもlibavcodecが組み込まれています。

libavformatはMP4・MKV・WebM・MPEG-TS・HLS・DASHといったコンテナを読み書きするモジュール群で、libavfilterは「scale」「crop」「fade」「overlay」「subtitles」など数百種類のフィルタを使って映像/音声を加工する仕組みを提供します。コマンドラインからこれら3レイヤーを組み合わせて、たとえば「字幕付き4K MKVをHLSにトランスコードしながらサムネイル画像を生成する」といった作業を1コマンドで書ききれるのが、FFmpegが「メディア処理のスイスアーミーナイフ」と呼ばれる所以です。

2000年ベラール氏の個人プロジェクトから

2000年ベラール氏の個人プロジェクトから

FFmpegの開発は2000年12月にファブリス・ベラール氏個人によって始められました。ベラール氏はTinyCC(小型Cコンパイラ)やQEMU(仮想化エンジン)の作者としても知られる多才なエンジニアで、MPEG-4再生のためのデコーダを書き始めたのがFFmpegの原点です。オープンソースとして公開された後、コミュニティの貢献でlibavcodec・libavformatといった内部ライブラリが整備され、瞬く間にメディア処理のデファクトに成長しました。

2011年にメンテナ間の方針対立から「Libav」というフォークが派生し、Debian系ディストリビューションがLibavを採用するなど分裂期がありましたが、2015年頃にはFFmpeg側が主導権を取り戻し、Libavは2018年に開発を停止しました。2020年代に入るとAV1コーデックの普及やNVIDIA NVENC・Intel QSV・Apple VideoToolboxによるハードウェアエンコード対応が進み、クラウド側のメディア処理基盤としても採用が拡大しています。GitHub上のリポジトリは現在も活発に更新され、半年ごとのメジャーリリースが続いています。

ワンライナーで効く現場のユースケース

ワンライナーで効く現場のユースケース

現場で最もよく見るFFmpegの使い方は、配信向けフォーマット変換です。撮影素材のMOVやMP4を、HLS(Apple系の生中継規格)やDASH(MPEG標準のアダプティブ配信)に変換するパイプラインは、YouTube・Netflix・Vimeoなど主要動画サービスの内部でも基本的にFFmpegで構築されています。字幕の焼き込みや、複数音声トラックからの抜き出し、特定区間のトリミングといった編集作業も1コマンドで終わるため、放送局のニュース現場やSNS運用にも活用されています。

ライブ配信のリエンコード/中継、Twitchへの転送、Zoom収録の後加工なども典型例で、OBS Studioが内部でFFmpegを使っているのは有名です。X11・Wayland・AVFoundation・DirectShowといった画面キャプチャ系のソースを直接読み取り、画面録画ツールとしても機能します。「動画から1枚目のサムネイルを抜く」「等間隔でGIFアニメを書き出す」といった軽作業もコマンド1本で完結するため、CMSのバックエンドやCI/CDワークフローに組み込んで自動化する利用法が広く根付いています。

GStreamerとの違い

GStreamerとの違い

似た立ち位置のメディアフレームワークとしてGStreamerがありますが、得意領域は大きく異なります。FFmpegはCLIから1コマンドで完結する「処理パイプラインのまとまった実行ファイル」として設計されており、バッチ処理やサーバサイドのトランスコードに最適化されています。対応コーデックの数は現在も業界最多級で、新しいフォーマット対応の速さでも先行することが多いです。

一方GStreamerは「素材→デコーダ→フィルタ→出力」というパイプラインをアプリケーション内部で柔軟に組み立てるためのフレームワークで、GNOME系のメディアプレイヤーやLinuxデスクトップ用のアプリ、組み込みLinux機器のメディアパスで広く使われます。プラグイン単位で機能を着脱できる構造のため、アプリ組み込みとしてはGStreamer、サーバ側の一括バッチ処理にはFFmpegという棲み分けが定着しています。両者は競合よりも、目的に応じて使い分ける関係といえます。

まとめ

FFmpegは2000年にファブリス・ベラール氏が開始したオープンソースのメディア処理ツールで、libavcodec/libavformat/libavfilterを核にあらゆるコーデック・コンテナ・フィルタをCLIから扱えるデファクトとなりました。YouTube・Netflix・OBSなど大規模サービスのバックエンドを支え、現在もメディア処理の現場で第一に選ばれる存在です。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次