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

[TOC]

开始前的BB

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

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

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

三、ffplay、ffmpeg日常食用的简单姿势_第1张图片
愿天堂没有爱情

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

三、ffplay、ffmpeg日常食用的简单姿势_第2张图片
image

飙车ing...

帮助命令

帮助命令的帮助

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

三、ffplay、ffmpeg日常食用的简单姿势_第3张图片
image

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

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

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

简单来讲就是

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

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

image

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

三、ffplay、ffmpeg日常食用的简单姿势_第4张图片
image

这边显示的支持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
三、ffplay、ffmpeg日常食用的简单姿势_第5张图片
image

如果不支持 就是unknown了

三、ffplay、ffmpeg日常食用的简单姿势_第6张图片
image

其他的还有

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、ffmpeg日常食用的简单姿势_第7张图片
image
image

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

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

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

啦啦啦 打我啊
播放网络流

食用方式与楼上一样

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

(偷懒是真滴舒服)

三、ffplay、ffmpeg日常食用的简单姿势_第8张图片
舒服
视频旋转播放

ffplay -i test_video.mp4 -vf transpose=1

三、ffplay、ffmpeg日常食用的简单姿势_第9张图片
image
视频反转播放

(镜面)
ffplay test_video.mp4 -vf hflip

image

(上下)
ffplay test_video.mp4 -vf vflip

image

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
然后...

三、ffplay、ffmpeg日常食用的简单姿势_第10张图片
image

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

三、ffplay、ffmpeg日常食用的简单姿势_第11张图片
image
提取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

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

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

三、ffplay、ffmpeg日常食用的简单姿势_第12张图片
那撸多!啥事gay!

未完持续。。。

你可能感兴趣的:(三、ffplay、ffmpeg日常食用的简单姿势)