FFmpeg命令分类
- 8大类
FFmpeg基本信息查询命令
FFmpeg录制命令
ffmpeg -f dshow -i video="摄像头名字" out.mp4
mac
ffmpeg -f avfoundation -i1-r30 out.yuv
-f:指定使用avfoundation采集数据
-i:指定从哪里采集数据,他是一个文件索引号,0代表摄像头,1代表屏幕
-r:指定帧率
msys2
ffmpeg -f gdigrab -framerate 30 -video_size 1280x720 -i desktop -pix_fmt yuv420p -vcodec rawvideo output.yuv
ffmpeg -f gdigrab -framerate 30 -video_size 1280x720 -i desktop output.mp4
-f gdigrab:指定输入设备,使用 gdigrab 捕获桌面内容。
-framerate 30:设置帧率为 30 帧每秒。此参数定义了捕获桌面内容的速度。
-i desktop:指定要捕获的输入源为桌面。desktop 是 FFmpeg 中用于捕获整个桌面内容的特殊输入源标识符。
-c:v rawvideo:选择以原始视频格式进行编码。这意味着输出文件将是未压缩的视频数据。
-out.yuv:指定输出文件的名称为 out.yuv。这是您要保存捕获到的桌面内容的文件名。
msys2
mac
ffmpeg -f avfoundation -i :0 out.wav
音频的指定设备要加冒号:0
ffmpeg -list_devices true -f dshow -i dummy
FFmpeg处理流程
分解与复用(文件的转换)
ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv
-i :输入文件
-vcodec copy:视频编码处理方式
-acodec copy:音频编码处理方式
音频文件转换
ffmpeg -i out.aac -vn -acodec libmp3lame out.mp3
ffmpeg -i out.mp4 -an -vcodec copy out.h264
-an :去除音频
ffmpeg -i out.mp4 -acoedc copy -vn out.aac
处理原始数据命令
ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv
-c:v:对视频进行编码
-rawvideo:对原始视频进行编码
ffmpeg -i out.mp4 -vn -ar 44100 -ac2 -f s16le out.pcm
-ar 44100:音频的采样率为44100
-ac2:声道数为2
-f s16le:"s16le"的意思是:"s"代表有符号的整数(Signed integer);"16"表示这个整数用16位来存储;"le"表示这个整数用的是小端(Little Endian)存储模式。
ffplay -ar 44100 -ac 2 -f s16le out.pcm
也需要指定:采样率 声道数 大小
滤镜命令
ffmpeg -i in.mov -vf crop=in_w-200:in_h-200 -c:libx264 -c:a copy out.mp4
-vf:视频滤镜
- crop:滤镜的名字
- in_w-200:in_h-200:高度减200宽度减200
- c:libx264:用264编码
- c:a copy:不进行处理,直接复制
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=W-w-10:H-h-10" output.mp4
- ffmpeg -i input.mp4:这是调用 FFmpeg 并指定视频输入文件为 "input.mp4"。
- i watermark.png:这是指定另一输入,水印图片 "watermark.png"。
- filter_complex "overlay=W-w-10:H-h-10":这是使用 FFmpeg 的复杂过滤器功能。"overlay=W-w-10:H-h-10" 是具体的过滤器设置,意思是将水印图片放置在视频的右下角。
其中,"W" 和 "H" 是视频的宽度和高度,"w" 和 "h" 是水印图片的宽度和高度。"-10" 是水印距离视频右边和底部边缘的距离。"W-w-10" 计算的是水印在 x 方向(水平方向)的位置,"H-h-10" 计算的是水印在 y 方向(垂直方向)的位置。
- output.mp4:这是指定输出文件的名称,即添加了水印后的视频文件名称。
裁剪与合并命令
ffmpeg -i in.mp4 -ss 00:00:00 -t 10 out.ts
-ss:起始时间
-t:裁剪多长时间
ffmpeg -f concat -i inputs.txt out.flv
inputs.txt内容为'file filename'格式。
-f concat: 告诉计算机后面的视频合并起来
-i inputs.txt:把txt文件里面的所有视频名字合并起来
图片与视频互转命令
ffmpeg -i in.flv -r 1 -f image2 image-%3d.jpeg
-r:帧率,每秒转多少张图片出来
-f:转换后的格式
-image-%3d.jpeg:以image开头,后面用3个数字组成的
ffmpeg -i image-%3d.jpeg out.mp4
直播流命令
ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamName
- ffmpeg - 这是FFmpeg程序的调用,它是一种非常流行的用于操作和处理多媒体数据的开源软件。
- re - 这是一个选项,表示按照音频或视频数据的原始频率读取。通常在直播场景使用,可以让推流的速度接近播放速度,避免在短时间内将视频数据快速推给RTMP服务器。
- i out.mp4 - -i 是输入文件的选项,out.mp4 是后面跟的输入文件的名称,这里是一个名为 "out.mp4" 的MP4文件。
- c copy - 这是编解码相关的选项。-c copy 的意思是复制输入流的编解码方式,不对视频或音频重新编码,这可以大大减少CPU的使用。
- f flv - -f 是指定输出格式的选项,flv 表示输出为FLV格式。RTMP通常使用FLV格式的包。
- rtmp://server/live/streamName - 这是输出的目标地址,流媒体数据将会推送到此服务器地址。你需要将该地址换成你实际需要推送的RTMP服务器地址。
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
编译