FFmpeg基本介绍
FFmpeg是一个开源多媒体框架,可以跨平台运行。
目录及作用:
libavcodec 提供了一系列编码器的实现。
libavdevice 提供了访问捕获设备和回放设备的接口。
libavfilter 音频的后期处理,提供各种音视频过滤器。
libavformat 对多媒体格式的解析与封装,实现在流协议、容器格式及其本IO访问。
libavutil 包括了hash器,解码器和各种工具函数。
libavresample 对音频进行重采样。
libswresample 实现了混音和重采样。
libswscale 实现了色彩转换和缩放功能。
FFmpeg常用命令
-
基本信息查询命令
-
录制命令
ffmpeg -f dshow -i video="screen-capture-recorder" -r 30 orcas.yuv
-f
指定采集数据的库 (Mac:avfoundation / Windows:dshow)
-r
帧率
-i 可通过ffmpeg -f dshow -list_devices true -i dummy
查询到设备名称
-i video="{设备名}"
原本我的电脑只有摄像头和一个乱码的设备。
推荐使用screen-capture-recorder
下载: https://sourceforge.net/projects/screencapturer/files/latest/download
录制过程中会显示视频的基本信息
播放命令:ffplay -s 1280x720 -pix_fmt bgr0 orcas.yuv
yuv播放时需要设置分辨率和像素采样方式(与录制的相同)。 -
分解/复用命令
可进行多媒体格式的转换:
ffmpeg -i orcas.mp4 -vcodec copy -acodec copy orcas.mov
-i
: 输入文件
-vcodec copy
:视频编码处理方式
-acodec copy
:音频编码处理方式
抽取视频:ffmpeg -i orcas.mov -an -vcodec copy out.h264
抽取音频:ffmpeg -i orcas.mov -vn -acodec copy out.aac
-
处理原始数据命令
FFmpeg提取YUV数据:
ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv
-an
:不包含音频
-c:v
:对视频进行编码
rawvideo
:原始视频
-pix_fmt
:像素采样方式
-b
:码率 -b:a 64k -b:v 753k
又称比特率 bps,即每秒传输的bit数,文件大小(bit)/ 时长(s)/ 1024 = kbps播放:
ffplay -s 1280x720 -ipx_fmt yuv420p out.yuv
FFmpeg提取PCM数据:
ffmpeg -i out.mp4 -vn -ar 44100 -ac2 -f s16le out.pcm
-vn
:不包含视频
ar
:audio rate 音频采样率
-ac 2
:audio channel 2指双声道
-f s16le
:数据存储格式,s有符号(正负),每个数值16位表示,Little-endian低字节序播放:
ffplay -ar 44100 -ac 2 -f s16le out.pcm
-
剪裁与合并命令
裁剪:ffmpeg -i in.mp4 -ss 00:00:00 -t 10 out.ts
-ss
:从哪个时间点开始裁剪
-t
:裁取多少时间 s合并:
ffmpeg -f concat -i inputs.txt out.flv
concat
:拼接
xxx.txt
:文件列表(需要拼接的视频),格式:file ‘文件名’ 独立一行 -
图片/视频互转命令
视频转图片:ffmpeg -i in.flv -r 1 -f image2 image-%3d.jpeg
-r
帧率 每秒转出图片的数量
image2
一种格式图片转视频:
ffmpeg -i image-%3d.jpeg out.mp4
-
直播相关命令
直播推流:ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamName
-re
减慢帧率 用于保持帧率同步直播拉流:
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
拉了段CCTV1的视频:
ffmpeg -i http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8 -c copy cctv.m3u8
-
滤镜命令
拿到解码后的数据帧过滤,再编码输出。裁剪:
ffmpeg -i in.mov -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out.mp4
-vf crop
:视频滤镜 crop
in_w-200:in_h-200
输入视频的宽和高各减200,还可设置:x:y
参数
-c:v libx264
:视频编码器 libx264
-c:a copy
:表示音频编码不做处理 直接copy
FFmpeg处理音视频流程
将编码的数据包传送给解码器,解码器产生未压缩的帧(原始视频等)
可通过滤波进一步处理,过滤后帧被传递到编码器,输出编码的数据包
再传递给复用器,将编码的数据包写入输出文件
通俗一点讲一般处理音视频的本质就是解码、处理、编码。