Swscale 색상 공간을 인터레이스 프레임으로 변환하시겠습니까?
-
13-12-2019 - |
문제
제가 캡처한 비디오(PAL SDI)를 내보내는 애플리케이션을 작성 중입니다.원래 색상 공간은 uyvy(4:2:2)입니다.swscale을 사용하여 프레임을 4:2:0으로 변환하고 avcodec로 인코딩하면 필드 간에 색상 번짐이 발생합니다.나는 이것이 프레임이 인터레이스되는 것을 인식하지 못하는 swscale 때문이라고 생각합니다.다음은 필드 중 하나를 보여주는 내보낸 비디오의 Bob-디인터레이스 프레임 일부 예입니다.
보시다시피, 다른 필드의 색상이 번집니다.이런 일이 발생하지 않도록 하려면 어떻게 해야 합니까?나는 라이브러리를 살펴보고 swscale에서 필드를 존중하라는 내용을 찾으려고 노력했지만 아무것도 찾지 못했습니다.
각 필드를 별도의 버퍼에 저장하므로 도움이 된다면 필드를 미리 개별적으로 처리할 수 있습니다.
이에 대한 도움을 주셔서 감사합니다!
칼라
편집하다:기본적으로 제가 원하는 것은 PAL DV를 출력하는 것입니다.나는 ffmpeg(애플리케이션)가 이것을 처리할 수 있기 때문에 swscale이 이런 유형의 인터레이스 420을 생성할 수 있다고 생각합니다.
해결책
대답은 각 필드에 하나씩 두 개의 swscale 작업을 수행하는 것입니다.높이를 절반으로 지정하고 보폭을 두 배로 지정한 다음 두 번째 작업을 한 줄씩 오프셋하여 swscale이 동일한 버퍼를 사용하도록 속일 수 있습니다.
마침내 libav-user 목록에서 답을 얻었습니다.예제 코드는 MPlayer/libmpcodecs/vf_scale.c 및 libavfilter/vf_scale.c에서 찾을 수 있습니다.