FFmpeg处理音视频流程
ffmpeg的安装
在macbook下的安装
- 使用Homebrew安装,打开终端(Terminal)应用程序。
- 如果您尚未安装Homebrew,请在终端中输入以下命令并按Enter键来安装Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- 安装FFmpeg。在终端中输入以下命令并按Enter键:
brew install ffmpeg
- 等待安装完成。Homebrew将下载并安装FFmpeg及其相关依赖项。
- 安装完成后,您可以通过输入以下命令来验证安装:
ffmpeg -version
在Windows上安装FFmpeg
- 使用Windows包管理器Chocolatey安装,打开命令提示符或PowerShell(以管理员身份运行)。
- 如果尚未安装Chocolatey,请在命令提示符或PowerShell中输入以下命令并按Enter键安装Chocolatey:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
- 安装FFmpeg。在命令提示符或PowerShell中输入以下命令并按Enter键:
choco install ffmpeg
- 等待安装完成。Chocolatey将下载并安装FFmpeg。
- 安装完成后,您可以在命令提示符或PowerShell中输入以下命令来验证安装:
ffmpeg -version
FFmpeg基本信息查询命令
-versio 显示版本
-formats 显示可用的格式
-demuxers 显示可用的demuxers
-protocols 显示可用的协议
-muxers 显示可用的muxers
-filters 显示可用的过滤器
-devices 显示可用的设备
-pix_fmts 显示可用的像素格式
-codecs 显示所有编解码器
-sample_fmts 显示可用的采样格式
-decoders 显示可用的解码器
-layouts 显示channel名称
-encoders 显示所有的编码器
-colors 显示识别的颜色名称
-bsfs 显示比特流filter
FFmpeg录制命令
ffmpeg -f avfoundation -i 1 -r 30 out.yuv
-f :指定使用avfoundation采集数据
-i :指定从哪儿采集数据,它是- -个文件索引号
-r :指定帧率
-f 指定使用 avfoundation 采集数据。
-i 指定从哪儿采集数据,它是一个文件索引号。在我的MAC上,1和2(外界显示器)都代表桌面(可以通过上面的命令查询设备索引号)。
-r 指定帧率。按ffmpeg官方文档说-r与-framerate作用相同,但实际测试时发现不同。-framerate 用于限制输入,而-r用于限制输出。
播放
ffplay -s 2560x1600 -pix_fmt uyvy422 out.yuv
录制的格式为yuv422,分辨率 2560x1600,所以要告诉ffplay 播放格式为uyuv422,通过 -pix_fmt参数
支持设备的索引号
macOS系统
ffmpeg -f avfoundation -list_devices true -i ""
windows系统
ffmpeg -list_devices true -f dshow -i dummy
ffmpeg -f avfoundation -i "<video device index>:<audio device index>" av-out.mov
⚠️视频录制案例
# macOS系统中执行
ffmpeg -f avfoundation -i "2:0" -c:v libx264 -r 20 -preset ultrafast -crf 0 -pix_fmt yuv420p output.mp4
# Windows系统中执行
ffmpeg -f dshow -i video="Integrated Camera":audio="Microphone Array (Realtek High Definition Audio)" -c:v libx264 -r 20 -preset ultrafast -crf 0 -pix_fmt yuv420p output.mp4
-f :指定使用avfoundation采集数据
-c:v libx264rgb: 指定使用libx264rgb编码器。
-qp 0: 设置视频质量参数,0代表质量高,越大代表质量越低
-crf 10:10 来设定比较高的画质,默认是23;和 -qp 0 同理效果,crf更常用;同时使用-qp和-crf时,-qp通常会覆盖-crf的效果
-i: 表示录制的屏幕序号或者 屏幕序号:音频设备序号
-r 23: 表示音频码率,如出现画面和音频不一致,可通过此参数调整
-preset ultrafast: 速度优先ultrafast>superfast>veryfast>faster>fast>medium>slow>slower>veryslow
速度递减,画质递增
-pix_fmt yuv420p : 表示指定输出视频的像素格式
抓取鼠标
ffmpeg -f x11grab -capture_cursor 1 -i :0.0 output.mp4
-f x11grab: 表示使用X11抓取屏幕
-capture_cursor 1: 用于指定是否捕获屏幕录制时的鼠标光标;1表示启用捕获鼠标光标,0则表示禁用
FFmpeg录音命令
ffmpeg -f avfoundation -i :0 out.wav
:0 代表音频设备
开始录制音频
ffmpeg -f avfoundation -i :1 out.wav
播放
ffplay out.wav
yuv 是原始视频数据,ffplay 播放该类型视频时,需要指定分表率,分辨率从录制日志里可以看到
FFmpeg分解与复用
多媒体格式转换
ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv
-i :输入文件
-vcodec copy :视频编码处理方式
-acodec copy :音频编码处理方式
抽取视频
ffmpeg -i f35.mov -an -vcodec copy out.h264
抽取音频
ffmpeg -i f35.mov -acodec copy -vn out.aac
FFmpeg处理原始数据命令
FFmpeg提取YUV数据
ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmts yuv420p out.yuv
带分辨率播放
ffplay -s 638x358 out.yuv
FFmpeg提取PCM数据
ffmpeg -i out.mp4 -vn -ar 44100 -ac2 -f s16le out.pcm
FFmpeg滤镜命令
ffmpeg -i in.mov -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out.mp4
crop 格式 : crop=out_w:out_h:x:y
FFmpeg裁剪与合并命令
裁剪
ffmpeg -i in.mp4 -ss 00:00:00 -t 10 out.ts
合并
ffmpeq -f concat -i inputs.txt out.flv
inputs.txt 内容为 'file filename'格式。
FFmpeg图片/视频互转命令
视频转图片
ffmpeg -i in.flv -r 1 -f image2 image-%3d.jpeg
图片转视频
ffmpeg -i image-%3d jpeg out.mp4
FFmpeg直播推/拉流
直播推流
ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamName
直播拉流
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
实战
推流地址
拉流地址
http://www.xypsp.com/live/4K.m3u8
http://47.98.37.74/live/4K.m3u8