精华内容
下载资源
问答
  • I 帧时间间隔

    万次阅读 2017-03-11 11:11:49
    MPEG编码将画面(即)分为I、P、B三种,I是内部编码,P是前向预测,B是双向内插。简单地讲,I是一个完整的画面,而P和B记录的是相对于I的变化。没有I,P和B就无法解码,这就是MPEG格式难以...
    GOP(Group of Pictures) 策略 影响编码质量:所谓GOP,意思是画面组,一个GOP就是一组连续的画面。MPEG编码将 画面 (即帧)分为I、P、B三种,I是内部编码帧,P是前向预测帧,B是双向内插帧。简单地讲,I帧是一个完整的画面,而P帧和B帧记录的是相对于I帧的变化。没有I帧,P帧和B帧就无法解码,这就是MPEG格式难以精确 剪辑 的原因,也是我们之所以要微调头和尾的原因。

    关键帧包含了显示帧需要的所有信息

    所有的视频都至少包含一个关键帧 ,作为文件的第一个帧。其它的关键帧可用来改善视频的质量,不过它们也会增加文件大小。一般而言,每一秒视频至少需要使用 1 个关键帧。若使用此公式,在每秒播放 25个帧的视频中,每 25 个帧就会有 1 个关键帧。增加关键帧个数可改善质量,但是同时增加带宽和网络负载。

    两种彩电视频制式:
    NTSC (525 lines @ 59.94 Hz)  29.97 fps
    PAL (625 lines @ 50 Hz)  25 fps

    NTSC和PAL属于全球两大主要的电视广播制式,但是由于系统投射颜色影像的频率而有所不同。NTSC是National Television System Committee的缩写,其标准主要应用于日本、美国,加拿大、墨西哥等等,PAL 则是Phase Alternating Line的缩写,主要应用于中国,香港、中东地区和欧洲一带。

    GOP最大可含帧数目:18 (NTSC) / 15 (PAL)

    GOP是由固定模式的一系列I帧、P帧、B帧组成。
    I帧编码是为了减少空间域冗余,P帧和B帧是为了减少时间域冗余。
    常用的结构由15个帧组成,具有以下形式IBBPBBPBBPBBPBB。简称GOP(4,2),指的是该图像组除了一个I帧外,包含了4个P帧,并且任何两个P帧或者I、P之间都有两个B帧。
    展开全文
  • opencv 读取一帧时间及imshow耗时

    万次阅读 2016-12-21 11:19:13
    由于想知道自己电脑i7 使用opencv读取一速度,测试视频大小为480*640,发现当使用VideoCapture::read()读取一,并用imshow显示图像,总共需耗时15ms左右,相当于每秒66左右,分别对两个函数测试时,发现单读取...

    一、前言

    由于想知道自己电脑i7 使用opencv读取一帧速度,测试视频大小为480*640,发现当使用VideoCapture::read()读取一帧,并用imshow显示图像,总共需耗时16ms左右,相当于每秒66帧左右,分别对两个函数测试时,发现单读取一帧只需0.7~1.2ms,而使用imshow显示图像则函数较为严重,显示一帧需15ms左右。当然不同大小和格式的视频,读取时间则有所不同。

    二、代码

    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/core/core.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    
    using namespace cv;
    
    #include <iostream>
    #include "MyTimer.h"
    
    int main()
    {
    	//VideoCapture cap("umn_dataset/Crowd-Activity-All.avi");
    	VideoCapture cap("2.avi");
    
    	if (!cap.isOpened()){
    		std::cerr << "无法获取视频\n";
    	}
    
    	Mat srcImg ,grayImg;
    	MyTimer timer;
    	namedWindow("Demo", 1);
    	timer.Start();
    	while (cap.read(srcImg)){
    
    		timer.End();
    		std::cout << "获取一帧耗时:" << timer.costTime << "\n";
    		timer.Reset();
    
    		timer.Start();
    		imshow("Demo", srcImg);
    		waitKey(1);
    		timer.End();
    		std::cout << "imshow耗时:" << timer.costTime << "\n";
    		timer.Reset();
    		timer.Start();
    
    	}
    
    	return 0;
    }
    

    三、结果










    展开全文
  • 采样率 Samplerate 44100Hz,每秒44100个sample, 所以根据公式 音频的播放时间=一个AAC对应的采样样本的个数/采样频率 当前AAC一的播放时间是= 1024*1000/44100= 22.32ms(单位为ms) 2 MP3 mp3 每均...

    av_rescale_q用于计算Packet的PTS。av_rescale_q的返回值是一个很大的整数,且每次计算的结果间隔很大。
    不同于avcodec_encode_video改变AVCodecContext *avctx的pts(小整数,且间隔小)。

    av_rescale_q(a,b,c)是用来把时间戳从一个时基调整到另外一个时基时候用的函数。它基本的动作是计算a*b/c,但是这个函数还是必需的,因为直接计算会有溢出的情况发生。AV_TIME_BASE_Q是AV_TIME_BASE作为分母后的版本。它们是很不相同的:AV_TIME_BASE * time_in_seconds = avcodec_timestamp而AV_TIME_BASE_Q * avcodec_timestamp = time_in_seconds(注意AV_TIME_BASE_Q实际上是一个AVRational对象,所以你必需使用avcodec中特定的q函数来处理它)。

    H264/90000,代表时钟频率必须是90000

    背景知识:

    (一个AAC原始帧包含一段时间内1024个采样及相关数据)

    1. 视频时间戳

    pts = inc++ *(1000/fps); 其中inc是一个静态的,初始值为0,每次打完时间戳inc加1.

    ffmpeg,中的代码为

    pkt.pts= m_nVideoTimeStamp++ * (m_VCtx->time_base.num * 1000 / m_VCtx->time_base.den);

    1. 音频时间戳

    pts = inc++ * (frame_size * 1000 / sample_rate)

    在ffmpeg中的代码为

    pkt.pts= m_nAudioTimeStamp++ * (m_ACtx->frame_size * 1000 / m_ACtx->sample_rate);

    采样频率是指将模拟声音波形进行数字化时,每秒钟抽取声波幅度样本的次数。

    。正常人听觉的频率范围大约在20Hz~20kHz之间,根据奈奎斯特采样理论,为了保证声音不失真,采样频率应该在40kHz左右。常用的音频采样频率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,如果采用更高的采样频率,还可以达到DVD的音质

    对采样率为44.1kHz的AAC音频进行解码时,一帧的解码时间须控制在23.22毫秒内。

    背景知识:

    (一个AAC原始帧包含一段时间内1024个采样及相关数据)

    分析:

    1 AAC

    音频帧的播放时间=一个AAC帧对应的采样样本的个数/采样频率(单位为s)

    一帧 1024个 sample。采样率 Samplerate 44100Hz,每秒44100个sample, 所以根据公式 音频帧的播放时间=一个AAC帧对应的采样样本的个数/采样频率

    当前AAC一帧的播放时间是= 1024*1000/44100= 22.32ms(单位为ms)

    2 MP3

    mp3 每帧均为1152个字节, 则:

    frame_duration = 1152 * 1000 / sample_rate

    例如:sample_rate = 44100HZ时,计算出的时长为26.122ms,这就是经常听到的mp3每帧播放时间固定为26ms的由来。

    视频的帧率是会变的

    展开全文
  • 这篇文章的原文地址是:...里面主要介绍了如何提取视频关键,以及视频关键时间点信息,这样就能做出各大视频网站的那种:点击视频下方进度条,显示该时间点附近关键图片的效果。

    这篇文章的原文地址是:http://www.videoproductionslondon.com/blog/scene-change-detection-during-encoding-key-frame-extraction-code


    里面主要介绍了如何提取视频关键帧,以及视频关键帧的时间点信息,这样就能做出各大视频网站的那种:点击视频下方进度条,显示该时间点附近关键帧图片的效果。

    老外还是太牛,真心是佩服。


    部分代码:

    <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i yourvideo.mp4 -vsync 2 -s 73x41 -f image2 thumbnails-%02d.jpeg</span> ffmpeg的-vf选择=“EQ(pict_type \,PICT_TYPE_I)”-i yourvideo.mp4 -vsync 2 -s -f 73x41 IMAGE2 thumbnails-%02d.jpeg</span>
    <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">-loglevel debug 2>&1 | grep "pict_type:I -> select:1" | cut -d " " -f 6 - > keyframe-timecodes.txt</span> -loglevel调试2>&1 | grep的“pict_type:我 - >选择:1”|切-d“”-f 6  - >关键帧timecodes.txt</span>


    <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">[select @ 0000000001A88BE0] n:0 pts:0 t:0.000000 pos:1953 interlace_type:P key:0 pict_type:I -> select:1.000000</span> [选择@ 0000000001A88BE0] N:0分:0 T:0.000000 POS:1953年interlace_type:P键:0 pict_type:我 - >选择:1.000000</span>
    <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">[select @ 0000000001A88BE0] n:1 pts:40000 t:0.040000 pos:4202 interlace_type:P key:0 pict_type:P -> select:0.000000</span> [选择@ 0000000001A88BE0] N:1点:40000电话:0.040000 POS:4202 interlace_type:P键:0 pict_type:P  - >选择:0.000000</span>

    <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">t:0.000000</span> T:0.000000</span>
    <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">t:1.360000</span> T:1.360000</span>

    < span class = "notranslate" onmouseover = "_tipon(this)" onmouseout = "_tipoff()" >< span class = "google-src-text" style = "direction: ltr; text-align: left" >< a onclick = "jwplayer().seek(0); return false" href = "#" >< img src = "thumbnails-01.jpeg" ></ a ></ span > < a onclick = "jwplayer().seek(0);返回false" href = "#" > < IMG SRC =“缩略图-01.jpeg”> </ A ></ span >
    < span class = "notranslate" onmouseover = "_tipon(this)" onmouseout = "_tipoff()" >< span class = "google-src-text" style = "direction: ltr; text-align: left" >< a onclick = "jwplayer().seek(1.36); return false" href = "#" >< img src = "thumbnails-02.jpeg" ></ a ></ span > < a onclick = "jwplayer().seek(1.36);返回false" href = "#" > < IMG SRC =“缩略图-02.jpeg”> </ A ></ span >



    Scene change detection during encoding and key frame extraction code

    In a previous post we explained how to generate thumbnails for each scene change using Edit Decision Lists from your non-linear editor of choice. Sometimes, though, you won't have an EDL along with your video assets (for instance, when you are using off-airs or videos edited by somebody else). In those situations we can still create a thumbnail for each scene change thanks to how frames are structured in digital compression.

    According to Wikipedia, a GOP structure specifies the order in which intra- and inter-frames are arranged. A Group Of Pictures can contain the following frame types:

    • I-frame (intra coded picture) - reference picture, which represents a full image and which is independent of other picture types. Each GOP begins with this type of picture.
    • P-frame (predictive coded picture) - contains motion-compensated difference information from the preceding I- or P-frame.
    • B-frame (bidirectionally predictive coded picture) - contains difference information from the preceding and following I- or P-frame within a GOP.

    The GOP structure is often referred by two numbers, for example M=3, N=12, which equals IBBPBBPBBPBBI. The first one tells the distance between two anchor frames (I or P) and the second the distance between two I-frames (GOP length).

    In order to use key frames as a scene change detection method we need to use flexible GOP structures, with minimum (min-keynt) and maximum (keyint) values when encoding our video.

    For example, a minimum setting that is the same as the frame rate of the video will prevent the encoded video from having two subsequent key frames within a second of each other. Please note that if your video has scenes shorter than a second long you won't be able to detect all scene changes unless you reduce this setting.

    Similarly, a maximum setting ensures that a key frame is inserted at least every X number of frames. A recommend setting is to set this as 10 times the frame rate, which equates to 10 seconds of video between key frames. We can set this to infinite to never insert non-scenecut key frames although this might cause problems when seeking (if you try to skip to a part of the video without a key frame, there won't be any video until the next key frame is reached).

    In addition, we need to define the threshold for scenecut detection. The encoder calculates a metric for every frame to estimate how different it is from the previous frame. If the value is lower than the threshold, a scenecut is detected.

    Once we have encoded the video we can then run the following ffmpeg (I've used 0.8-win64-static) parameters:

    ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i yourvideo.mp4 -vsync 2 -s 73x41 -f image2 thumbnails-%02d.jpeg
    -loglevel debug 2>&1 | grep "pict_type:I -> select:1" | cut -d " " -f 6 - > keyframe-timecodes.txt
    

    What follows -vf in a ffmpeg command line is a Filtergraph description. The select filter selects frames to pass in output. The constant of the filter is “pict_type” and the value “ PICT_TYPE_I”. In short, we are only passing key frames to the output.

    -vsync 2 prevents ffmpeg to generate more than one copy for each key frame.

    -f image2 writes video frames to image files. The output filenames are specified by a pattern, which can be used to produce sequentially numbered series of files. The pattern may contain the string "%d" or "%0Nd".

    -loglevel debug 2 > keyframe-timecodes.txt outputs:

    [select @ 0000000001A88BE0] n:0 pts:0 t:0.000000 pos:1953 interlace_type:P key:0 pict_type:I -> select:1.000000
    [select @ 0000000001A88BE0] n:1 pts:40000 t:0.040000 pos:4202 interlace_type:P key:0 pict_type:P -> select:0.000000
    

    I use “>&1 | grep "pict_type:I -> select:1" | cut -d " " -f 6 -” to output something more readable:

    t:0.000000
    t:1.360000
    

    Finally, I can convert “keyframe-timecodes.txt” into a chapter navigation list and use the thumbnails to navigate the video:

    <a οnclick="jwplayer().seek(0); return false" href="#"><img src="thumbnails-01.jpeg"></a>
    <a οnclick="jwplayer().seek(1.36); return false" href="#"><img src="thumbnails-02.jpeg"></a>

    展开全文
  • loadeddata:当当前的数据已加载,但没有足够的数据来播放指定音频/视频的下一时 progress:当浏览器正在下载指定的音频/视频时 canplay:当浏览器能够开始播放指定的音频/视频时 canplaythrough:当浏览器...
  • 1)ADTS header位于每一个aac的开头,长度一般是7字节(也可以是9字节的,没见过)。  2)每个aac的长度固定为1024个sample(可以是1024*n,没见过n>1的情况)。  3)ADTS header中大部分信息无用,有用...
  • CAN解析

    千次阅读 2019-10-19 10:02:47
    版本 ...整理CAN解析 0.3 2018.06.24 整理CAN数据类型格式 0.4 2018.07.07 完善CAN解析 0.5 2018.07.22 补充CAN类型说明 0.6 2018.08.05 整理CAN仲裁 0.7 2018.09.10 整理CAN处...
  • 点亮前面的码表,时间轴上就会出现一个关键,这个关键是开始的地方,移动时间指示器,把物体移动到另一个地方,时间轴上就会出现结束的关键 动效的基本操作 做了关键的图层按快捷键U就会显示到该图层调动出...
  • 1 串口发送一数据时,两个字节的间隔时间是必须小于3.5个字符 时间 否则就算两个字节不处于同一数据中。 2 波特率:发送二进制数据位的速率,习惯上用 baud 表示,即我们发送一位二进制数据的持续时间=1/...
  • unity中获得一中函数执行的时间

    千次阅读 2016-11-24 11:08:59
    void Start ()  {   float t = Time.time;   TestTime();   UnityEngine.Debug.Log(string.Format("用时:{0} ...//得到结果为0,因为Time.time每重新赋值之后才会更新一次   Stopwatch sw
  • 串口发送一数据时,两个字节的间隔时间是多少? 这里先搞懂什么是波特率:  波特率:发送二进制数据位的速率,习惯上用 baud 表示,即我们发送一位二进制数据的持续时间=1/baud。 如果波特率为9600,发送...
  • Modbus 通讯时规定主机发送完一组命令必须间隔3.5个字符再发送下一组新命令,这个3.5字符主要用来告诉其他设备这次命令(数据)已结束,而这个3.5字符的时间间隔采用以下方式计算: 1个字符包括1位起始位、8位数据...
  • 音频的播放时间=一个AAC对应的采样样本的个数/采样频率(单位为s) 一 1024个 sample。采样率 Samplerate 44100Hz,每秒44100个sample, 所以根据公式  音频的播放时间=一个AAC对应的采样样本的个数/...
  • 原来写在新浪的,地址:http://blog.sina.com.cn/s/blog_6ba9a5300102weq6.html
  • opencv在开发win32平台开发视频应用时,可以用cvCaptureFromAVI方便提取中视频的信息 但是在Android中虽然有这个...但是我又需要提取出每一的信息来计算待检测物体的移动速度 android SDK自带的MediaMetadataRetrieve
  • AVStream *stream=pFormatCtx->streams[packet.stream_index]; avcodec_decode_video2(pCodecCtx,pFrame, &got_frame, &packet);  int second= pFrame->pts * av_q2d(stream->time_base);  具体就是如上函数了。
  • python OpenCV 按(数/时间)间隔截取视频

    万次阅读 热门讨论 2020-04-16 10:43:59
    帧率(FPS):每秒钟播放的数 1、如果你想直接通过数间隔截取视频,那直接使用可以使用下面的代码: import cv2 cap = cv2.VideoCapture("./query_video/test_video_0.mp4") c = 1 frameRate = 100 # ...
  • 我们在对视频文件做分析的时候,往往对某一数据进行标注,所以当Opencv读取数据的时候,要带有这数据的时间戳,OpenCV获取的时间戳与ffmpeg里面的时间戳相比还是简单很多,让用户知道这数据处在视频文件的...
  • 抖音多延迟教你前端实现方式

    千次阅读 2019-12-26 20:23:12
    最近在学习WebAssembly,因为是...先简单分析下这个效果,假设咱们有一个视频是宽400300, 分为100个4030的小方格,用固定的时间间隔播放格子。 视频顺序播放 async function initVideo() { const stream = aw...
  • 1、VideoInfo.java 获取视频信息。读者可认真研究此方法。 ...从此类,可以看出,我把 ffmpeg,解压在了 D:\\ffmpeg\\bin\\ffmpeg....3、VideoFirstThumbTaker.java 获取第一图片 import java.io....
  • ffmpeg关键命令

    千次阅读 2018-08-07 16:28:51
    设置关键信息  ffmpeg -i 15s.mp4 -g 10 gop10_15s.mp4 查看关键信息 ffprobe -show_frames gop10_15s.mp4 ffprobe -show_frames -select_streams v gop10_15s.mp4
  • CCAnimation::setDelayPerUnit... // 设置两之间的时间间隔 //主体动画  CCAnimation* animation = CCAnimation::create();  animation->addSpriteFrameWithFileName("catBody1.png");  animation
  • 802.11的beacon

    千次阅读 2019-09-10 14:49:24
    Beacon是802.11中一个周期性的,每隔一段时间就会向外界发出一个Beacon(信标)信号用来宣布自己802.11网络的存在。 概貌如下,下面逐个分析各个字段 MAC header 可以看到MAC header有23 byte Version: 802.11...
  • 和子:上下行传输的持续时间是10ms,一个可以分为10个子,也就是说,一个子的持续时间为1ms,由于子载波间隔是可选的,那么一个时隙的持续时间也不是固定的,但是如果子载波间隔固定,其时隙的持续时间...
  • 得到一张frame或是一块macroblock的解碼时间? -- 比方说我目前有一个GOP做读取并且播放 第一张 i-frame 的 decoding time 是0.3秒 第二张 p-frame 的 decoding time 是0.2秒 第三张 b-frame ..... 诸如此类的 ...
  • NR中定义(radios frame)的长度为10ms,每分为同样的两个半(half frame),每个半为5ms,每又可以分为10个子(subframe)。 二、NR结构 NR的无线结构如下图: 子0~4为前半,子5~9为后半,每...
  • 同步

    千次阅读 2019-05-07 11:49:29
    同步技术是早期RTS游戏常用的一种同步技术,本篇文章要给大家介绍的是RTX游戏中同步实现,同步是一种前后端数据同步的方式,一般应用于对实时性要求很高的网络游戏,想要了解更多同步的知识,继续往下看。
  • 5G/NR NR结构(时域)学习总结

    万次阅读 多人点赞 2019-07-17 22:26:56
    同时定义常量,其中 、 、 ,为LTE中的基本时间单位,是LTE与NR之间的基本时间单位比值。对于NR和LTE的两种基本时间单位而言,NR的采样频率明显高于LTE的。同时,NR的DFT从LTE的2048变成了4096。 在NR中,支持5...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 319,878
精华内容 127,951
关键字:

帧时间

友情链接: pb_updateexe.rar