做网站用微软雅黑侵权吗,wordpress怎么修改头像,wordpress 设计类主题,用flash制作网站【1】需求
需求#xff1a;有一个 “00:01:33.90” 这样格式的时间字符串#xff0c;需要将这个字符串的时间值提取打印出来#xff08;提取时、分、秒、毫秒#xff09;。
这个时间字符串从哪里来的#xff1f; 是ffmpeg返回的时间#xff0c;也就是视频的总时间。 下…【1】需求
需求有一个 “00:01:33.90” 这样格式的时间字符串需要将这个字符串的时间值提取打印出来提取时、分、秒、毫秒。
这个时间字符串从哪里来的 是ffmpeg返回的时间也就是视频的总时间。 下面是ffmpeg获取视频总时间的输出。
C:\Users\11266ffmpeg -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.hvoid 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 QDebugvoid 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来提取匹配的结果。