ffmpeg vaapiエンコーディングのため、右側に黒いバーが表示されます。

ffmpeg vaapiエンコーディングのため、右側に黒いバーが表示されます。

vaapiを使用して854x480 h264 mp4ビデオをh265 mp4ビデオにトランスコードしようとしています。

ビデオが良く見え、非常に高速にエンコードされます。ところが映像右側に黒いバーが見えますね。 1280x720にアップグレードするようにコマンドを変更すると、これは発生しません。

ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i 1.mp4 -c:v hevc_vaapi -vf scale_vaapi=854:480 -ss 00:00:0.0 -t 10 -maxrate 400 output.mp4

答え1

AMDハードウェアを使用していますか?

AFAICS これは、AMD でハードウェアアクセラレーションを使用する際に発生するバグです。 (Ubuntu 20.04、ffmpeg 4.2.4.1、メサ20.0.8)

[hevc_vaapi @ 0x5644267bf7c0] Driver does not support some wanted packed headers (wanted 0xd, found 0).
[hevc_vaapi @ 0x5644267bf7c0] Driver does not support packed sequence headers, but a global header is requested.
[hevc_vaapi @ 0x5644267bf7c0] No global header will be written: this may result in a stream which is not usable for some purposes (e.g. not muxable to some containers).
[hevc_vaapi @ 0x5644267bf7c0] Cropping information on input frames ignored due to lack of API support.

ソフトウェアエンコーディングではこれは発生しません。

そのため、回避策として hevc_vaapi の代わりに hevc/lib265x を使用してください。

 -c:v hevc

答え2

短い答え:この問題を解決するには、mesa 24.0.5+が必要で、ffmpegを直接コンパイルする必要があります。このパッチは手動で適用されます。これらの変更がアップストリームにマージされるまで。

長い答え:これはしばらく忙しかったMesaのチームのnyanmisakaが助けた。!だから、基本的な問題AMD GPUアーキテクチャとの互換性のためにフレームがパディングされたradeonsiの以前のVA-APIインターフェイスでは、パディングはエンコードに含まれていました。 GPUによっては、黒いバーが表示されるか、私の場合は任意のピクセルで構成されたバーが表示されます。これは通常、圧縮のデフォルトの仮定であるため、ファイルサイズが大幅に増加するという仮定を完全に崩します。 Mesa 24.0.5+には、この問題を解決するための新しいvaapiインターフェースが含まれていますが、ffmpegの変更このインターフェースの使用はまだffmpegsのアップストリームにマージされていません。

関連情報