![ffmpeg 하드웨어 가속 인코딩 및 yadif 관련 문제](https://rvso.com/image/1615251/ffmpeg%20%ED%95%98%EB%93%9C%EC%9B%A8%EC%96%B4%20%EA%B0%80%EC%86%8D%20%EC%9D%B8%EC%BD%94%EB%94%A9%20%EB%B0%8F%20yadif%20%EA%B4%80%EB%A0%A8%20%EB%AC%B8%EC%A0%9C.png)
mts 컨테이너에 인터레이스된 비디오가 있고 이를 mkv 컨테이너(아마도 HEVC)에서 비인터레이스로 변환하고 싶습니다.
다음 명령줄을 시도했습니다.
ffmpeg -y -hwaccel qsv -c:v h264_qsv -i "2008-07-13 00.08.47.mts" -c:v hevc_qsv -global_quality 20 -look_ahead 1 -vf yadif=1 "test.mkv"
그리고 오류가 발생합니다.
Impossible to convert between the formats supported by the filter 'graph 0 input from stream 0:0' and the filter 'auto_scaler_0'
Error reinitializing filters!
Failed to inject frame into filter network: Function not implemented
Error while processing the decoded data for stream #0:0
Conversion failed!
모든 것을 제거하면 -vf yadif=1
제대로 작동하고 yadif가 작업을 수행하고 다시 업로드하려면 iGPU에서 메모리로 형식을 다시 다운로드/업로드/변환해야 한다고 ffmpeg에 알려야 한다고 가정하지만 어떻게 해야 할지 모르겠습니다. .
답변1
https://trac.ffmpeg.org/wiki/HWAccelIntro
https://ffmpeg.org/ffmpeg-filters.html#hwdownload-1
ffmpeg -y -hwaccel qsv -c:v h264_qsv -i "2008-07-13 00.08.47.mts" -c:v hevc_qsv -global_quality 20 -look_ahead 1 -vf hwdownload,format=nv12,yadif=1 "test.mkv"
기타 HW 가속. https://nico-lab.net/combine_hw_decoder_filter_encoder_with_ffmpeg/
답변2
vpp_qsv
트랜스코딩 체인에서 GPU 가속 필터를 사용할 수 있으며 , 그 사용법은 다음을 통해 인쇄할 수 있습니다.
ffmpeg -h filter=vpp_qsv
위의 경우 해결책은 다음과 같습니다.
ffmpeg -threads 4 -y -fflags +genpts -init_hw_device qsv=hw \
-hwaccel qsv -hwaccel_output_format qsv \
-filter_hw_device hw -c:v h264_qsv \
-i "2008-07-13 00.08.47.mts" \
-vf "format=nv12|qsv,hwupload=extra_hw_frames=64,vpp_qsv=deinterlace=2:async_depth=4" \
-c:v hevc_qsv -global_quality 20 "test.mkv"
설명:
비디오 필터 체인의 경우 MFX 런타임에 필요한 에 extra_hw_frames=64
전달된 추가 인수를 참조하세요.hwupload
고정된 프레임 풀 크기가 필요합니다.사전 할당됩니다. 귀하의 요구 사항에 적합한 번호를 사용하십시오. 일반적으로 다음과 같은 기능을 사용하는 경우 더 큰 숫자(64 정도)가 필요합니다.미리보기(LA-ICQ).
체인의 두 번째 필터는 vpp_qsv
옵션을 통해 고급 디인터레이싱을 수행하기 위해 호출됩니다 deinterlace=2
. 이 흐름에서는 디코딩, 트랜스코딩 및 필터링(이 경우 디인터레이서)이 모두 GPU에서 실행됩니다. 이 옵션은 async_depth=4
다음과 같이 성능을 대폭 향상시킵니다.이 커밋 메시지.
이것이것이 내가 -lookahead 1
(지금은) 옵션을 생략한 이유입니다. 변경 사항이 있으면 테스트하고 다시 보고하겠습니다.
에 따르면이것인코더 래퍼 에 대한 커밋, 미리 보기에는 hevc_qsv
확장된 비트 전송률 제어 모드도 켜야 하므로 미리 보기가 포함된 이전 명령은 다음과 같습니다.
ffmpeg -threads 4 -y -fflags +genpts -init_hw_device qsv=hw \
-hwaccel qsv -hwaccel_output_format qsv \
-filter_hw_device hw -c:v h264_qsv \
-i "2008-07-13 00.08.47.mts" \
-vf "format=nv12|qsv,hwupload=extra_hw_frames=64,vpp_qsv=deinterlace=2:async_depth=4" \
-c:v hevc_qsv -global_quality 20 -look_ahead 1 -extbrc 1 "test.mkv"
친절하게 테스트하고 다시보고하십시오.
경고:
교착 상태를 방지하려면 SDK에 최소 2개의 스레드가 필요합니다.이것코드 블록.