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에서 하드웨어 가속을 사용할 때 발생하는 버그입니다. (우분투 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 업스트림에 병합되지 않았습니다.