ローエンド(低速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サーバーによって直接ストリーミングされるため、あまり多くの圧縮率は必要ありません(ただし、明らかに、ネットワークを生のビデオで飽和させないことが望ましいです)。
何かアドバイス?
よろしく。
MPEG2はエンコードが非常に高速です。これは機能するはずです-c:v mpeg2video -r 25 -b:v 8192k
ビットレートを上げると、レート制御の余裕が増し、エンコード速度が速くなります。 -intra
オプションを試すこともできます。これにより、ビットレートが大幅に高くなりますが、動き推定が無効になります。それだけでは不十分な場合は、視覚的な品質を犠牲にしてエンコードを高速化するために使用できる量子化ステップパラメータが必要です。
ローエンドと言えば、ローエンドの意味がわかりません。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へのリアルタイムトランスコーディング 見たい場合。)