使用FFmepg进行视频转码、视频格式转换、图片提取等!
一、什么是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进行视频转码、视频格式转换、图片提取等!相关推荐
- 利用ffmpeg把一帧原始视频数据转换成jpg格式的图片
利用ffmpeg对一帧原始的视频数据转换成jpg格式的图片,保存到本地,用于Android显示 #include <jni.h> #include <stdio.h> #inc ...
- 全能视频转换器,万能格式转换
狸窝全能视频转换器是一款功能强大.界面友好的全能型音视频转换及编辑的万能格式转换工具.有了它,您可以在几乎所有流行的视频格式之间,任意相互转换.如:RM.RMVB.VOB.DAT.VCD.SVCD.A ...
- 如何使用在线视频转换器将mkv格式转换成mp4视频
如何快速的将视频mkv转mp4?用于mkv格式转换为mp4格式的软件有很多,但是小编发现大多数朋友就只会修改后缀名或者利用cmd命令来实现mkv格式转换为mp4,不知道其他的方法,所以今天小编就来教大 ...
- PHP-七牛云上传视频视频转码视频瘦身(视频压缩视频缩小)
视频上传: 官方文档链接直达:https://developer.qiniu.com/kodo/sdk/1241/php#4 如果不懂直接看我下面的代码: //引入所需的类 use Qiniu\Aut ...
- 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 ...
- PDF文件格式转换攻略:PDF格式转换图片格式
关于PDF文件格式的转换大家有了解多少吗?就比如将PDF格式转换成图片格式,可能之前大家对于PDF件大家都有了解到,办公中我们经常遇到过.现在小编在这里教大家如何将PDF格式转换成图片格式,有兴趣的伙 ...
- python实现pdf格式转换图片格式
使用python代码实现pdf转换图片格式 核心代码: import io from wand.image import Image from wand.color import Color from ...
- FFmpeg 视频转码m3u8格式 使用基本方法
首先了解一下为什么使用m3u8格式, 一般我们视频格式都是MP4 或者AVI 但是在使用播放器播放时候需要考虑 mp4的关键帧元素往往很大,需要加载很长时间才能开始播放,网速不好的情况缓冲加载时间过长 ...
- 优酷视频转码MP4格式
- 视频在线剪辑及格式转换
自己开发的一个免费在线剪辑工具 功能描述 利用最新的web浏览器技术实现本地视频的在线剪辑,且不需要上传视频到服务器. 原理 利用浏览器自身的处理能力对本地视频进行处理,网站仅提供处理的逻辑代码. 所 ...
最新文章
- 笔记 | 吴恩达Coursera Deep Learning学习笔记
- ARM Linux (S3C6410架构/2.6.35内核)的内存映射(三)
- 试玩 go-socks5
- 超棒的跨浏览器纯CSS动画实现 - Animate.css
- 基于dsp_builder的算法在FPGA上的实现(转自https://www.cnblogs.com/sunev/archive/2012/11/17/2774836.html)...
- Javascript 两种 function 定义的区别
- 538. Convert BST to Greater Tree 把二叉搜索树转换为累加树
- IE6.0、IE7.0 、FireFox 在样式中的不同写法.doc
- uboot源码——主Makefile分析
- jQuery 的各种练习
- java数据导出ex_Java高级特性注解:注解实现Excel导出功能
- 移动硬盘主分区格式化后,逻辑分区找不到的解决方法
- mac如何禁止adobe creative cloud开机自启?
- Python 面向对象一(转载)
- 干净卸载sqlserver2019 亲测有效!
- linux 字符串模糊匹配,awk模糊匹配
- Cypress USB 芯片固件修改,改序列号(Serial Number)
- 动环监控安装及调试过程,动环监控调试是什么
- 容联CPO熊谢刚:“通讯+AI”打造数智化新基建
- ground truth的含义