FFmpegの高度な設定

このページでは、FFmpeg メディアバックエンドの設定可能な機能を示します。すべての機能は非公開 API の一部であり、将来、確認なしに変更または削除される可能性があります。環境変数はデフォルトで子プロセスに継承され、意図しない結果をもたらす可能性があることに注意してください。

FFmpeg と Qt FFmpeg メディアバックエンドからのログを有効にする

環境変数を使用して、高度な FFmpeg ログ出力を設定できます。

  • QT_FFMPEG_DEBUG=1 を有効にすると、FFmpeg ライブラリからの特別なロギングが可能になり、FFmpeg ライブラリが関係する問題を理解するのに役立ちます。
  • QT_LOGGING_RULES="*.ffmpeg.*=true" FFmpeg プラグインの Qt developer ログをオンにします。FFmpeg プラグインのログカテゴリーは通常 "qt.multimedia.ffmpeg.XXX" と呼ばれます。すべての Qt Multimedia の開発者ログを有効にするには、次のように設定します。QT_LOGGING_RULES="*.multimedia.*=true"
  • QT_FFMPEG_DEBUGQT_LOGGING_RULES の両方を設定すると、QMediaPlayerQAudioDecoderQMediaRecorder からのエンコードまたはデコード機能が初めて使用されたときに、利用可能なすべての FFmpeg コーデックが出力されます。この情報は、Qt Multimedia が適切な FFmpeg デコーダーまたはエンコーダーを見つけられない状況を理解するのに役立ちます。コーデック固有の問題が発生した場合は、コーデックダンプを Qt バグレポートに添付することをお勧めします。

実験的なFFmpegコーデックを有効にする

FFmpegはOpusやVorbisのようないくつかのコーデックを実験的なものとして公開しています。実験的なコーデックは厳密に標準に従っておらず、不安定な場合があります。これらはデフォルトでは無効になっています。有効にするには、環境変数QT_ENABLE_EXPERIMENTAL_CODECS=1 を設定してください。

許可されるネットワークプロトコルの設定

セキュリティ上の理由から、FFmpeg ライブラリはネストされたプロトコル、つまり他のプロトコルで使用されるプロトコルの使用を制限しています。FFmpeg protocols documentation を参照してください。環境変数QT_FFMPEG_PROTOCOL_WHITELIST を使って、許可されるプロトコルを明示的に上書きすることもできます:

export QT_FFMPEG_PROTOCOL_WHITELIST=file,crypto,rtp,udp

警告 警告:ネストされたプロトコルは、信頼されていないデータと一緒に使われると、セキュリティの脆弱性を引き起こす可能性があることに注意してください。セキュリティとビジネス要件に合致するプロトコルのみを許可してください。

バックエンドのハードウェアアクセラレーションの設定

  • ハードウェアアクセラレーションバックエンドを明示的にデコードおよびエンコードします。

    FFmpeg プラグインは、可用性、安定性、効率性、実装の詳細に基づいて、デコードとエンコードのハードウェアアクセラレーションバックエンドを選択します。選択したハードウェアバックエンドが期待通りに動作しない場合は、カスタムの優先順位リストを設定するか、環境変数QT_FFMPEG_DECODING_HW_DEVICE_TYPESQT_FFMPEG_ENCODING_HW_DEVICE_TYPES を使ってすべてのハードウェアバックエンドを無効にしてみてください。利用可能なハードウェアバックエンドは以下の通りです:

    • cuda
    • drm
    • dxva2
    • d3d11va
    • d3d12va
    • オープンセル
    • qsv
    • vaapi
    • vdpau
    • ビデオツールボックス
    • メディアコーデック
    • バルカン

    ただし、ハードウェアバックエンドが利用できるかどうかは、OS、インストールされているドライバ、FFmpegのバージョン、設定に依存します。デバイスの種類によっては Qt Multimedia で Qt メンテナがテストしていないものもあり、意図したように動作しない可能性があることを覚えておくことが重要です。執筆時点では、以下のようなバックエンドがあります:

    • drm
    • opencl
    • qsv
    • vdpau
    • バルカン

    # Set vdpau or cuda encoding hardware backends
    export QT_FFMPEG_ENCODING_HW_DEVICE_TYPES=vdpau,cuda
    
    # Set only d3d12va decoding hardware backend
    export QT_FFMPEG_DECODING_HW_DEVICE_TYPES=d3d12va
    
    # Disable decoding hw backends (set an empty list)
    export QT_FFMPEG_DECODING_HW_DEVICE_TYPES=,
  • ハードウェアテクスチャ変換。

    デコードおよびレンダリングされたビデオフレームにGPUベースの変換を利用することで、CPU使用率を大幅に削減することができます。私たちは、できるだけ多くのハードウェアバックエンドでこの機能を利用することを目指しています。レンダリングの問題に気づいたら、原因を特定するためにGPUテクスチャ変換なしでレンダリングをテストすることを検討してください。GPU テクスチャ変換を無効にするには、QT_DISABLE_HW_TEXTURES_CONVERSION 環境変数QT_DISABLE_HW_TEXTURES_CONVERSION=1 を使用します。VAAPI ハードウェアバックエンドでは、ハードウェアテクスチャコンバージョ ンはデフォルトで無効になっています。有効にするにはQT_XCB_GL_INTEGRATION=xcb_egl を設定します。

  • コーデックプロファイルの不一致を許可する。

    コーデック・プロファイルが、報告されたハードウェアの能力と一致しない場合、その不一致を無視して、QT_FFMPEG_HW_ALLOW_PROFILE_MISMATCH=1 経由でハードウェア・デコードを許可することができます。このオプションを設定すると、たとえば、VAAPI ハードウェアバックエンドでベースラインプロファイル H.264 のハードウェアアクセラレーションデコーディングを使用する場合に便利です。このようなストリームのほとんどは、既存の H.264 ハードウェアデコーダーの制約を満たしているからです。

    警告 ストリームがサポートされていない場合、強制的なハードウェアデコードによって、まったく正しくないビデオ出力が発生する可能性があります。

本書に含まれる文書の著作権は、各所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。