[VideoProcessing]DTS & PTS

HW·2024년 1월 17일
0

VideoProcessing

목록 보기
1/1
post-thumbnail

서론:

Beyond 프로젝트 중, ffmpeg 라이브러리를 사용하면서
결과물의 오디오 싱크가 맞지 않는 경우가 있었습니다.

AVPacket 구조체의 dts와 pts 값이 적절하지 않았기 때문인데
이에 대해 얘기해봅니다.

DTS와 PTS의 의미

DTS (Decoding Time Stamp):

비디오 디코더가 프레임을 디코딩하는 데 필요한 시간


오디오 싱크에는 직접적인 영향을 미치지 않습니다.

PTS (Presentation Time Stamp):

비디오 프레임이 화면에 나타나는 실제 시간

비디오 스트림에서 DTS/PTS 생성

picture-timing SEI 메시지에서
프레젠테이션 타임이 존재하는 경우를 제외하고
AVC/H.264 비디오 스트림은 종종 타이밍 정보가 포함되어 있지 않습니다.
그러므로 이러한 비디오 스트림을
mp4 컨테이너, MPEG-시스템 프로그램 또는 트랜스포트 스트림으로
캡슐화하기 위해서는 DTS와 PTS를 계산해야 합니다.

비디오 프레임이 화면에 나타날 때 PTS 값에 따라 표시됩니다.
비디오 프레임이 줄지어서 순서대로 인코딩이 완료되어,
순서대로 화면에 나타나면 좋으련만,
인코딩 완료되는 시간이 프레임 마다 다르기 때문에
DTS와 PTS가 일관성 있게 생성되지 않습니다.

본론

DTS/PTS 생성 조건과 계산

DTS<=PTS

DTS는 PTS 이전에 발생해야 하므로 DTS는 항상 PTS보다 작거나 같아야 합니다.

PTS 간격의 일정성

프레임 레이트(fps)가 주어지면, 연속된 프레임 간의 PTS 크기 차이는 일정해야 합니다.
즉, 재생 순서에서 현재 프레임의 PTS와 이전 프레임의 PTS 간의 차이는 1/fps와 같아야 합니다.

결론

DTS/PTS 생성의 중요성과 주의사항

DTS/PTS를 올바르게 생성하는 것은
비디오 스트림을 올바르게 재생하고 동기화하는 데 중요합니다.
항상 DTS가 PTS보다 작거나 같도록 유지하고,
PTS 간격을 일정하게 유지하며,
HRD를 사용하는 경우 PTS-DTS 갭을 최소화하는 것은
안정적인 비디오 재생을 보장하는 데 기여합니다.
이러한 요구사항을 만족시키면서 DTS/PTS를 생성하는 것은
비디오 처리에서 중요한 부분 중 하나입니다.

profile
예술융합형 개발자🎥

0개의 댓글