参考维基百科
Key frame
的解释:
关键帧,是指动画中一个绘图,定义任何的起点和终点平滑过渡。一系列关键帧定义了观看者将看到的运动,而关键帧在电影,视频或动画上的位置定义了运动的时间。
Computer Hope 的这篇文章
What is a Key Frame?
说的更好理解:
In media production, a key frame or keyframe is a location on a timeline which marks the beginning or end of a transition. It holds special information that defines where a transition should start or stop. The intermediate frames are interpolated(插值) over time between those definitions to create the illusion of motion. In computer animation, like 3D animation or non-linear video editing, this interpolation is performed mathematically by the CPU.
In the following screenshot from Adobe After Effects, the keyframes are highlighted with red arrows. Each of the keyframes defines a position of the animated logo (first on the left, and then one second later on the right). When the animation is played, the logo transitions smoothly from the start position to the end position. Key frames can be used in any time-based media production process where transitions are defined, including audio production and high-end digital video compression.
通过ffmpeg提取关键帧,参考
视频关键帧提取
:
ffmpeg -i video_name.mp4 -vf select='eq(pict_type\,I)' -vsync 2 -s 1920*1080 -f image2 keyframe-%02d.jpeg
各参数解释:
-i :输入文件,这里的话其实就是视频;
-vf:是一个命令行,表示过滤图形的描述。选择过滤器select会选择帧进行输出:pict_type和对应的类型:PICT_TYPE_I 表示是I帧,即关键帧;
-vsync 2:阻止每个关键帧产生多余的拷贝;
-f image2 name_%02d.jpeg:将视频帧写入到图片中,样式的格式一般是: “%d” 或者 “%0Nd”
-s:分辨率,1920*1080
这样保存下来的关键帧的命名顺序是从1开始的,数字表示第几个关键帧。
若需要保存关键帧在原始视频中所有帧的位置,参考Extracting the index of key frames from a video using ffmpeg中提到的命令:
ffprobe -i text.mp4 -select_streams v -show_frames -show_entries frame=pict_type -of csv | grep -n I | cut -d ':' -f 1 > frame_index.txt
-i 后面跟输入文件,这里就是视频;
-select_streams v 表示只选择查看音频流的信息;
-show_frames 表示显示视频帧信息;
-show_entries frame=pict_type 表示从frame section把pict_type的entry过滤出来;
-of csv 表示输出格式是csv,相当于 -print_format csv;
grep -n I 表示编号并过滤出I帧;
cut -d ‘:’ -f 1 表示以’:'作为分隔符,输出第一项。
然后会生成一个 frame_index.txt 的文件。其中,保存的即为关键帧在视频中的帧的索引位置,例如:
然后再将生成的关键帧与索引对应起来:
ls -1 keyframe*.jpeg | awk -F ' ' '{print$9}' > keyframe.txt
paste frame_index.txt keyframe.txt> result.txt
生成的 result.txt 格式为:关键帧在所有帧中的序号 提取出来的关键帧名字。例如,
1 thumbnails-01.jpeg
110 thumbnails-02.jpeg
240 thumbnails-03.jpeg
390 thumbnails-04.jpeg
517 thumbnails-05.jpeg
613 thumbnails-06.jpeg
763 thumbnails-07.jpeg
913 thumbnails-08.jpeg
1063 thumbnails-09.jpeg
1213 thumbnails-10.jpeg
视频关键帧提取 https://blog.csdn.net/qingyuanluofeng/article/details/45375647
ffmpeg 提取关键帧, https://blog.csdn.net/u011394059/article/details/78728809
What is a Key Frame? https://www.computerhope.com/jargon/k/key-frame.htm
一. 什么是关键帧参考维基百科Key frame的解释: 关键帧,是指动画中一个绘图,定义任何的起点和终点平滑过渡。一系列关键帧定义了观看者将看到的运动,而关键帧在电影,视频或动画上的位置定义了运动的时间。Computer Hope 的这篇文章 What is a Key Frame? 说的更好理解: In media production, a key frame or keyfra...
《简记
FFmpeg取
帧的用法》
作为简单的
视频流截图的工具,
FFmpeg再合适不过了,当然它的功能是很强大的,也可以截取音频,
视频格式转换等等,这里只记录一下
使用ffmpeg命令从
视频中取
帧的常用参数,以及一个用python调用命令行截取
视频的小脚本,我想隔几秒取一
帧图像,搜索发现网上给出的答案都比较复杂,所以这里给出一个简单有效的参数设置方案。
Key Words:
视频取
帧、
FFmpeg
Beijing, 2020
作者:RaySue
Code:
Agile Pioneer
背景:我这个代码是在我的Android demo 里截取出来的,项目里是实现了从相册里选择一个视频,然后每秒生成一张截图;当然这个代码在非android 项目也是可以使用的。
头文件:decode_video_to_img.h
#ifndef DEMO_DECODE_VIDEO_TO_IMG_H
#define DEMO_DECODE_VIDEO_TO_IMG_H
int createImg(char* inputFileName, char * outputFileName);
#endif /
这里使用FFmpeg用来对UAV传回来的视频进行分析(目标检测)的第一步----提供测试图片集。下面是使用FFmpeg提取视频关键帧的步骤:
1.安装FFmpeg:直接官网下载或者云下载链接:http:// pan.baidu.com/ s/1eR4 xy0a 密码:lmho。然后直接解压,添加环境变量就可使用。
可以命令行输入FFmpeg -version测试安装是否成功:
2.使用F
为了对
视频做一些处理,需要
提取视频中的图像,根据不同需求有时候可能需要按一定
时间间隔或
帧间隔来
提取视频中的
帧,目的是为了处理提高效率和减少内存的占用,
使用OpenCV也可以完成这一功能,不过相对于
FFmpeg来说,处理
视频的效率要慢不少,对于数量比较大的
视频处理建议
使用FFmpeg来进行。
通过
FFmpeg获取
视频的总
帧数
ffprobe <input> -select_...
每5秒强制插入一个关键帧,你可以使用:
ffmpeg -i 原视频-force_key_frames expr:gte(t,n_forced*5) 生成的新的视频 ;
下面可以将添加的关键帧以图片的形式展现 :
ffmpeg -i 添加帧视频 -vf select='eq(pict_ty...
在使用Qt获取任意时刻的关键帧之前,需要先了解一下ffmpeg的基本概念。在ffmpeg中,关键帧(I帧)是视频编码中最重要的一类帧,它包含整幅图像的全部信息,其他帧都是通过与前一帧或后一帧进行差别计算得到的。总之,使用Qt获取任意时刻的关键帧需要结合ffmpeg库来实现,通过打开视频文件、查找关键帧、解码关键帧和显示关键帧等步骤来完成。该函数可以在指定时间点处搜索最近的关键帧,如果找到关键帧则返回0,否则返回-1。显示关键帧:将解码后的关键帧显示出来,可以使用Qt提供的QImage类来处理图像数据。