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

导读:本篇文章讲解 Ubuntu中安装最新FFmpeg及使用FFmpeg进行视频图片数据帧的提取,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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 官网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/116996.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!