一、什么是FFmpeg?

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。

二、安装FFmpeg

在Ubuntu中安装FFmpeg非常简单,只需在终端中输入如下命令即可自动安装:

sudo apt-get install ffmpeg

三、常用参数解释

-i 设定输入流
-f 设定输出格式
-ss 开始时间# 视频参数
-b 设定视频流量(码率),默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器 # 音频参数
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频

四、常用功能的使用方法

1.视频格式转换

比如avi转mp4,或者mp4转ts

ffmpeg -i input.avi output.mp4
ffmpeg -i input.mp4 output.ts

2. 提取音频

ffmpeg -i input.mp4 -acodec copy -vn output.aac

上面的命令,默认mp4的audio codec是aac,如果不是会出错,咱可以暴力一点,不管什么音频,都转为最常见的aac。

ffmpeg -i input.mp4 -acodec acc -vn output.aac

-vn: 不处理视频

3.提取视频

将带有音频的视频提取为纯视频:

ffmpeg -i input.mp4 -vcodec copy -an output.mp4

-an :不处理音频

4. 视频剪切

ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4

-ss表示开始切割的时间,-t表示要切多少。上面就是从开始,切5秒钟出来。

注意一个问题,ffmpeg 在切割视频的时候无法做到时间绝对准确,因为视频编码中关键帧(I帧)和跟随它的B帧、P帧是无法分割开的,否则就需要进行重新帧内编码,会让视频体积增大。所以,如果切割的位置刚好在两个关键帧中间,那么 ffmpeg 会向前/向后切割,所以最后切割出的 chunk 长度总是会大于等于应有的长度。

5. 码率控制

码率控制对于在线视频比较重要。因为在线视频需要考虑其能提供的带宽。那么,什么是码率?很简单:bitrate = file size / duration,比如一个文件20.8M,时长1分钟,那么,码率就是:biterate = 20.8M bit/60s = 20.8*1024*1024*8 bit/60s= 2831Kbps

一般音频的码率只有固定几种,比如是128Kbps, 那么,video的就是:video biterate = 2831Kbps -128Kbps = 2703Kbps。说完背景了。好了,来说ffmpeg如何控制码率。 ffmpg控制码率有3种选择,-minrate -b:v -maxrate

  • -b:v主要是控制平均码率。 比如一个视频源的码率太高了,有10Mbps,文件太大,想把文件弄小一点,但是又不破坏分辨率。
ffmpeg -i input.mp4 -b:v 2000k output.mp4
  • 不过,ffmpeg官方wiki比较建议,设置b:v时,同时加上 -bufsize-bufsize 用于设置码率控制缓冲器的大小,设置的好处是,让整体的码率更趋近于希望的值,减少波动。(简单来说,比如1 2的平均值是1.5, 1.49 1.51 也是1.5, 当然是第二种比较好)

ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4
  • -minrate -maxrate就简单了,在线视频有时候,希望码率波动,不要超过一个阈值,可以设置maxrate。

ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

6.视频编码格式转换

视频的编码是MPEG4,转换为H264编码:

ffmpeg -i input.mp4 -vcodec h264 output.mp4

或相反:

ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4

当然了,如果ffmpeg当时编译时,添加了外部的x265或者X264,那也可以用外部的编码器来编码。(不知道什么是X265,可以Google一下,简单的说,就是她不包含在ffmpeg的源码里,是独立的一个开源代码,用于编码HEVC,ffmpeg编码时可以调用它。当然了,ffmpeg自己也有编码器)

ffmpeg -i input.mp4 -c:v libx265 output.mp4
ffmpeg -i input.mp4 -c:v libx264 output.mp4

7.只提取视频ES数据

ffmpeg –i input.mp4 –vcodec copy –an –f m4v output.h264

8.过滤器的使用

参考:ffmpeg filter过滤器 基础实例及全面解析

例1:将输入的1920x1080缩小到960x540输出

ffmpeg -i input.mp4 -vf scale=960:540 output.mp4

//ps: 如果540不写,写成-1,即scale=960:-1, 那也是可以的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比。

例2:为视频添加logo

./ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4

9.从视频中提取图像帧

ffmpeg -i test.mp4 -r 1 PATH/TO/IMAGE/image-%05d.jpeg
# -r,指定抽取视频的帧率,即从视频中每秒抽取的帧数,默认是每秒24帧。image-%5d.jpeg,指定输出文件的名字。ffmpeg -i test.mp4 -r 1 -t 4 PATH/TO/IMAGE/image-%05d.jpeg
# -t,表示取t秒时间的帧ffmpeg -i test.mp4 -r 1 -ss 00:00:40 PATH/TO/IMAGE/image-%05d.jpeg
# -ss,表示截取帧初始时间ffmpeg -i test.mp4 -r 1 -ss 00:00:40 -vframes 10 PATH/TO/IMAGE/image-%05d.jpeg
# -vframes,表示截取多少帧

全文参考:https://www.jianshu.com/p/ddafe46827b7

使用FFmepg进行视频转码、视频格式转换、图片提取等!相关推荐

  1. 利用ffmpeg把一帧原始视频数据转换成jpg格式的图片

    利用ffmpeg对一帧原始的视频数据转换成jpg格式的图片,保存到本地,用于Android显示 #include <jni.h> #include <stdio.h> #inc ...

  2. 全能视频转换器,万能格式转换

    狸窝全能视频转换器是一款功能强大.界面友好的全能型音视频转换及编辑的万能格式转换工具.有了它,您可以在几乎所有流行的视频格式之间,任意相互转换.如:RM.RMVB.VOB.DAT.VCD.SVCD.A ...

  3. 如何使用在线视频转换器将mkv格式转换成mp4视频

    如何快速的将视频mkv转mp4?用于mkv格式转换为mp4格式的软件有很多,但是小编发现大多数朋友就只会修改后缀名或者利用cmd命令来实现mkv格式转换为mp4,不知道其他的方法,所以今天小编就来教大 ...

  4. PHP-七牛云上传视频视频转码视频瘦身(视频压缩视频缩小)

    视频上传: 官方文档链接直达:https://developer.qiniu.com/kodo/sdk/1241/php#4 如果不懂直接看我下面的代码: //引入所需的类 use Qiniu\Aut ...

  5. swf转换成html源码,swf格式转换成html(Swf format conversion HTML).doc

    swf格式转换成html(Swf format conversion HTML) swf格式转换成html(Swf format conversion HTML) Now basically is t ...

  6. PDF文件格式转换攻略:PDF格式转换图片格式

    关于PDF文件格式的转换大家有了解多少吗?就比如将PDF格式转换成图片格式,可能之前大家对于PDF件大家都有了解到,办公中我们经常遇到过.现在小编在这里教大家如何将PDF格式转换成图片格式,有兴趣的伙 ...

  7. python实现pdf格式转换图片格式

    使用python代码实现pdf转换图片格式 核心代码: import io from wand.image import Image from wand.color import Color from ...

  8. FFmpeg 视频转码m3u8格式 使用基本方法

    首先了解一下为什么使用m3u8格式, 一般我们视频格式都是MP4 或者AVI 但是在使用播放器播放时候需要考虑 mp4的关键帧元素往往很大,需要加载很长时间才能开始播放,网速不好的情况缓冲加载时间过长 ...

  9. 优酷视频转码MP4格式

  10. 视频在线剪辑及格式转换

    自己开发的一个免费在线剪辑工具 功能描述 利用最新的web浏览器技术实现本地视频的在线剪辑,且不需要上传视频到服务器. 原理 利用浏览器自身的处理能力对本地视频进行处理,网站仅提供处理的逻辑代码. 所 ...

最新文章

  1. 笔记 | 吴恩达Coursera Deep Learning学习笔记
  2. ARM Linux (S3C6410架构/2.6.35内核)的内存映射(三)
  3. 试玩 go-socks5
  4. 超棒的跨浏览器纯CSS动画实现 - Animate.css
  5. 基于dsp_builder的算法在FPGA上的实现(转自https://www.cnblogs.com/sunev/archive/2012/11/17/2774836.html)...
  6. Javascript 两种 function 定义的区别
  7. 538. Convert BST to Greater Tree 把二叉搜索树转换为累加树
  8. IE6.0、IE7.0 、FireFox 在样式中的不同写法.doc
  9. uboot源码——主Makefile分析
  10. jQuery 的各种练习
  11. java数据导出ex_Java高级特性注解:注解实现Excel导出功能
  12. 移动硬盘主分区格式化后,逻辑分区找不到的解决方法
  13. mac如何禁止adobe creative cloud开机自启?
  14. Python 面向对象一(转载)
  15. 干净卸载sqlserver2019 亲测有效!
  16. linux 字符串模糊匹配,awk模糊匹配
  17. Cypress USB 芯片固件修改,改序列号(Serial Number)
  18. 动环监控安装及调试过程,动环监控调试是什么
  19. 容联CPO熊谢刚:“通讯+AI”打造数智化新基建
  20. ground truth的含义

热门文章

  1. linux中nginx启动,重启,关闭命令
  2. chtMultiRegionFoam求解器及算例分析
  3. 程序员必备的几个图标网站
  4. vim比较目录diff
  5. “云”上就诊,泽塔云超融合助力医院数字化转型
  6. mysql不等于null和等于null的写法
  7. 从零开始学做机器人——入门书籍资料
  8. 致程序员之家论坛的所有会员
  9. 【干货收藏】数据分析师必备的20种分析思维
  10. 著名的菲尔人格测试,看看你适合做什么类型的工作