标题
- 1.FFmpeg命令行环境搭建
- 2.ffmpeg,ffplay和ffprobe的区别
- 3.ffmpeg处理流程
- 4.ffmpeg命令分类查询
- 5.ffplay播放控制
- 6.ffplay命令选项
1.FFmpeg命令行环境搭建
1.到达FFmpeg的github,选择下载需要的版本,这里以windows举例。
这里有两个压缩包,ffmpeg-master-latest-win64-gpl-shared这个里面包含了ffmpeg的lib文件,可以进行ffmpeg的二次开发,ffmpeg-master-latest-win64-gpl只包含了ffmpeg的工具。
我们这里使用shared的版本,我们下载打开点击bin目录,bin目录有3个可执行文件,分别是ffmpeg,ffplay和ffprobe,然后还有其运行需要使用到的动态库。
我们将三个可以执行文件放入到C:\Windows路径下面,这样就可以通过命令行直接访问了,然后将其余的动态库放入到C:\Windows\SysWOW64,这个文件夹是用来存放windows应用程序的动态库的。
然后打开命令行cmd,分别输入ffmpeg,ffplay和ffprobe都会显示对应的版本号,这样就安装完成了。
2.ffmpeg,ffplay和ffprobe的区别
ffmpeg就是一个剪辑工具,ffplay就是一个播放器,而ffprobe就是一个多媒体的分析器。
ffmpeg查看帮助文档:
基本信息:ffmpeg -h
高级信息:ffmpeg -h long
所有信息:ffmpeg -h full
将输出输出信息写入文件:ffmpeg -h > 文件名.log
ffplay查看帮助文档:
所有信息:ffplay -h
ffprobe查看帮助文档:
所有信息:ffprobe -h
windows搜索输出信息指令是findstr和Linux的grep类似。
ffmpeg -h full | findstr 264
3.ffmpeg处理流程
我们通过一行命令来了解流程:
ffmpeg -i test_1920x1080.mp4 -acodec copy -vcodec libx265 -s 1280x720 test_1280x720.mkv
- -i 就是输入的文件,得到编码数据包,可能分离出视频和音频的数据包。
- 然后会对数据包解码得到数据帧,这一步就是我们处理数据内容的关键一步,比如处理分辨率,帧率,添加水印等,我们这里是将分辨率从1920x1080转化到1280x720。
- 然后处理结束会对数据帧进行编码得到数据包,acodec是指定音频的编码格式,vcodec是指定视频编码格式的,这里使用的是acodec copy就是使用原来的音频编码格式,也就是说不需要重新编码,而vcodec libx265是需要将原来的视频流重新编码成libx265的编码格式。
- 最后将数据包合并得到文件。
4.ffmpeg命令分类查询
- ffmpeg -format显示会有D和E,显示D就是解复用器支持该格式,E就是复用器支持该格式
- ffmpeg -devices是列出 FFmpeg 支持的所有可用设备(即输入设备和输出设备)
- ffmpeg -bsfs 是用于列出 FFmpeg 支持的所有比特流过滤器。
比特流过滤器(Bitstream Filters)是在解码或编码音视频流时对数据进行处理的一种功能模块。比特流过滤器可以用于修改、编解码、加密、解密等操作,常见的比特流过滤器包括 H.264 的 CABAC 转换、H.264 的 SEI 数据插入、AAC 的 ADTS 转换等。- bsfs和codecs之间关系,codecs只是一种算法,将数据流封装成对应的格式,比如H.264,但是他并不是用于转换格式的,只是用来封装,而bsfs是用于实际转换数据格式的。
- ffmpeg -protocols 用于列出 FFmpeg 支持的所有协议,也就是ffmpeg可以通过显示的一些协议来访问数据,比如http 协议用于通过 HTTP 访问网络资源,file 协议用于访问本地文件系统资源,pipe 协议用于在进程间传输数据等。
- ffmpeg -filters 用于列出 FFmpeg 支持的所有可用的过滤器。
在 FFmpeg 中,过滤器是一种用于在音视频处理过程中对音视频数据进行操作的工具。过滤器可以用于裁剪、调整音视频流的大小、调整音视频流的编解码参数、添加水印、添加字幕等处理。
5.ffplay播放控制
6.ffplay命令选项
-
-x width 打开播放器的宽度
-
-y height 打开播放器的高度
-
-video_size size 帧尺寸 设置显示帧存储(WxH格式),仅适用于类似原始YUV等没有包含帧大小(WxH)的视频。
比如:
ffplay -pixel_format yuv420p -video_size 320x240 -framerate 5 yuv420p_320x240.yuv -
-pixel_format format 格式设置像素格式。
-
-fs 以全屏打开
-
-an 不播放声音
-
-vn 不播放视频
-
-sn 不显示字幕
-
-ss pos 选择一开始的进度条,pos可以替换的格式有:5(5秒),5:5(5分5秒),5:5:5(5小时5分5秒)
-
-t duration 设置播放视频/音频长度,时间单位如 -ss选项
-
-bytes 按字节进行定位拖动(0=off 1=on -1=auto)。
-
-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 设置音频滤镜
-
-stats 打印多个回放统计信息,包括显示流持续时间,编解码器参数,流中的当前位置,以及音频/视频同步差值。默认情况下处于启用状态,要显式禁用它则需要指定-nostats。。
-
-fast 非标准化规范的多媒体兼容优化。
-
-genpts 生成pts。
-
-sync type 同步类型 将主时钟设置为audio(type=audio),video(type=video)或external(type=ext),默认是audio为主时钟。
-
-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 h264_qsv 强制视频采用h264_qsv解码
-
-acodec codec_name 强制使用设置的音频解码器进行音频解码
-
-vcodec codec_name 强制使用设置的视频解码器进行视频解码
-
-scodec codec_name 强制使用设置的字幕解码器进行字幕解码
-
-autorotate 根据文件元数据自动旋转视频。值为0或1 ,默认为1。
-
-framedrop 如果视频不同步则丢弃视频帧。当主时钟非视频时钟时默认开启。若需禁用则使用 -noframedrop
-
-infbuf 不限制输入缓冲区大小。尽可能快地从输入中读取尽可能多的数据。播放实时流时默认启用,如果未及时读取数据,则可能会丢弃数据。此选项,将不限制缓冲区的大小。若需禁用则使用-noinfbu