ffmpeg時間基與時間戳

時間基、時間戳

時間基:表示時間單位的分數,用來定義視頻或音頻流中時間的精度。其形式是一個分數,分子通常為 1,而分母則表示每秒的單位數。
時間戳:代表在時間軸里占了多少個格子,是特定的時間點。
時間基是時間戳的單位,時間戳值乘以時間基,就可得到實際的時刻值。

typedef struct AVRational{int num; //numeratorint den; //denominator
} AVRational;

FFmpeg 中的幾種時間基

  • tbn:視頻流的時間基,time base of stream,AVStream.time_base 的倒數
typedef struct AVStream {.../*** This is the fundamental unit of time (in seconds) in terms* of which frame timestamps are represented.** decoding: set by libavformat* encoding: May be set by the caller before avformat_write_header() to*           provide a hint to the muxer about the desired timebase. In*           avformat_write_header(), the muxer will overwrite this field*           with the timebase that will actually be used for the timestamps*           written into the file (which may or may not be related to the*           user-provided one, depending on the format).*/AVRational time_base;
}
  • tbr:幀率,time base of rate
  • tbc:視頻解碼的時間基,time base of codec,AVCodecContext.time_base 的倒數
typedef struct AVCodecContext {
/*** This is the fundamental unit of time (in seconds) in terms* of which frame timestamps are represented. For fixed-fps content,* timebase should be 1/framerate and timestamp increments should be* identically 1.* This often, but not always is the inverse of the frame rate or field rate* for video. 1/time_base is not the average frame rate if the frame rate is not* constant.** Like containers, elementary streams also can store timestamps, 1/time_base* is the unit in which these timestamps are specified.* As example of such codec time base see ISO/IEC 14496-2:2001(E)* vop_time_increment_resolution and fixed_vop_rate* (fixed_vop_rate == 0 implies that it is different from the framerate)** - encoding: MUST be set by user.* - decoding: the use of this field for decoding is deprecated.*             Use framerate instead.*/AVRational time_base;
}
  • FFmpeg 內部時間基 AV_TIME_BASE
#define         AV_TIME_BASE   1000000
#define         AV_TIME_BASE_Q   (AVRational){1, AV_TIME_BASE}

使用此時間基計算得到的時間值表示的單位是微秒。

時間值的形式轉換

/*** Convert an AVRational to a `double`.* @param a AVRational to convert* @return `a` in floating-point form* @see av_d2q()*/
static inline double av_q2d(AVRational a){return a.num / (double) a.den;
}

將時間從 AVRational 形式轉換為 double 形式。將不同時間基的值轉成按秒為單位的運算如下:
timestamp(秒) = pts * av_q2d(time_base)

時間基轉換函數

/*** Rescale a 64-bit integer by 2 rational numbers.** The operation is mathematically equivalent to `a * bq / cq`.** This function is equivalent to av_rescale_q_rnd() with #AV_ROUND_NEAR_INF.** @see av_rescale(), av_rescale_rnd(), av_rescale_q_rnd()*/
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const;

將時間值從一種時間基轉換為另一種時間基,其計算公式為 a * bq / cq

/*** Rescale a 64-bit integer by 2 rational numbers with specified rounding.** The operation is mathematically equivalent to `a * bq / cq`.** @see av_rescale(), av_rescale_rnd(), av_rescale_q()*/
int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq,enum AVRounding rnd) av_const;

同 av_rescale_q 相比增加了一個指定舍入方式的參數

/*** Convert valid timing fields (timestamps / durations) in a packet from one* timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be* ignored.** @param pkt packet on which the conversion will be performed* @param tb_src source timebase, in which the timing fields in pkt are*               expressed* @param tb_dst destination timebase, to which the timing fields will be*               converted*/
void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst);

用于將 AVPacket 中各種時間值從一種時間基轉換為另一種時間基

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75841.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75841.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75841.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

激光加工中平面傾斜度的矯正

在激光加工中,加工平面的傾斜度矯正至關重要,直接影響加工精度和材料處理效果。以下是系統的矯正方法和步驟: 5. 驗證與迭代 二次測量:加工后重新檢測平面度,確認殘余誤差。 反饋優化:根據誤差分布修正補償…

算法刷題記錄——LeetCode篇(2.2) [第111~120題](持續更新)

更新時間:2025-04-04 算法題解目錄匯總:算法刷題記錄——題解目錄匯總技術博客總目錄:計算機技術系列博客——目錄頁 優先整理熱門100及面試150,不定期持續更新,歡迎關注! 114. 二叉樹展開為鏈表 給你二…

C語言學習筆記-9

九、結構體 構造類型: 不是基本類型的數據結構也不是指針類型, 它是若干個相同或不同類型的數據構成的集合 結構體類型: 結構體是一種構造類型的數據結構,是一種或多種基本類型或構造類型的數據的集合。 1.結構體類型定義 定…

Test——BUG篇

目錄 一軟件測試的生命周期 二BUG 1概念 2描述Bug 3Bug級別 4Bug的生命周期 三與開發人員發生爭執怎么辦 ?編輯1先自省:是否Bug描述不清晰 2站在用戶角度考慮并拋出問題 3Bug定級有理有據 4不僅要提出問題,還要給出解決方案 5Bug評審 5.1…

【Block總結】HWAB,半小波注意力塊|即插即用

論文信息 標題: HALF WAVELET ATTENTION ON M-NET+ FOR LOW-LIGHT IMAGE ENHANCEMENT 地址: arXiv:2203.01296 日期: 2022年3月 創新點 改進的分層架構 M-Net+: 提出了一個專為低光圖像增強設計的改良分層模型 M-Net+。該架構旨在緩解采樣過程中的空間信息損失問題。通過采用…

Spring 中的事務

🧾 一、什么是事務? 🧠 通俗理解: 事務 一組操作,要么全部成功,要么全部失敗,不能只做一半。 比如你轉賬: A 賬戶扣錢B 賬戶加錢 如果 A 扣了錢但 B 沒收到,那就出問…

Flutter極速接入IM聊天功能并支持鴻蒙

Flutter極速接入IM聊天功能并支持鴻蒙 如果你們也是Flutter項目,想快速接入聊天,包括聊天的UI界面,強烈推薦這一家。因為我們已經完成了集成,使用非常穩定,集成也非常快捷方便。 而且,就在今天&#xff0c…

C# 類庫生成后自動復制到指定目錄

C# 類庫生成后自動復制到指定目錄 在C#中,當你開發了一個類庫項目(通常是.NET Core或.NET Framework項目),你可能會希望在構建(Build)完成后自動將生成的DLL文件復制到指定的目錄。有幾種方法可以實現這個需求,下面是一些常用的方法: 方法1:使用MSBuild的AfterBuild…

13-產品經理-產品多分支平臺管理

禪道16.0版本開始,優化和增強了產品的分支/平臺功能,主要特點如下: 多分支/平臺功能兼容各種大小型項目,項目/迭代可以關聯對應產品的某個分支/平臺。分支/平臺支持靈活管理,可以把分支/平臺理解為時間層面的概念&…

手搓多模態-04 歸一化介紹

在機器學習中,歸一化是一個非常重要的工具,它能幫助我們加速訓練的速度。在我們前面的SiglipVisionTransformer 中,也有用到歸一化層,如下代碼所示: class SiglipVisionTransformer(nn.Module): ##視覺模型的第二層&am…

Qt 入門 1 之第一個程序 Hello World

Qt 入門1之第一個程序 Hello World 直接上操作步驟從頭開始認識,打開Qt Creator,創建一個新項目,并依次執行以下操作 在Qt Creator中,一個Kits 表示一個完整的構建環境,包括編譯器、Qt版本、調試器等。在上圖中可以直…

深入理解MySQL:核心特性、優化與實踐指南

MySQL是一個開源的關系型數據庫管理系統(RDBMS),由瑞典MySQL AB公司開發,目前屬于Oracle公司。它是目前世界上最流行的開源數據庫之一,廣泛應用于各種規模的Web應用和企業系統中。 目錄 一、核心特點 關系型數據庫: 開源免費&am…

Linux 系統安裝與優化全攻略:打造高效開發環境

一、開篇引言 (一)Linux 系統的廣泛應用 Linux 憑借其開源、穩定且安全的特性,在服務器、嵌入式設備以及開發環境等領域都有著極為廣泛的應用。 (二)撰寫本文的目的 為讀者提供一套全面且實用的指南,助…

代碼訓練day22回溯算法p1

1.組合 (1)模板 void backtracking(參數) {if (終止條件) {存放結果;return;}for (選擇:本層集合中元素(樹中節點孩子的數量就是集合的大小)) {處理節點;backtracking(路徑,選擇列表); // 遞歸回溯&#…

2024華為OD機試真題-任務最優調度(C++/Java/Python)-E卷-200分

2024華為OD機試最新E卷題庫-(D卷+E卷)-(JAVA、Python、C++) 目錄 題目描述 輸入描述 輸出描述 用例1 考點 題目解析 代碼 c++ java python 題目描述 給定一個正整數數組表示待系統執行的任務列表,數組的每一個元素代表一個任務,元素的值表示該任務的類型。請計算執…

每日習題:20250407

2025 2025 2025年 04 04 04月 06 06 06日 題目 1 設 X X X是實隨機變量,任意光滑的函數 f : R → R f:\mathbf{R} \rightarrow \mathbf{R} f:R→R,都有: E ( X f ( X ) ) E ( f ′ ( X ) ) E\left(Xf(X)\right)E\left(f(X)\right) E(Xf(X)…

TensorRT 有什么特殊之處

一、TensorRT的定義與核心功能 TensorRT是NVIDIA推出的高性能深度學習推理優化器和運行時庫,專注于將訓練好的模型在GPU上實現低延遲、高吞吐量的部署。其主要功能包括: 模型優化:通過算子融合(合并網絡層)、消除冗余…

JCR一區文章,壯麗細尾鷯鶯算法Superb Fairy-wren Optimization-附Matlab免費代碼

本文提出了一種新穎的基于群體智能的元啟發式優化算法——壯麗細尾鷯優化算法(SFOA),SFOA從精湛的神仙鶯的生活習性中汲取靈感。融合了精湛的神仙鶯群體中幼鳥的發育、繁殖后鳥類喂養幼鳥的行為以及它們躲避捕食者的策略。通過模擬幼鳥生長、繁殖和攝食階…

使用Ubuntu18恢復群暉nas硬盤數據外接usb

使用Ubuntu18恢復群暉nas硬盤數據外接usb 1. 接入硬盤2.使用Ubuntu183.查看nas硬盤信息3. 掛載nas3.1 掛載損壞nas硬盤(USB)3.2 掛載當前運行的nas 4. 拷貝數據分批傳輸 5. 新舊數據對比 Synology NAS 出現故障,DS DiskStation損壞,則可以使用計算機和 U…

linux 安裝 mysql記錄

sudo apt-get install mysql-server 一直報錯,按照下面的終于安裝出來了 這個鏈接 https://cn.linux-console.net/?p13784 第 1 步:要刪除 MySQL 及其所有依賴項,請執行以下命令: sudo apt-get remove --purge mysql* 第 2 步…