1.ffmpeg、ffplay、ffprobe命令使用
1.学前知识
1.1视频码率值
码率公式: 码率(kbps)=文件大小(KB)*8/时间(秒)
所以码率和视频文件大小成正比的,不过码率超过一定值后,人眼是看不出效果的.

接下来,我们便先来学习ffmpeg命令使用
2.ffmpeg常用命令使用
ffmpeg命令- 用于转码的应用程序, 也可以从url/现场音频/视频源抓取输入源
参考:http://ffmpeg.org/ffmpeg.html
常用参数使用
主要参数
- -i 设定输入流
- -f 设定输出格式
- -ss 00:00:15 从制定时间开始转换(如果不加:则表示为秒,比如-ss 70,表示从第70秒开始)
- -t 00:01:15 设置输出的视频时长时间(如果不加:则表示为秒,比如-t 110,表示110秒)
- -y 覆盖已有文件
- -fs limit_size 设置文件大小上限
视频参数
- -b:v 640k设定视频码率为640k,默认为200Kbit/s
- -minratee 600k 设定视频码率最小阈值为700k
- -maxrate 700k 设定视频码率最大阈值为700k
- -r 60 设定帧速率fps为60,默认为25
- -s 720x352 设定画面的宽与高为720X352
- -aspect 16:9 设定画面的比例为16:9 (也可以使用1.3333, 1.7777)
- -vn 不处理视频(比如只提取音频的时候)
- -vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器(比如-vcodec codec,表示使用输入流的格式, -vcodec xvid表示使用XVID编码压缩视频)
- -vf scale=960:540 将输入的视频压缩至960X540输出,如果写为960:-1,则输出时保持原始的宽高比
音频参数
- -ar 22500 设定采样率(audio rate)为22.5khz (单位:Hz),PSP只认24000
- -b:a 640k 设定音频码率为640k,默认为200Kbit/s
- -ac 2 设定声音的Channel数为2(1就是单声道,2就是立体声)
- -acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器(比如-acodec codec,表示使用输入流的格式, -acodec aac表示使用aac编解码)
- -an 不处理音频(比如只提取视频的时候)
示例命令如下所示:
ffmpeg –h //打开帮助 ffmpeg -i input.avi -b:v 640k output.ts //转换为ts视频文件
ffmpeg -i test.mp4 -f s16le out.pcm //提取原始音频数据,s16le表示(signed 16 bits little endian, 有符号 16 位小端)
ffmpeg -i v1080.mp4 -t 10 -s 240x128 -pix_fmt yuv420p out240x128.yuv //提取yuv420p数据,时长10s
ffmpeg -i test.mp4 -vn music.aac //提取出音频文件 ffmpeg -i test.mp4 -vn music.aac //提取出音频文件 ffmpeg -i input.mp4 -vcodec copy -an output.mp4 //输出的视频取消掉音频流
//-i input.avi:表示输入文件为input.avi
//-b:v 640k:设置输出的视频文件码率值
// output.ts:生成的文件名称 ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv
//-an:取消output.ts视频文件的音频流 ./ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4
//将logo贴在左上角 ./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4
//贴在右下角 ./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay0:H-h output.mp4
//贴在左下角, overlay W-w:0 贴在右上角 ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4
//添加过滤器,位置位于[0,0],w=220,h=90,厚度为100(厚度越大,越模糊).1:表示有一个绿色的矩形,设置为0就表示没有 ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
// -r :设置帧数为1, -q:v:设置jpeg图片质量为高质量(2),所以每隔一秒,存一张图片下来 ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
// - ss :设置开始时间,-t:设置time时间长度, -f 设定输出格式 , 所以会从input.mp4的第20s时间开始,往下10s,每隔1s就抓一帧,总共会抓10帧。 ffmpeg -i input.mkv -y -f image2 -ss 10 -r 1 -t 1 –s 350x220 a.jpg
//截取一张第10秒的352x220尺寸大小的,格式为jpg的a.jpg图片
3.ffplay常用命令使用
ffplay命令- FFplay是一个非常简单和可移植的媒体播放器,使用FFmpeg库和SDL库。它主要用作各种FFmpeg API的测试平台
参考: http://ffmpeg.org/ffplay.html
最简单的播放命令: ffplay input.avi
播放的时候,支持的快捷键有:
- q,ESC : 退出。
- f : 切换全屏。
- P,空格键 : 停下来。
- m : 切换静音。
- 9, 0 : 分别减少和增加体积。
- /, * : 分别减少和增加体积。
- a : 在当前程序中循环音频通道。
- v : 循环视频频道。
- t : 当前程序中的循环字幕通道。
- c : 循环程序。
- w:循环视频过滤器或显示模式。
- s : 进入下一帧
- left/right : 寻找向后/向前10秒。
- down/up : 向后/前进1分钟。
- page down/page up : 寻找上一视频/下一视频。或者,如果没有,请向后/向前寻求10分钟。
- 鼠标右键单击 : 在文件中寻求与宽度分数相对应的百分比。
- 鼠标左键双击 : 切换全屏。
4.ffprobe常用命令使用
ffprobe命令- ffprobe用来查看多媒体文件的信息
常用命令如下所示:
ffprobe -show_packets input.mp4
//获取文件信息并显示文件中每个帧的包信息(包含audio和video包),如下图所示:

- codec_type : 帧类型,如视频包、音频包等
- stream_index : 多媒体的stream索引(上图的stream0表示video数据,steam1表示audio数据)
- pts(Presentation Time Stamp) : 显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。
- pts_time : 将pts换算为时间后的值
- dts(Decoding Time Stamp) : 解码时间戳,表示在什么时候解码的这一帧数据。
- dts_time : 将dts换算为时间后的值
- duration : 该帧占用的时间值(需要持续多久切换下一帧)
- duration_time : 根据不同格式计算后的多媒体包占用的时间值
- size : 该帧的大小
- pos : 该帧所在的文件偏移位置
- flags : 该帧标记,如关键包与非关键包的标记
ffprobe -show_packets -show_data input.mp4
//获取文件信息并显示文件中每个帧的包信息以及包里的具体data信息 ffprobe -show_format input.mkv
//获取文件信息以及格式信息,如下图所示:

- nb_streams : 打开的视频文件中流的数量,一般为2,表示音频流和视频流
- nb_programs : 节目数
- format_name : 文件封装格式名称, 该文件的格式是Matroska,webm(MKV的全称)格式
- format_long_name : 文件封装格式具体的名称
- start_time : 起始时间
- duration : 视频总时长
- size : 文件大小
- bit_rate : 码率, 码率公式为 码率(kbps)=文件大度小(KB)*8/时间(秒)
- probe_score : 探测出的视频评分,100是最大的分数,这意味着FFmpeg确信格式是真实的
ffprobe -show_streams input.mkv
//获取视频文件中流的具体信息,比如音频采样率、视频尺寸、帧率等
5.视频解码步骤
首先将读取视频封装,然后通过不同的封装格式读取出视频码流(比如:h.264、mpeg4等),然后再通过视频码流解码出yuv
比如mkv视频: mkv->h.264->yuv
下章学习: 5.FFMPEG-Qt移植ffmpeg、ffmpeg结构体介绍
1.ffmpeg、ffplay、ffprobe命令使用的更多相关文章
- ffmpeg ffplay ffprobe资料整理
1. 官网地址:https://ffmpeg.org/ 官网文档地址:https://ffmpeg.org/documentation.html 官网下载地址:https://ffmpeg.org/d ...
- ffplay的快捷键以及选项 FFmpeg 基本用法 FFmpeg常用基本命令 ffmpeg常用转换命令,支持WAV转AMR
ffmpeg -i 32_mkv_h264_718x480_ac3.mkv -codec copy -bsf:v h264_mp4toannexb -f mpegts xx.ts ./ffmpeg ...
- 音频相关 ALSA ffmpeg ffplay 命令用法 g7xx
采样率: samples 441100 每秒 DAC/ADC 采样的频率,声卡一般还支持 48k 8k 等模式. 通道:channels 2声道 左右声道 也有单声道的声音,5.1 声道 位数: 16 ...
- ffmpeg/ffplay vc6 源码剖析
ffmpeg/ffplay是当今多媒体领域的王者,很多很多的人想研究学习ffmpeg/ffplay,但苦于ffmpeg/ffplay庞大的代码量,令人望而生畏.为帮助更多的人研习ffmpeg/ffpl ...
- ffmpeg/ffplay 添加实时的时间水印 (转)
右上角添加时间水印 ffmpeg -i 0.ts -vf drawtext="fontfile=arial.ttf:x=w-tw:fontcolor=white:fontsize=30:te ...
- ffmpeg/ffplay源码剖析笔记<转>
转载:http://www.cnblogs.com/azraelly/ http://www.cnblogs.com/azraelly/archive/2013/01/18/2865858.html ...
- ffmpeg 转码命令与ffplay
ffmpeg.exe用于视频的转码. ▫ 最简单的命令 ffmpeg -i input.avi -b:v 640k output.ts 该命令将当前文件夹下的input.avi文件转换为output. ...
- ffplay常用命令
一.ffplay 常用参数 ffplay不仅仅是播放器,同时也是测试ffmpeg的codec引擎,format引擎,以及filter引擎的工具,并且也可以做可视化的媒体参数分析,可以通过ffplay ...
- FFMPEG - ffplay源代码分析
FFmpeg是一个开源,免费,跨平台的视频和音频流方案,它提供了一套完整的录制.转换以及流化音视频的解决方案.而ffplay是有ffmpeg官方提供的一个基于ffmpeg的简单播放器.学习ffplay ...
随机推荐
- vue require.context自动化导入
语法: require.context(directory, useSubdirectories = false, regExp = /^.//); directory {String} -读取文件的 ...
- Pycharm 激活插件与码
Pycharm2020最新永久激活码插件(支持Windows),100%永久激活 用到pycharm工具发现没用多久时间又过期了,在网上有看到很多朋友都遇到同样的情况,于是找到了一批很不错的永久激活方 ...
- 20190919-02安装Xshell和CRT远程工具 000 008
Linux远程登录及相关工具介绍 Linux一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的Linux服务器.这时我们就需要远程登录到Linux服务器来管理维护系统. Linux系统中 ...
- PIE保护绕过
(一):partial write 开了PIE保护的程序,其低12位地址是固定的,所以我们可以采用partial write.但是我们不能写入一个半字节,所以选择写入两个字节,倒数地位进行爆破,范围是 ...
- MySQL关于useSSL的问题,会弹出警告
我在手动配置dbcp时,执行数据库相关的操作时,报错以下: Fri Aug 28 21:10:19 CST 2020 WARN: Establishing SSL connection without ...
- postman -- 环境变量、全局变量使用
背景: [登录接口]中会返回sign值,[学生金币充值接口]会则需要用到该sign值,因此把sign设置为环境或全局变量,便于其他接口调用. 1.请求登录接口,获取sign值: 2.把sign值添加至 ...
- c,c++变量
自动变量 局部变量 如不作专门说明为静态变量,都是动态分配存储空间,存储在动态存储区中.这种变量叫自动变量.这种变量只在定义它们的时候才创建,在定义它们的函数返回时系统回收变量所占存储空间.对这些变量 ...
- [LeetCode]415. 字符串相加、43. 字符串相乘
题目 415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 题解 维护一个temp表示当前两数相加+上一个进位的和. 每次更新结果的一位. 注意终止条件. 最后将 ...
- 小BUG大原理:FastJSON实体转换首字母小写的尴尬事件
问题描述 因为项目连接的Oracle数据库,字段名映射方便使用大写,但是通过接口调用返回到前端的字段名首字母为小写,这样带来的问题前端显示的字段就需要写这种很尴尬的格式. 原因分析 开发环境使用的是S ...
- 多图证明,Java到底是值传递还是引用传递?
开篇先来曝答案,在 Java 语言中,本质只有值传递,而无引用传递,解释和证明详见正文. 说到值传递和引用传递我们不得不提到两个概念:值类型和引用类型. 1.值类型 通俗意义上来说,所谓的值类型指的就 ...