Ubuntu中安装最新FFmpeg及视频图片数据帧的提取
如题所述本文是关于在Ubuntu中安装FFmpeg,如何之为最新版,那是因为是直接从FFmpeg 源码download官网 下载的源码进行编译安装的。本文中安装FFmpeg的方法援引这位博主分享的博文
https://blog.csdn.net/qq_38863413/article/details/105017775
依赖库的安装
在进行FFmpeg的编译安装之前需要对其所依赖的一些库安装,如:yams, sdl1.2, sdl2.0,如下所示:
sudo apt-get install yasm
sudo apt-get install libsdl1.2-dev
sudo apt-get install libstdl2-dev
但是在安装第三个依赖库:libstdl2-dev时出现状况:
无法通过apt找到安装包,但是Ubuntu的库有更新过,无奈之下只能从其官网下载源码编译安装了,传送门:libstdl2-dev源码下载。
解压后,进行编译安装:
1. ./configure
2. make
3. sudo make install
OK,依赖库安装好之后,接下来就是安装FFmpeg了。
同样下载好源码的压缩包之后,解压进入该文件目录,编译安装:
1. ./configure
2. make
3. sudo make install
安装的时间有点长,安装好之后检查安装情况,可使用以下命令进行FFmpeg的版本的查询,从而判断是否安装成功。
OK,FFmpeg安装好了,solosolo进入正题,此次安装FFmpeg的主要目的之一就是提取视频中的图片帧。不知道各位有没遇到过这样的情况,就是在视频中忽然出现某一帧图片是你很想拿来做壁纸的,但是用电脑截屏的话总是感觉没有原视频看起来清晰,不过这也和你屏幕的分辨率有关。AE这样强大的视频编辑处理软件又吃笔记本内存,所以,本人选择使用了FFmpeg这一强大的开源流媒体处理工具(库)。所以我要做的就是在视频中提取我想要的图片帧保存起来。这样的操作使用FFmpeg就是一句命令就能够解决的事。
使用FFmpeg主要是按时间进行图片帧的提取:
1、根据时间段进行图片数据帧的提取,如下在视频时间是2分53秒到2分55秒处按帧进行图片的提取。
ffmpeg -i ./xxxxx.flv -ss 02:53 -to 02:55 -f image2 ./xxxxx-%d.png
实际使用如下:
lin@Dev:~/Videos$ ffmpeg -i ./Aimer.flv -ss 02:53 -to 02:55 -f image2 ./Aimer-%d.png
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
configuration:
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
Input #0, flv, from './Aimer.flv':
Metadata:
description : Codec by Bilibili XCode Worker v4.8.35(fixed_gap:False)
metadatacreator : Version 1.9
hasKeyframes : true
hasVideo : true
hasAudio : true
hasMetadata : true
canSeekToEnd : true
datasize : 74368157
videosize : 71083119
audiosize : 3231802
lasttimestamp : 195
lastkeyframetimestamp: 195
lastkeyframelocation: 74369555
Duration: 00:03:15.57, start: 0.080000, bitrate: 3042 kb/s
Stream #0:0: Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 2908 kb/s, 25.03 fps, 25 tbr, 1k tbn, 50 tbc
Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp, 128 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> png (native))
Press [q] to stop, [?] for help
Output #0, image2, to './Aimer-%d.png':
Metadata:
description : Codec by Bilibili XCode Worker v4.8.35(fixed_gap:False)
metadatacreator : Version 1.9
hasKeyframes : true
hasVideo : true
hasAudio : true
hasMetadata : true
canSeekToEnd : true
datasize : 74368157
videosize : 71083119
audiosize : 3231802
lasttimestamp : 195
lastkeyframetimestamp: 195
lastkeyframelocation: 74369555
encoder : Lavf58.29.100
Stream #0:0: Video: png, rgb24, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc58.54.100 png
frame= 50 fps=0.8 q=-0.0 Lsize=N/A time=00:00:02.00 bitrate=N/A speed=0.0327x
video:48429kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
上述运行后的结果是frame= 50,即提取了50帧的图片,图片的数量与视频的帧率相关。
2、视频逐帧提取
ffmpeg -i ./xxxxx.flv xxxxx-%d.png
3、截取某个时间点的图片帧
ffmpeg -i ./xxxxx.flv -ss 01:11 -f image2 ./xxxxx.png
上述FFmpeg使用过程中所设计的参数如下:
参数 | 释义 |
---|---|
-i | 表示输入文件,后接需要进行处理的视频文件 |
-ss | 表示要提取的图片帧所在的或者说是起始的时间戳 |
-to | 和其字面的意思一样,表示截取动作的终止的时间戳 |
-f | 代表输出文件,后面需要接 image2,并指明输出文件的储存路径 |
更多详情敬请访问:ffmpeg Documentation 官网
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/116996.html