C語言字符串處理提取時間(ffmpeg返回的時間字符串)

【1】需求

需求:有一個 “00:01:33.90” 這樣格式的時間字符串,需要將這個字符串的時間值提取打印出來(提取時、分、秒、毫秒)。

這個時間字符串從哪里來的? 是ffmpeg返回的時間,也就是視頻的總時間。

image-20230815134021328

下面是ffmpeg獲取視頻總時間的輸出。

C:\Users\11266>ffmpeg -i D:/123.mp4
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developersbuilt with gcc 9.2.1 (GCC) 20200122configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmptlibavutil      56. 31.100 / 56. 31.100libavcodec     58. 54.100 / 58. 54.100libavformat    58. 29.100 / 58. 29.100libavdevice    58.  8.100 / 58.  8.100libavfilter     7. 57.100 /  7. 57.100libswscale      5.  5.100 /  5.  5.100libswresample   3.  5.100 /  3.  5.100libpostproc    55.  5.100 / 55.  5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'D:/123.mp4':Metadata:major_brand     : mp42minor_version   : 0compatible_brands: mp42isomcreation_time   : 2015-04-30T02:43:22.000000ZDuration: 00:01:33.90, start: 0.000000, bitrate: 715 kb/sStream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 88200 Hz, stereo, fltp, 127 kb/s (default)Metadata:creation_time   : 2015-04-30T02:43:22.000000Zhandler_name    : GPAC ISO Audio HandlerStream #0:1(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 582 kb/s, 15 fps, 25 tbr, 30k tbn, 20000k tbc (default)Metadata:creation_time   : 2015-04-30T02:43:23.000000Zhandler_name    : GPAC ISO Video Handler

這串數據里 Duration: 00:01:33.90, start: 0.000000, bitrate: 715 kb/s,我們要提取00:01:33.90這串時間字符串出來,這個時間字符串就是當前視頻的總時間。

下面是時間字符串提取代碼,C語言代碼:

char TotalTime[100];//解析數據
char *p = strstr(utf8_str.data(), "Duration:");
if (p)
{int i = 0;p += 9;while (*p != '\0' && *p != NULL && *p != ','){if (i > 90)break; //防止越界TotalTime[i++] = *p++;}TotalTime[i++] = '\0';
}qDebug() << "TotalTime:" << TotalTime;

下面的2個例子介紹如何提取時、分、秒、毫秒的時間,打印出來。

【2】C語言實現

#include <stdio.h>
#include <stdlib.h>
#include <string.h>void extractTime(const char* time_str, int* hour, int* minute, int* second, int* msec) {char* token;char* str;char* saveptr;// 復制時間字符串到臨時緩沖區str = strdup(time_str);// 分割字符串,以":"為分隔符token = strtok_s(str, ":", &saveptr);// 提取小時部分if (token != NULL) {*hour = atoi(token);} else {*hour = 0;}// 分割剩余部分,以":"為分隔符token = strtok_s(NULL, ":", &saveptr);// 提取分鐘部分if (token != NULL) {*minute = atoi(token);} else {*minute = 0;}// 分割剩余部分,以"."為分隔符token = strtok_s(NULL, ".", &saveptr);// 提取秒部分if (token != NULL) {*second = atoi(token);} else {*second = 0;}// 提取毫秒部分token = strtok_s(NULL, "", &saveptr);if (token != NULL) {*msec = atoi(token);} else {*msec = 0;}// 釋放臨時緩沖區內存free(str);
}int main() {const char* time_str = "00:01:33.90";int hour, minute, second, msec;extractTime(time_str, &hour, &minute, &second, &msec);printf("hour: %d\n", hour);printf("minute: %d\n", minute);printf("second: %d\n", second);printf("millisecond: %d\n", msec);return 0;
}

在這段代碼中,實現了一個名為extractTime的函數,將時間字符串作為輸入,并通過指針參數返回小時、分鐘、秒和毫秒的值。使用strtok_s函數以":“和”."為分隔符逐個提取時間字符串的各部分,并將其轉換為整數值。

在使用strtok_s函數時,將剩余部分分隔的分隔符設為"",以便可以正確提取毫秒部分。

【3】Qt正則表達式提取

#include <QCoreApplication>
#include <QString>
#include <QRegularExpression>
#include <QDebug>void extractTime(const QString& timeStr, int* hour, int* minute, int* second, int* msec)
{QRegularExpression regex("(\\d+):(\\d+):(\\d+)\\.(\\d+)");QRegularExpressionMatch match = regex.match(timeStr);if (match.hasMatch()) {*hour = match.captured(1).toInt();*minute = match.captured(2).toInt();*second = match.captured(3).toInt();*msec = match.captured(4).toInt();} else {*hour = 0;*minute = 0;*second = 0;*msec = 0;}
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QString timeStr = "00:01:33.90";int hour, minute, second, msec;extractTime(timeStr, &hour, &minute, &second, &msec);qDebug() << "hour:" << hour;qDebug() << "minute:" << minute;qDebug() << "second:" << second;qDebug() << "millisecond:" << msec;return a.exec();
}

在代碼中,實現了一個名為extractTime的函數,接收一個時間字符串,通過指針參數返回小時、分鐘、秒和毫秒的值。使用QRegularExpression來定義一個正則表達式模式,然后使用QRegularExpressionMatch來提取匹配的結果。

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

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

相關文章

vs快捷鍵

ctrlMo 折疊代碼塊 ctrlML 打開代碼塊

電子電器架構(E/E)演化 —— 主流主機廠域集中架構概述

電子電器架構(E/E)演化 —— 主流主機廠域集中架構概述 我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 屏蔽力是信息過載時代一個人的特殊競爭力,任何消耗你的人和事,多看一眼都是你的不對。…

系列七(實戰)、發送 接收單向消息(Java操作RocketMQ)

一、發送 & 接收單向消息 1.1、概述 發送單向消息&#xff0c;適用于發送方不關心或者不在意消息的發送結果&#xff0c;這種方式的吞吐量很大&#xff0c;但是存在消息丟失的風險&#xff0c;對于重要消息要慎用&#xff01;該種方式通常適用于對消息沒有那么嚴格的場景中…

類和對象的創建和實例化

1. 類的概述 1.1 具體示例 類是描述一類事物的特征和行為的統稱&#xff0c;抽象的不存在的&#xff0c;泛指的概念&#xff0c;例如&#xff1a;描述一個人&#xff0c;從外觀上&#xff08;特征&#xff09;和言行舉止&#xff08;行為&#xff09;上進行描述外觀上&#xff…

c 語言學習:輸出階乘的算式

c 語言學習&#xff1a;輸出階乘的算式 代碼 #include "stdio.h"int fact(int num){if (num < 1){printf("1 ");return 1;} else {printf("%d x ",num);return num * fact(num-1);} }int main(){int num 10; // printf("plz inpu…

【華為OD題庫-107】編碼能力提升計劃-java

題目 為了提升軟件編碼能力&#xff0c;小王制定了刷題計劃&#xff0c;他選了題庫中的n道題&#xff0c;編號從0到n-1&#xff0c;并計劃在m天內按照題目編號順序刷完所有的題目(注意&#xff0c;小王不能用多天完成同一題) 在小王刷題計劃中&#xff0c;小王需要用time[i]的時…

老鷹目標檢測數據集VOC格式60張

老鷹是天空中的王者&#xff0c;它們擁有極佳的飛行能力。它們能以驚人的速度在天空中翱翔&#xff0c;尤其擅長高空俯沖捕食。老鷹的視力非常敏銳&#xff0c;能夠準確地發現地面上的獵物&#xff0c;并迅速下落抓取。它們的爪子強而有力&#xff0c;足以擊倒比自己體型龐大的…

云計算與大數據之間的羈絆(期末不掛科版):云計算 | 大數據 | Hadoop | HDFS | MapReduce | Hive | Spark

文章目錄 前言&#xff1a;一、云計算1.1 云計算的基本思想1.2 云計算概述——什么是云計算&#xff1f;1.3 云計算的基本特征1.4 云計算的部署模式1.5 云服務1.6 云計算的關鍵技術——虛擬化技術1.6.1 虛擬化的好處1.6.2 虛擬化技術的應用——12306使用阿里云避免了高峰期的崩…

NAT路由器,將內網ip轉換為外網ip

Network Address Translation&#xff0c;網絡地址翻譯。 概念 NAT就是在局域網內部使用內部地址&#xff0c;而當內部節點要與外部網絡通信時&#xff0c;在網關將內部地址替換為公用地址&#xff0c;從而在外部網關正常使用。 NAT表是轉換的核心 NAT路由器有NAT表&#xf…

0基礎學習VR全景平臺篇第131篇:曝光三要素—光圈

上課&#xff01;全體起立~ 大家好&#xff0c;歡迎觀看蛙色官方系列全景攝影課程&#xff01; 我們經常從電視或書刊上看到這樣的照片&#xff0c;照片的主體清晰&#xff0c;前后鏡朦朧虛化&#xff0c;整體看起來非常的漂亮。那這樣的照片是如何拍出來的呢&#xff1f;他和…

為什么要出現并發?并發的三要素

大家好&#xff0c;我是"java繼父"伯約&#xff0c;假如這篇對大家有幫助的話求一個贊&#xff0c;另外文章末尾放了我從小白到架構師多年的學習資料。 1.為什么需要多線程 眾所周知&#xff0c;CPU、內存、I/O 設備的速度是有極大差異的&#xff0c;為了合理利用 C…

Vue編寫登錄注冊頁面前端校驗

登錄注冊校驗 template頁面 <div class"app-login"><!--登錄 --><div class"form"><el-form ref"form" size"large" autocomplete"off" v-if"isLogin" :model"registerData" :r…

FXCM福匯官網:深入解析BOLL指標的喇叭口形態及含義

BOLL指標是一種通過布林線&#xff08;Bollinger Bands&#xff09;的上軌線、中軌線和下軌線的相互關系來判斷市場趨勢和波動性的技術分析工具。BOLL指標的喇叭口形態包括開口型、收口型和緊口型&#xff0c;它們各自具有獨特的含義。 《FXCM福匯官網開戶》 1. 開口型喇叭口…

cesium實現二三維聯動

記錄項目中實現二三維地圖聯動 效果如下&#xff1a; 第一步&#xff1a;現在頁面中加載二三維地圖&#xff08;地圖的初始化已省略&#xff09; <template><div><div><button click"show">二三維聯動</button></div><div&…

Go Web 編程

Go Web 編程 更新于 1年前 一步步帶你進入 Go Web 編程的世界,讓我們開始探索吧! 文檔類型:系統文檔 文章統計:96 篇,字數 12.52 萬,點贊 508 文章列表所有討論 基本信息 關于本書 第一章. Go 環境配置 01.0. Go 環境配置 01.1. 安裝 Go 01.2. GOPATH 與工作空間 …

經典文獻閱讀之--RenderOcc(使用2D標簽訓練多視圖3D Occupancy模型)

0. 簡介 3D占據預測在機器人感知和自動駕駛領域具有重要的潛力&#xff0c;它將3D場景量化為帶有語義標簽的網格單元。最近的研究主要利用3D體素空間中的完整占據標簽進行監督。然而&#xff0c;昂貴的注釋過程和有時模糊的標簽嚴重限制了3D占據模型的可用性和可擴展性。為了解…

[HADOOP]數據傾斜的避免和處理

避免數據傾斜 初始設計方面&#xff1a; 設計階段考慮數據分布&#xff0c;并盡可能確保數據均勻分布。 預處理數據&#xff1a; 在數據加載到 Hadoop 之前進行預處理&#xff0c;以減少傾斜。使用抽樣或統計方法來了解數據分布特征&#xff0c;并據此調整。 使用合適的Partiti…

EtherCAT主站SOEM -- 11 -- EtherCAT從站 XML 文件解析

EtherCAT主站SOEM -- 11 -- EtherCAT從站 XML 文件解析 1 EtherCAT 從站信息規范1.1 XML 文件說明1.1.1 XML 數據類型1.1.2 EtherCATInfo1.1.3 Groups1.1.4 Devices1.1.5 Modules1.1.6 Types1.1.6.1 AccessType 的組成1.1.6.2 ArraylnfoType 的組成1.1.6.3 DeviceType 的組成1.…

Mendelson AS2 介紹下載和配置

最近與一家國外公司做EDI對接&#xff0c;并且EDI通訊工具是基于AS2協議的。目前開源的as2的開源項目有openas2,Mendelson AS2&#xff0c;和國人寫的freeas2但是&#xff0c;現在freeas2已經被從開源中國不能下載了&#xff0c;變為收費的版本了。 如果你需要使用基于AS2協議…

動態規劃、DFS 和回溯算法:二叉樹問題的三種視角

動態規劃、DFS 和回溯算法&#xff1a;二叉樹問題的三種視角 在計算機科學中&#xff0c;算法是解決問題的核心。特別是對于復雜的問題&#xff0c;不同的算法可以提供不同的解決方案。在本篇博客中&#xff0c;我們將探討三種算法&#xff1a;動態規劃、深度優先搜索&#xf…