FFmpeg里有兩種時間戳:DTS(Decoding Time Stamp)和PTS(Presentation Time Stamp)。 顧名思義,前者是解碼的時間,后者是顯示的時間。要仔細理解這兩個概念,需要先了解FFmpeg中的packet和frame的概念。
FFmpeg中用AVPacket結構體來描述解碼前或編碼后的壓縮包,用AVFrame結構體來描述解碼后或編碼前的信號幀。 對於視頻來說,AVFrame就是視頻的一幀圖像。這幀圖像什么時候顯示給用戶,就取決於它的PTS。DTS是AVPacket里的一個成員,表示這個壓縮包應該什么時候被解碼。 如果視頻里各幀的編碼是按輸入順序(也就是顯示順序)依次進行的,那么解碼和顯示時間應該是一致的。可事實上,在大多數編解碼標准(如H.264或HEVC)中,編碼順序和輸入順序並不一致。 於是才會需要PTS和DTS這兩種不同的時間戳。