2 ポイント 投稿者 GN⁺ 2023-12-13 | 1件のコメント | WhatsAppで共有

FFmpeg CLIのマルチスレッド対応

  • FFmpegのコマンドラインインターフェース(CLI)にマルチスレッドをサポートする機能がFFmpeg Gitにマージされた。
  • これはFFmpeg 7.0が来年初頭にリリースされる前に行われた変更であり、動画トランスコーディングで広く使われる重要なオープンソースプロジェクトにとって大きな改善となる。
  • マルチコアプロセッサが一般化した現在、この改善は非常に有益である。

複雑なリファクタリング作業

  • FFmpegの開発者たちは最近の技術発表で、このマルチスレッド化作業を「数十年ぶりにFFmpeg CLIで行われた最も複雑なリファクタリングの1つ」と説明した。
  • 開発者たちはユーザーにテストを呼びかけ、見つかった問題をFFmpeg Tracに報告してほしいと促している。

実装された技術的変更

  • マージされたパッチには、スレッド対応のトランスコードスケジューリング基盤の追加、エンコーディングの別スレッドへの移行、そのほか複数の低レベルな変更が含まれる。
  • FFmpegをスレッドアーキテクチャへ移行することは、各コンポーネント(デマルチプレクサ、デコーダ、フィルタ、エンコーダ、マルチプレクサ)がそれぞれ別スレッドで既に実行されていたものの、今では実際に並列実行できるようになったことを意味する。

GN⁺の見解

  • FFmpegのマルチスレッド対応は、動画トランスコーディング作業の効率を大きく向上させうる重要な進展である。
  • こうした複雑なリファクタリング作業は開発者に多くの課題を突きつけたが、これはFFmpegが継続的に現代のコンピューティング環境へ適応し、進化していることを示している。
  • この変更が実際の性能にどのような影響を与えるのかを、ユーザーと開発者が見守るのは興味深いことになりそうだ。

1件のコメント

 
GN⁺ 2023-12-13
Hacker Newsのコメント
  • マルチスレッド/処理最適化に関する理論

    • 以前は1枚の画像を読み込み、処理してレンダリングするのにかなり時間がかかっていたが、ハードウェアとソフトウェア技術の発展により、今でははるかに高速になっている。
    • 昔は複数のワーカーで1フレームを処理するのが効率的だったが、現在では単一のワーカーが複数ワーカーを動員するよりも効率的にフレームを処理できる。
    • 現代のシステムはFFmpegが最初に作られた当時のシステムとはまったく異なる環境にあり、作業負荷をどう定義し、スケジューリングし、分配し、追跡したうえで最終成果物として結合するかを再考する必要がある。
    • FFmpegチームがこの挑戦を引き受けたことを称賛している。FFmpegはオープンソース・インフラの頂点であり、文明を築くうえで不可欠な要素だ。
  • VDD@Dublinイベントの講演録画

    • 講演の録画を探していたが、著者のサイトでもここでも簡単には見つからなかった。
    • 更新: YouTubeで見つけた!
  • マルチコア性能向上についての考察

    • 現在のエンコーダは、同時に同じフレームを処理するために複数のスレッドを使用している。フレームを複数の領域に分割し、各スレッドが特定の領域を処理する方式が一般的だ。
    • 代案として、キーフレーム・セグメントを独立して処理する方法を提案している。この方法なら、コーデックを一般的かつ効率的な形で並列化でき、フレームを領域に分割することによる圧縮効率の低下や、スレッド間通信のオーバーヘッドもない。
    • この方法の問題点としては、メモリ上にN*キーフレーム周期分のフレームをロードする必要があり、Nフレームをエンコードするための追加メモリ・オーバーヘッドがある。
    • しかし多くの場合、こうした問題点は大きな問題にはならないように思われる。たいていの場合、多くのRAMを使い、固定されたキーフレーム間隔で出力することは受け入れられる。
    • フレーム内並列処理とキーフレーム・セグメント並列処理を組み合わせれば、高い並列性を実現しつつ品質低下を最小限に抑えられる。
  • 継続的なリベース作業の難しさ

    • 毎日入ってくる変更を継続的にリベースするのは相当な挑戦だった。
    • いまやFFmpegに統合されたため、今後は作業がずっと容易になるはずだ。
    • 大きな勝利であり、これは速度向上に大きく寄与するだろう。
  • FFmpegの仮想ディスプレイ・バッファのストリーミング開始時間改善への期待

    • LLMStackプロジェクトでは、FFmpegを使ってブラウザ動画をストリーミングしている。
    • 現在は各ツールを呼び出すたびに、パイプラインを起動する際の目立つ遅延がある。
    • FFmpegの改善は、こうした最適化作業に確実に役立つはずだ。
  • FFmpeg C API講座の宣伝

    • UdemyでFFmpeg C APIを教える講座を宣伝している。
  • FFmpegコードベースへの疑問

    • FFmpegのコードベースには詳しくないが、巨大なコミットなしでどうやって少しずつ変更を進められるのか気になっている。
    • 発表によれば700件のコミットがあったとのことだが、これが別ブランチだったのか、それともプロジェクトに徐々にマージされていったのか気になっている。
  • クラウドサービス運営者の視点

    • Netflixのようなクラウドサービスを運営しているなら、各マシンですでに何千ものFFmpegプロセスを動かしているので、本質的にはすでにマルチコアの作業になっている。
  • VapourSynthのスレッドフィルタ処理経験の共有

    • ほぼ10年間、VapourSynthでのスレッドフィルタ処理を楽しんでいる。
    • 今回のFFmpegの改善も素晴らしいが、「高品質」な動画エンコードのためのVapourSynth前処理 + av1anエンコードのワークフローには大きな変化はないだろう。
  • FFmpegのマルチコア対応への質問

    • FFmpegが、同梱されているすべてのコーデックでマルチコアを使えるようになったのか気になっている。
    • 音声ホスティングサービスのためにFFmpegを使ってLAMEでMP3をエンコードしており、長いファイルのエンコード時間を改善できるならありがたい。