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のアップストリームにマージされていません。