Ubuntu中安装最新FFmpeg及使用FFmpeg进行视频图片数据帧的提取

标签: FFmpeg

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时出现状况:libstdl2-dev
  无法通过apt找到安装包,但是Ubuntu的库有更新过,无奈之下只能从其官网下载源码编译安装了,传送门:libstdl2-dev源码下载
SDL2.0
  解压后,进行编译安装:

 1. ./configure 
 2. make 
 3. sudo make install

  OK,依赖库安装好之后,接下来就是安装FFmpeg了。
FFmpeg
  同样下载好源码的压缩包之后,解压进入该文件目录,编译安装:

 1. ./configure 
 2. make 
 3. sudo make install

  安装的时间有点长,安装好之后检查安装情况,可使用以下命令进行FFmpeg的版本的查询,从而判断是否安装成功。
FFmpeg
  OK,FFmpeg安装好了,solosolo进入正题,此次安装FFmpeg的主要目的之一就是提取视频中的图片帧。不知道各位有没遇到过这样的情况,就是在视频中忽然出现某一帧图片是你很想拿来做壁纸的,但是用电脑截屏的话总是感觉没有原视频看起来清晰,不过这也和你屏幕的分辨率有关。AE这样强大的视频编辑处理软件又吃笔记本内存,所以,本人选择使用了FFmpeg这一强大的开源流媒体处理工具(库)。所以我要做的就是在视频中提取我想要的图片帧保存起来。这样的操作使用FFmpeg就是一句命令就能够解决的事。
build
使用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 官网

版权声明:本文为qq_33475105原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33475105/article/details/106168268

智能推荐

Layui parent.layui.open弹框之Iframe 传值处理

Layui open弹框获取值的方法 介绍:Layui 弹框之Iframe传值处理 我的想法 解决 子页面 获取 父页面方法以及元素。 上代码,看图片 原创作品,欢迎来讨论! 介绍:Layui 弹框之Iframe传值处理 本人在使用到layui的iframe版 ,里面使用到了弹框 。 普通弹框:layui.open(); 像这种传递值都没什么问题 , 子页面获取父页面值 或者父页面获取子页面值 全...

外置Tomcat无法使用devtools实现热部署

练手的项目每次有源码或者页面更新都需要重新启动,不能忍,热部署走一波 这个项目是用外置Tomcat启动的 项目层级目录 模块依赖关系:service 依赖于 model 依赖于 api (启动类在service模块中) 引入devTools依赖,确定相关idea配置无误后,发现热部署没有生效 得出结论: devTools无法对使用对外置的tomcat运行的项目生效 于是在网上搜索外置tomcat项...

C++跨平台库QT学习7 使用UnitTest单元测试入门

C++跨平台库QT学习7 使用UnitTest单元测试入门 一、新建子目录项目 二、新建控制台项目 三、新建测试用例子目录项目 mycalctest.pro文件内容: 测试用例文件test_mycalctesttest.cpp 在子项目`mycalctest`点右键、运行 一、新建子目录项目 在QT点击菜单 文件-新建文件或项目-其他项目-子目录项目: 二、新建控制台项目 然后继续建一个子项目: ...

Python实用模块(二十五)loguru

软硬件环境 windows 10 64bits anaconda with python 3.7 loguru 0.5.3 前言 Python实用模块(十四)logging https://xugaoxiang.com/2019/12/04/python-module-logging 已 经介绍过了python内置日志模块logging。我们要使用logging,一般来讲,都是需要进行一...

Glide图片加载框架的使用简介与功能介绍

Glide图片加载框架的使用简介 . 1. 在app/build.gradle文件当中添加如下依赖: 2. 在AndroidManifest.xml中声明一下网络权限才行: 3. 开始使用Glide加载图片 with()方法的介绍 作用: 用于创建一个加载图片的实例;with()方法可以接收Context、Activity或者Fragment类型的参数 注意: with()方法中传入的实例会决定G...

猜你喜欢

编写过滤器解决全局乱码问题

过滤器编写步骤 编写一个类实现javax.servlet.Filter接口 重写接口中所有的方法,其中doFilter方法执行过滤的功能 配置过滤器 在web.xml中配置 使用注解@WebFilter 解决乱码需要添加这句代码:req.setCharacterEncoding(“utf-8”); 字符集与网页的编码要一致 EncodingFilter.java: 过滤器的...

HTML+CSS+JS做一个简易音乐播放器

先给大家看下效果: 实现功能:音乐播放,歌词跟随进度滚动,中间随着音乐播放图片360度旋转 文件目录: 做一个播放器,音乐和歌词事先要下载好,搜一些自己喜欢的封面,让图片360度旋转的样式,通过按钮增删样式达到跟音乐同步进行: 其中歌词匹配才是让我头疼的,所有JS代码部分: 需要所有源码,可以去github上自行下载: https://github.com/lzs1996/MusicPlayer....

Ecplise(jsp文件)导入css文件路径没错,但是没有样式(不生效/无效)

一、检查css文件的【路径】是否正确 1、:将页面在【浏览器】打开,按【Ctrl+u】,查看【页面源代码】(也可右键点击) 若页面进行【跳转】------>说明css路径没错 二、若路径有问题 参考链接: 1、Jsp中引入css等外部文件路径问题 https://blog.csdn.net/prospective0821/article/details/79775626?utm_medium...

自定义View——仿支付宝支付弹窗界面

上面这个是采用自定view方式实现的一个仿支付宝支付弹窗的效果; 1、自定义view并初始化自定义属性 继承自EditText的话可以用使用EditText中的一些属性和方法,在初始化完自定义属性后要记得调用recycle()方法进行回收; 2、初始化画笔 在第三个构造函数中调用就可以了, 3、在onDraw()方法中进行绘制 在绘制的时候先要计算出一个密码所占的宽度 获取到一个密码的宽度后就可以...

人工智能 一种现代方法 第11章 现实世界的规划与行动

文章目录 时间、调度和资源 车间调度问题 忽略资源约束的时间调度问题:关键路径方法 有资源约束的时间调度问题 分层规划 搜索原语解 搜索抽象解 非确定性问题的规划 无传感器规划 应急规划 资源分享 本文旨在讲明: 1)时间,调度,资源 2)分层规划 3)非确定性问题规划 时间、调度和资源 经典规划能做: 1)做什么动作 2)按什么顺序做 不能做: 1)动作何时发生 2)持续多久 3)考虑资源约束 ...