三、ffplay、ffmpeg日常食用的简单姿势

[TOC]

开始前的BB

这三个工具来说 ffplay和ffmpeg是很经典的两个,ffprobe日常用的比较少,ffplay和ffmpeg那可真是日常使用,下面只列举了一些平常经常用到的命令行,以及ffmpeg命令行帮助的方法

码农第三滚坑委提醒您:装逼千万条,基础第一条;不敲命令行,脸上两行泪

请先系好安全带以及准备一个视频文件(温馨提示 最好找个比较好看点的视频,因为调试过程中会一直直直直直直看到这个视频,换视频又太费时间,所以我建议大家开始的时候找个一比较耐看的视频 比如 点击下载)

温馨提示 请用命令行进入ffmpeg下载解压后的目录的bin目录下,比如:

飙车ing...

帮助命令

帮助命令的帮助

ffmpeg -h 这个是最简单的帮助命令

这个部分 上面configuration是说当前用的ffmpeg的编译设置选项,--disable-XXX就是禁用XXX的意思 --enable-XXX就是启用XXX的意思,相信凭大家的机制一眼就看懂了

中间的部分是每个组件的详细版本号

usage 是说明使用ffmpeg命令行的格式,也就是 ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

简单来讲就是

ffmpeg [一些选项] [[输入文件的选项] -i 输出文件的路径] {[输出文件的选项] 输出文件路径}

大家如果对于类Unix命令行不太熟悉,可以选择先记下这个格式,下面我们写的时候再看

获取帮助 -h 打印基本的选项 -h long 这个选项会打印的非常全,一般控制台显示不下 建议输出为文本看,比如ffmpeg -h full > ffmpeg_full.log -h type=name 这个type的选项可以为decoder/encoder/demuxer/muxer/filter/bsf中的任意一个,name的话就是里面一个详细的格式,通过这个命令可以来查看是否支持指定格式,比如 ffmpeg -h decoder=h264

这边显示的支持h264的解码器的列表 除自带的以外,还开启了X264的解码支持

查看支持的formats/decoders

查看支持的formats/decoders等:

//支持的封装格式(合并&&分离)
ffmpeg -formats 
//合并
ffmpeg -muxers
//分离
ffmpeg -demuxers

//支持的过滤器
ffmpeg -filters

//支持的编解码器
ffmepg -codecs
//支持的解码器
ffmpeg -decoders
//支持的编码器
ffmpeg -encoders

//支持的硬编解列表
ffmpeg -hwaccels

//位流格式
ffmpeg -bsfs

//像素格式
ffmpeg -pix_fmts

//采样格式
ffmpeg -sample_fmts
复制代码

查看具体支持某一种格式,类似这样

ffmpeg -h muxer=flv
复制代码

如果不支持 就是unknown了

其他的还有

ffmpeg -h filter=atempo

ffmpeg -h encoder=libx264
复制代码

之类
帮助的用法大概就是这样

FFPlay

命令格式

ffplay 是一个播放器 他的命令格式为: ffplay [options] [input_url]

主要命令

主要选项有

选项	说明
-x width	强制显示宽带。
-y height	强制显示高度。
-s size	帧尺寸 设置显示帧存储(WxH格式),仅适用于类似原始YUV等没有包含帧大小(WxH)的视频。该参数已经被废弃,请尝试用-video_size代替
-fs	以全屏模式启动。
-an	禁用音频(不播放声音)
-vn	禁用视频(不播放视频)
-sn	禁用字幕(不显示字幕)
-ss pos	根据设置的秒进行定位拖动,注意时间单位:比如'55' 55 seconds, '12:03:45' ,12 hours, 03 minutes and 45 seconds, '23.189' 23.189 second
-t duration	设置播放视频/音频长度,时间单位如 -ss选项
-bytes	按字节进行定位拖动。
-seek_interval interval	自定义左/右键定位拖动间隔(以秒为单位),默认值为10秒
-nodisp	关闭图形化显示窗口,视频将不显示
-noborder	无边框窗口
-volume vol	设置起始音量。音量范围[0 ~100]
-f fmt	强制使用设置的格式进行解析。比如-f s16le
-window_title title	设置窗口标题(默认为输入文件名)
-loop number	设置播放循环次数
-showmode mode	设置显示模式,可用的模式值:0 显示视频,1 显示音频波形,2 显示音频频谱。缺省为0,如果视频不存在则自动选择2
-vf filtergraph	设置视频滤镜
-af filtergraph	设置音频滤镜
复制代码
高级命令

高级选项

-pix_fmt format	格式设置像素格式。此选项已被弃用,有利于私有选项,try -pixel_format
-stats	打印多个回放统计信息,包括显示流持续时间,编解码器参数,流中的当前位置,以及音频/视频同步差值。默认情况下处于启用状态,要显式禁用它则需要指定-nostats。
-fast	非标准化规范的多媒体兼容优化
-genpts	生成pts。
-sync type	同步类型 将主时钟设置为audio(type=audio),video(type=video)或external(type=ext),默认是音频为主时钟。
-ast audio_stream_specifier	指定音频流索引,比如-ast 3,播放流索引为3的音频流
-vst video_stream_specifier	指定视频流索引,比如-vst 4,播放流索引为4的视频流
-sst subtitle_stream_specifier	指定字幕流索引,比如-sst 5,播放流索引为5的字幕流
-autoexit	视频播放完毕后退出。
-exitonkeydown	键盘按下任何键退出播放
-exitonmousedown	鼠标按下任何键退出播放
-codec:media_specifier codec_name	强制使用设置的多媒体解码器,media_specifier可用值为a(音频), v(视频)和s字幕。比如-codec:v h265 强制视频采用h265解码
-acodec codec_name	强制使用设置的音频解码器进行音频解码
-vcodec codec_name	强制使用设置的视频解码器进行视频解码
-scodec codec_name	强制使用设置的字幕解码器进行字幕解码
-autorotate	根据文件元数据自动旋转视频。默认情况下启用,若需禁用则使用-noautorotate
-framedrop	如果视频不同步则丢弃视频帧。当主时钟非视频时钟时默认开启。若需禁用则使用 -noframedrop
-infbuf	不限制输入缓冲区大小。尽可能快地从输入中读取尽可能多的数据。播放实时流时默认启用,如果未及时读取数据,则可能会丢弃数据。此选项将不限制缓冲区的大小。若需禁用则使用-noinfbuf
复制代码
播放控制

播放控制

选项	说明
q, ESC	退出播放
f	全屏切换
p, SPC	暂停
m	静音切换
9, 0	9减少音量,0增加音量
/, *	/减少音量,*增加音量
a	循环切换音频流
v	循环切换视频流
t	循环切换字幕流
c	循环切换节目
w	循环切换过滤器或显示模式
s	逐帧播放
left/right	向后/向前拖动10秒
down/up	向后/向前拖动1分钟
page down/page up	拖动上一个/下一个。或者如果没有章节向后/向前拖动10分钟。
鼠标右键单击	拖动与显示宽度对应百分比的文件进行播放
鼠标左键双击	全屏切换
复制代码
举个??

BB这么多 来几个使用的例子

播放本地文件

最直接的: ffplay test_video.mp4

这边我们看到,在命令行里输出里一些有关视频的信息,在新的窗口里已经播放出来了视频

我们加上一些上面的参数后 也可以这种播 ffplay -window_title "mirs ffplay" -ss 2 -t 10 -autoexit test.mp4

效果大家自己去根据上面的提示和自己实际动手操作一下,我这就不说了

播放网络流

食用方式与楼上一样

ffplay rtmp://live.hkstv.hk.lxdns.com/live/hks1

(偷懒是真滴舒服)

视频旋转播放

ffplay -i test_video.mp4 -vf transpose=1

视频反转播放

(镜面) ffplay test_video.mp4 -vf hflip

(上下) ffplay test_video.mp4 -vf vflip

ps:视频旋转和反转可以组合食用 (听说巧克力和牛奶更配哟)

变速播放
音频变速视频不变速 (1.5倍食用更佳)

ffplay -i test_video.mp4 -af atempo=1.5

视频变速音频不变速

ffplay -i test_video.mp4 -vf setpts=PTS/1.5

音视频一起变速(3倍!!!)

ffplay -i test_video.mp4 -vf setpts=PTS/3 -af atempo=3

效果自己运行看 (留个疑问 根据参数猜原理)

FFmpeg

终于到ffmepg了,我们首先来吧他常用的参数分个类

常用参数
主要参数:
-i 设定输入流
-f 设定输出格式
-ss 开始时间
-t   时间长度

视频参数:
-vframes 设置要输出的视频帧数
-b 设定视频码率,默认为200Kbit/s
-b:v 视频码率
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器
-vf 视频滤波器

音频参数:
-aframes 设置要输出的音频帧数
-b:a 音频码率
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频
-af 音频滤波器
复制代码
使用示例
分离视频音频流

分离音频 ffmpeg -i test_video.mp4 -acodec copy -vn audio.aac 然后...

分离视频 ffmpeg -i test_video.mp4 -vcodec copy -an video.mp4

提取H264

ffmpeg -i test_video.mp4 -vcodec copy -an test_copy.264

提取AAC

ffmpeg -i test_video.mp4 -acodec copy -vn test.aac

改变编码格式

ffmpeg -i test_video.mp4 -vcodec copy -acodec copy test_copy.ts

修改帧率

ffmpeg -i test_video.mp4 -r 15 output.mp4

修改码率

ffmpeg -i test_video.mp4 -b:v 1.5M output2.mp4

修改音频码率

ffmpeg -i test_video.mp4 -b:a 192k output2.mp4

修改音视频码率

ffmpeg -i test_video.mp4 -b:v 1.5M -b:a 192k output2.mp4

修改分辨率

ffmpeg -i test_video.mp4 -s 640x480 output.mp4

提取PCM

ffmpeg -i test.mp4 -f s16le audio.pcm

提取YUV

提取3秒 分辨率和原来的一致 ffmpeg -i test_video.mp4 -t 3 -pix_fmt yuv420p yuv420p_orig.yuv 提取3秒 指定分辨率 ffmpeg -i test_video.mp4 -t 3 -pix_fmt yuv420p -s 320x240 yuv420p_320x240.yuv

提取RGB

提取3秒数据,分辨率转为320x240 ffmpeg -i test_video.mp4 -t 3 -pix_fmt rgb24 -s 320x240 rgb24_320x240.rgb

RGB和YUV转换

ffmpeg -s 968x544 -pix_fmt yuv420p -i yuv420p_orig.yuv -pix_fmt rgb24 orig.rgb

常用的命令和选项基本都在这边了,可以根据自己的需求去选择不同的命令行实现功能

接下来,我们就开始着手自己写一个视频播放器了(想想是不是还有点小激动)

未完持续。。。

转载于:https://juejin.im/post/5cad73425188251aee3a5624

你可能感兴趣的:(ffmpeg)