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命令使用的更多相关文章

  1. ffmpeg ffplay ffprobe资料整理

    1. 官网地址:https://ffmpeg.org/ 官网文档地址:https://ffmpeg.org/documentation.html 官网下载地址:https://ffmpeg.org/d ...

  2. 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 ...

  3. 音频相关 ALSA ffmpeg ffplay 命令用法 g7xx

    采样率: samples 441100 每秒 DAC/ADC 采样的频率,声卡一般还支持 48k 8k 等模式. 通道:channels 2声道 左右声道 也有单声道的声音,5.1 声道 位数: 16 ...

  4. ffmpeg/ffplay vc6 源码剖析

    ffmpeg/ffplay是当今多媒体领域的王者,很多很多的人想研究学习ffmpeg/ffplay,但苦于ffmpeg/ffplay庞大的代码量,令人望而生畏.为帮助更多的人研习ffmpeg/ffpl ...

  5. ffmpeg/ffplay 添加实时的时间水印 (转)

    右上角添加时间水印 ffmpeg -i 0.ts -vf drawtext="fontfile=arial.ttf:x=w-tw:fontcolor=white:fontsize=30:te ...

  6. ffmpeg/ffplay源码剖析笔记<转>

    转载:http://www.cnblogs.com/azraelly/ http://www.cnblogs.com/azraelly/archive/2013/01/18/2865858.html ...

  7. ffmpeg 转码命令与ffplay

    ffmpeg.exe用于视频的转码. ▫ 最简单的命令 ffmpeg -i input.avi -b:v 640k output.ts 该命令将当前文件夹下的input.avi文件转换为output. ...

  8. ffplay常用命令

    一.ffplay 常用参数 ffplay不仅仅是播放器,同时也是测试ffmpeg的codec引擎,format引擎,以及filter引擎的工具,并且也可以做可视化的媒体参数分析,可以通过ffplay ...

  9. FFMPEG - ffplay源代码分析

    FFmpeg是一个开源,免费,跨平台的视频和音频流方案,它提供了一套完整的录制.转换以及流化音视频的解决方案.而ffplay是有ffmpeg官方提供的一个基于ffmpeg的简单播放器.学习ffplay ...

随机推荐

  1. cdq分治——bzoj2683简单题

    https://www.lydsy.com/JudgeOnline/problem.php?id=2683 知识点:1.以操作的顺序进行分治  2.cdq分治维护矩阵 3.计算比mid小的给比mid大 ...

  2. if __name__ == ‘__main__‘

    if __name__ == '__main__': def_test() 作为程序的入口,当函数被调用时会从此处开始运行 如被导入的模块内没写 if __name__ == '__main__',则 ...

  3. 8.ffmpeg-基础常用知识

    1.封装格式MPEG-4其中 MPEG-1 和 MPEG-2 是采用相同原理为基础的预测编码.变换编码. 熵编码及运动补偿等第一代数据压缩编码技术:MPEG-4(ISO/IEC 14496)则是基于第 ...

  4. LiteOS间歇计算技术:IOT终端真正感受“电量自由”

    摘要:LiteOS间歇计算为什么能使物联网终端实现长续航? 物联网设备.场景复杂多样,小到智能穿戴的耳机,大到大型基建设备,更有我们陌生而又熟悉场景,例如深海探测.森林监控.野生动物跟踪等等能量采集场 ...

  5. path.resolve和path.join的区别

    // test.js const path = require('path') let x1 = path.resolve('/目录1/目录2', '/目录3/目录4/') let x2 = path ...

  6. yum 安装提示公钥安装失败,Public key for .x86_64.rpm is not instal 手动导入公钥方案

    Linux 中yum 安装google-chrome-stable时,报错如下,提示公钥安装失败,原因是 GPG公钥获取失败,无法连接获取到 https://dl-ssl.google.com/lin ...

  7. C语言01

    从问题到C语言程序设计 1.1计算机的问题求解方法 程序设计面向的问题 什么问题可以用程序的方法解决? 打印九九乘法表 图形变换 文件压缩问题 ....... 一切可计算的问题 如何解决? 确定问题可 ...

  8. 分布式系统监视zabbix讲解七之分布式监控

    分布式监控 概述 Zabbix通过Zabbix proxy为IT基础设施提供有效和可用的分布式监控 代理(proxy)可用于代替Zabbix server本地收集数据,然后将数据报告给服务器. Pro ...

  9. PE安装window 10操作系统

    一.进入bios,通过u盘启动 1. 在bios中选择U盘启动 2. 选择第二选项,如果是老机器,就选择03或者04 二.进入PE操作系统后: 打开桌面上的Ghost手动工具,点击OK 依次点击loc ...

  10. Spring系列 之数据源的配置 数据库 数据源 连接池的区别

    Spring系列之数据源的配置 数据源,连接池,数据库三者的区别 连接池:这个应该都学习过,比如c3p0,druid等等,连接池的作用是为了提高程序的效率,因为频繁的去创建,关闭数据库连接,会对性能有 ...