web-dev-qa-db-ja.com

CPUを集中的に使用しないビデオトランスコーディングのためのコーデックの選択

ローエンド(低速CPU)プラットフォームでmkv/H264ビデオのリアルタイムトランスコーディングを実現しようとしています。

次のコマンドラインをテストハーネスとして使用します。

avconv -i test.mkv -c:v mjpeg -q:v 3 -c:a libmp3lame -f (codec) -y /dev/null

次の結果が得られます。rawvideoコーデックを使用して37fps、mpeg4コーデックを使用して21fps。

そこで、より高速な圧縮を提供する「中間」コーデックを探しています。結果のデータは保存されず、UPnPサーバーによって直接ストリーミングされるため、あまり多くの圧縮率は必要ありません(ただし、明らかに、ネットワークを生のビデオで飽和させないことが望ましいです)。

何かアドバイス?

よろしく。

2
oparisy

MPEG2コーデックを使用してみることができます

MPEG2はエンコードが非常に高速です。これは機能するはずです-c:v mpeg2video -r 25 -b:v 8192kビットレートを上げると、レート制御の余裕が増し、エンコード速度が速くなります。 -intraオプションを試すこともできます。これにより、ビットレートが大幅に高くなりますが、動き推定が無効になります。それだけでは不十分な場合は、視覚的な品質を犠牲にしてエンコードを高速化するために使用できる量子化ステップパラメータが必要です。

超高速プリセットで低解像度のH264を試すこともできます

ローエンドと言えば、ローエンドの意味がわかりません。Core2Duo 2ghzCPUでリアルタイムに720pH264にトランスコードできます。ローエンドのアイデアがあれば、これを提供します。エンドはローエンドの私の考えに似ています:)

libx264コーデックは、一定の視覚品質でビットレートとエンコード速度を交換するエンコーダーのプリセットを受け入れます。

最速のプリセットで試すことができます:

-c:v libx264 -preset ultrafast -tune zerolatency -profile high10  \
    -bsf:v h264_mp4toannexb

(ストリーミングする場合は、-bsf:vパラメーターが必要です)

-cbrパラメータで遊んでみることもできます。これは、ビット割り当てを制御し、視覚的な品質/ビットレートを制御します。デフォルト値は23です。 0はロスレスで、51は最低品質/最低ビットレートです。

解像度はエンコード速度に大きな役割を果たし、アップサンプリングされた低解像度のh264ビデオは、ダウンサンプリングされていないmpeg2に匹敵するように見えることがわかりました(ビットレートがはるかに低く、エンコード速度が速いことを願っています。引用しないでください)その上で:3)。

だからあなたもそれで遊んでみることができます:

-filter:v scale=-1:480

これにより、ビデオが480行の高さに再スケーリングされ、同じアスペクト比が維持されます。

(私は自分でH264へのトランスコーディングを設定しました: MatroskaコンテナのH264 + AACへのリアルタイムトランスコーディング 見たい場合。)

0
Emily L.