it-swarm-ko.tech

ffmpeg.c pts와 dts는 무엇입니까? 이 코드 블록은 ffmpeg.c에서 무엇을합니까?

  • 간단히 말해서 pts 및 dts 값은 무엇입니까?
  • [디코드 인코딩] 비디오를 트랜스 코딩 할 때 왜 중요한가요?

이 코드 비트는 ffmpeg.c 에서 무엇을합니까? 목적은 무엇입니까?

01562    ist->next_pts = ist->pts = picture.best_effort_timestamp;
01563    if (ist->st->codec->time_base.num != 0) {
01564        int ticks= ist->st->parser ? ist->st->parser->repeat_pict+1 : ist->st->codec->ticks_per_frame;
01565        ist->next_pts += ((int64_t)AV_TIME_BASE *
01566                         ist->st->codec->time_base.num * ticks) /
01567                         ist->st->codec->time_base.den;
01568    }
52
Aditya P

이들은 디코딩 타임 스탬프 (DTS) 및 프리젠 테이션 타임 스탬프 (PTS)이다. 여기에서 설명을 찾을 수 있습니다 자습서 내부 .

영화가 있고 프레임이 다음과 같이 표시되었다고 가정 해 봅시다. I B B P. 이제 B 프레임을 표시하려면 P의 정보를 알아야합니다. 이 때문에 프레임은 다음과 같이 저장 될 수 있습니다. I P B B. 이것이 각 프레임에 디코딩 타임 스탬프와 프리젠 테이션 타임 스탬프가있는 이유입니다. 디코딩 타임 스탬프는 언제 디코딩해야하는지 알려주고 프리젠 테이션 타임 스탬프는 언제 표시해야하는지 알려줍니다. 따라서이 경우 스트림은 다음과 같습니다.

   PTS: 1 4 2 3
   DTS: 1 2 3 4
Stream: I P B B

일반적으로 PTS와 DTS는 우리가 재생하는 스트림에 B 프레임이있는 경우에만 다릅니다.

87
Bart