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.yuvFFmpeg提取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.flvconcat:拼接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:视频滤镜 cropin_w-200:in_h-200输入视频的宽和高各减200,还可设置:x:y参数-c:v libx264:视频编码器 libx264-c:a copy:表示音频编码不做处理 直接copy
FFmpeg处理音视频流程
将编码的数据包传送给解码器,解码器产生未压缩的帧(原始视频等)
可通过滤波进一步处理,过滤后帧被传递到编码器,输出编码的数据包
再传递给复用器,将编码的数据包写入输出文件
通俗一点讲一般处理音视频的本质就是解码、处理、编码。