ハクソク

世界を動かす技術を、日本語で。

FFmpeg 8.1

概要

  • FFmpegはクロスプラットフォーム対応の音声・映像の記録・変換・配信ソリューション
  • 最新バージョンではVulkanベースのコーデックやハードウェア支援機能を強化
  • 多様なデコーダ・エンコーダ、新フォーマット、新フィルタの追加
  • 内部構造の近代化とバグ修正、OSSとしての品質向上
  • ユーザー・ディストリビューター・システム統合者にアップグレード推奨

FFmpegの概要と基本機能

  • 音声・映像の記録、変換、ストリーミングをワンストップで実現するオープンソースソフトウェア
  • クロスプラットフォーム対応、コマンドライン操作による高い柔軟性
  • 例: ffmpeg -i input.mp4 output.aviで動画変換が可能
  • 多数の入力・出力フォーマット、コーデックをサポート
  • 変換・編集・配信ワークフローの自動化・統合が容易

FFmpeg 8.1 "Hoare"(2026年3月)

  • xHE-AAC、**Mps212(実験的)**など新デコーダ追加
  • MPEG-Hデコーディング(libmpeghdec経由)、EXIFメタデータ解析対応
  • LCEVCメタデータ処理、Vulkanベースコーデック強化(ProResエンコード/デコード、DPXデコード)
  • D3D12によるH.264/AV1エンコード、関連フィルタ追加
  • IAMFのProjection mode、Ambisonic Audio Elementsのmux/demux対応
  • 新フォーマット・新フィルタ追加(例:drawvg, vpp_amf)
  • 内部処理の大幅な改善とバグ修正、swscale再設計の基盤整備
  • Vulkanコーデックの初期化高速化(GLSLランタイムコンパイル不要化)

FFmpeg 8.0 "Huffman"(2025年8月)

  • APV, ProRes RAW, RealVideo 6.0, Sanyo LD-ADPCM, G.728など新デコーダ追加
  • VVCデコーダの機能強化(IBC, ACT, Palette Mode対応)
  • Vulkanベースコーデック追加(FFv1、ProRes RAW)
  • ハードウェアデコード:Vulkan VP9, VAAPI VVC, OpenHarmony H264/5
  • ハードウェアエンコード:Vulkan AV1, OpenHarmony H264/5
  • 新フォーマット・フィルタ追加(MCC, G.728, Whisper, colordetect等)
  • Vulkan 1.3対応GPUで動作、並列デコード可能なコーデックのみ対応
  • インフラ刷新(Forgejo導入、メーリングリストサーバー更新)

FFmpeg 7.1 "Péter"(2024年9月)

  • VVCデコーダが実験的段階から安定版に昇格
  • AAC USAC(xHE-AACの一部)のネイティブデコーダ追加
  • MV-HEVC(ステレオスコピック符号化)デコード対応
  • LC-EVCデコード(外部ライブラリ利用)
  • Vulkanエンコード(H264, HEVC)対応、完全なVulkanパイプライン実現
  • フルレンジ画像の色範囲伝達の信頼性向上
  • Matroska・MP4でのクロッピングメタデータ対応
  • AV1エンコーダのVulkan対応を目指す

品質管理・OSSとしての進展

  • Coverityによる静的解析での欠陥密度が過去最低水準
  • Sovereign Tech Fundからの資金提供による持続的開発体制

FFmpeg 7.0 "Dijkstra"(2024年4月)

  • VVCデコーダ(実験的)、IAMFサポート、マルチスレッドCLI
  • 後方互換性なし(6.0以前の非推奨API削除、C11対応必須)
  • AVChannelLayout API導入(柔軟なチャンネルレイアウト対応)
  • 多数の新フォーマット・コーデック・フィルタ追加
  • 約2000コミット、100人以上の貢献者による大規模アップデート

主要な技術トピック

  • Vulkan:オープン標準API、GPUの計算能力を活用した高速化
  • ハードウェア支援:各種GPU/プラットフォームでのデコード・エンコード最適化
  • マルチスレッド化:CLIツールの並列処理によるスループット向上
  • 新API/メタデータ:色範囲、クロッピング、音声空間化などのメタデータ管理強化
  • OSS品質管理:静的解析・インフラ刷新・資金調達による持続的成長体制

アップグレード推奨

  • 最新安定版へのアップグレードを推奨(git master利用者を除く)
  • 新機能・セキュリティ・互換性のため、定期的な更新が重要

Hackerたちの意見

チェンジログ: ffprobe -codecオプション EXIFメタデータ解析 gfxcapture: Windows.Graphics.Captureを使ったウィンドウ/モニターキャプチャ hxvsデマルクサー HXVS/HXVT IPカメラフォーマット MPEG-H 3Dオーディオデコーディング mpeghdecを通じて D3D12 H.264エンコーダー drawvgフィルター libcairo経由 ffmpeg CLI タイルHEIFサポート D3D12 AV1エンコーダー ProRes Vulkan hwaccel DPX Vulkan hwaccel Rockchip H.264/HEVCハードウェアエンコーダー vf_scale_d3d12フィルター追加 JPEG-XSパーサー JPEG-XSデコーダーとエンコーダー libsvtjpegxsを通じて JPEG-XS生ビットストリームマルチプレクサーとデマルクサー IAMFプロジェクションモード アンビソニックオーディオエレメントのマルチプレクシングとデマルクシング vf_mestimate_d3d12フィルター追加 xHE-AAC Mps212デコーディングサポート(実験的) 古いHLSプロトコルハンドラーを削除 Vulkanコンピュートコーデックの最適化 swscale Vulkanサポート LCEVCメタデータビットストリームフィルター vf_deinterlace_d3d12フィルター追加 ffprobe: フレームを読み取るときにストリームセクションでrefsフィールドのみ表示 ProRes Vulkanエンコーダー LCEVCパーサー LCEVC拡張レイヤーのMPEG-TSへのエクスポート
TIL: JPEG XS - 低遅延実装向けに視覚的にも数学的にもロスレスな品質を提供する画像およびビデオコーデック。さらに、JPEG XSで圧縮されたコンテンツは元の非圧縮コンテンツと区別がつかない。 https://en.wikipedia.org/wiki/JPEG_XS
> gfxcapture: Windows.Graphics.Captureを使ったウィンドウ/モニターキャプチャ > このソースはアプリケーションウィンドウやモニター全体の低オーバーヘッドキャプチャを提供します。フィルターはd3d11形式のハードウェアフレームを出力します; システムメモリフレームが必要な場合はhwdownload,format=を使用してください。OSSのDiscord代替を開発するなら、これが強く計画を変えることになる。Chromiumは、成熟したスクリーンキャプチャAPIのおかげで、最初に始めるには良いコアに見えた。WebRTCも大きな要素だけど、他にも方法はある。今はネイティブデスクトップアプリ(つまり、ブラウザベースじゃない)がすごく魅力的に見えてきた。
Rockchipのハードウェアエンコーディングにはあまり期待しない方がいいよ。これはrkmppベースで、アップストリームのソリューションじゃないから。これにはRockchipカーネルが必要だと思う。
それでも大きなことだよ、以前は自分でffmpegをコンパイルしなきゃいけなかったから。
KhronosがFFmpegのVulkanコンピュートコーデックについての投稿を公開したよ。 https://www.khronos.org/blog/video-encoding-and-decoding-wit...
https://news.ycombinator.com/item?id=47410271
Vulkanのコンピュートコーデックの期待されるパフォーマンスを示す「HW」ガイドってどこかにある?
> あ、新しいffmpegのバージョンが出た、すぐにソースからビルドするよ...いや、待てないからバイナリをダウンロードしよう。 https://www.youtube.com/watch?v=9kaIXkImCAM
自分はffmpegをソースからビルドすることが多いんだけど、パッケージマネージャーは特許コーデックのサポートを含めてないことが多いからね。(デブ・マルチメディアみたいなバイナリを手に入れるためのリポジトリがあるのは知ってるけど。)
ffmpegをソースからビルドするのは実際、結構簡単だよ。自分的には一番難しいのは必要なコーデックを動かすことかな;これにはちょっと時間がかかることもある。どの音声と動画のコーデックが必要か分かってて、ちゃんとインストールできれば、ffmpegのコンパイルは本当にシンプルでストレートだよ。自分はもう10年以上ソースからffmpegをビルドしてるけど、ほぼいつも上手くいってる。参考までに、今のconfigureオプションはこんな感じだよ:./configure --prefix=/usr/ --enable-gnutls --enable-gpl --enable-libmp3lame --enable-libaom --enable-libopus --enable-libspeex --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libx264 --enable-libx265 --enable-nonfree --enable-pthreads --enable-shared --enable-version3 --extra-libs=\"-ldl\" --disable-doc --disable-libopenjpeg --disable-libpulse --disable-static もっとコーデックを追加できるかもしれないし、いくつかのオプションはもう必要ないかもしれない(これも数年前に変えたし)けど、大体はうまくいってるよ。自分は主にいくつかの.mp4ファイルに焦点を当ててるから、これにはx264やx265が必要だと思う(あと、Googleのコーデックも一つくらい)。でも、コーデックのステップを過ぎれば本当に簡単だよ。最初は一つの良い音声コーデックと一つの良い動画コーデックだけで始めてもいいしね。ffmpegが多くのコーデックをサポートしてるのが好きな理由の一つは、mpvを使えるからなんだ。mpvは本当に素晴らしいし、VLCよりも好きだよ、VLCも悪くはないけどね。
ffmpegにちょっとでも詳しい人は、この動画を見逃さないで。めっちゃ面白いし、`yadif`(今日触ったやつ!)からmkvtoolnix、さらには「ファイル名にアポストロフィがあると爆発するからね。理解できてないから。」まで色々あるよ。
このリリースのどれくらいが企業や大手テックの社員によって行われたんだろう?
どれくらい貢献してるかは分からないけど、メディアトランスコーディングをやってるほとんどの(大きな)テック企業はffmpegを使ってるよね。
FFmpegは本当に素晴らしいよ。ただ、使い方がもっとシンプルになればいいなって思う。普通のことはもちろん、上級フィルタリングのためにもね。昔のavisynthは結構クールだったよね。動画や音声の操作をスクリプトみたいにできて、UNIX/Linuxのパイプみたいな感じだけど、もうちょっと簡単だった気がする。FFmpegも似たような操作ができるけど、ここで何を覚えるのは…難しい。全体の使用APIがもっとシンプルになってほしいけど、FFmpegの開発チームの中でこれを考えてる人はいないみたい。 :( でも、これを望んでるのは自分だけじゃないはず… FFmpegが全体的に素晴らしいことは変わらないけど、もっと良くなる余地があると思う。
もし動画のエンコードをもっと簡単にしたいなら(「普通のこと」)、Handbrakeがそのための定番ツールだよ。
LLMの一番の使い道の一つは、ffmpegみたいなツールのための正しいコマンドラインオプションを見つける手助けをすることだよ。
-filter_complexの複雑さに対する恐怖を克服したら、意外と悪くないよ。コマンドラインは確かに intimidating に見えるけど、「フィルターチェーン」って考えるとちょっと楽になる。全てのことをコマンドに入れなきゃいけないから面倒だけど、複雑になるほどデバッグが大変になるね。でも、検索や置換で改行を入れる方法を覚えれば、楽になるよ。ごちゃごちゃしたSQLを分けるのと似てる。デバッグの最悪なところは、フィルターチェーンを間違って解釈するせいでエラーメッセージが誤解を招くこと。どこかでタイプミスしたせいでね。「これだと思ってるから、たぶん別のところでミスったんだな」って分かるようになってくる。正直、私は毎日ffmpegを使ってて、目がチカチカするようなコマンドも扱ってるから、たまに使う人には慣れるまで時間がかかるだろうね。あと、シェルスクリプトとして保存するのがすごく助かる。少し調整可能なパラメータで同じことをする簡単なスクリプトが%1や%2を使って作れるし、getoptsを使えばもっとクリーンにできるよ。テスト済みの複雑なコマンドの中で小さな変更ができるようになる。
いい仕事だね。
最高のオープンソースツールの一つだと思う。自分はPlexやJellyfin、Tunarr、ローカルの音楽ファイルをよく使ってる。毎週、字幕を抽出したり、動画をトリミングしたり、音楽フォーマットを変えたり、音声トラックを削除したりするために使ってる。さっきの段落を書いた後、プロジェクトに寄付したことがないことに気づいた;そろそろそれを変えないと。
我々が気づいていないような、いろんなものの低レベルなコンポーネントだよ。