![](https://img.haomeiwen.com/i6408556/9db02673139df42e.png)
命令分类
基本信息查询命令
录制
分解/复用(包括文件格式的转换等等)
处理原始数据
滤镜(包括logo,翻转等)
切割与合并
图/视互转
直播相关
1 基本信息查询命令
-version 显示版本。
-formats 显示可用的格式(包括设备)。
-demuxers 显示可用的demuxers。
-muxers 显示可用的muxers。
-devices 显示可用的设备。
-codecs 显示libavcodec已知的所有编解码器。
-decoders 显示可用的解码器。
-encoders 显示所有可用的编码器。
-bsfs 显示可用的比特流filter。
-protocols 显示可用的协议。
-filters 显示可用的libavfilter过滤器。
-pix_fmts 显示可用的像素格式。
-sample_fmts 显示可用的采样格式。
-layouts 显示channel名称和标准channel布局。
-colors 显示识别的颜色名称。
查询方式 Windows 将下载好的ffmpeg的路径配置到环境变量里面后直接在cmd命令行打开输入 ffmpeg + 对应的查询命令。
eg: ffmpeg -version
![](https://img.haomeiwen.com/i6408556/26658a27c0fc0384.png)
有的信息比较多,可以分屏显示,按q 退出分屏
eg: ffmpeg -formats | more 查询所有支持的格式
ffmpeg -codecs | more 查询所有编解码的格式
![](https://img.haomeiwen.com/i6408556/1b77d3abe3f4c441.png)
可以过滤查找 是否支持某一种能力
eg: ffmpeg -formats | grep aac
![](https://img.haomeiwen.com/i6408556/95a9ac036e91bacf.png)
上线的红色框里面的信息就代表我们查询的ffmpeg版本支持aac
2 录制命令
- 录制视频
Mac:ffmpeg -f foundation -i 1 -r 30 output.yuv
Windows:
使用 gdigrab :ffmpeg -f gdigrab -i desktop -r 30 out.yuv
使用 dshow : 需要下载screen-capture-recorder
ffmpeg -f dshow -i video="screen-capture-recorder" -r 30 out.mp4
ffmpeg -f dshow -i video="Integrated Camera" -s 1280x720 -r 30 -pix_fmt yuv420p -c:v libx264 -b:v 20000000 media.avi
-f 指定采集数据的设备
mac下使用 foundation
Windows下可以使用gdigrab(给予GDI(图形设备接口(Graphics Device Interface))的抓屏设备) dshow(DirectShow).(ffmpeg -devices 查询当前的设备有哪些)
![](https://img.haomeiwen.com/i6408556/5309538866eae56a.png)
-i 指定设备 mac 下 1表示桌面(命令查询mac下的索引号)
ffmpeg -f dshow -list_devices true -i "" 该命令可以查询设备列表
![](https://img.haomeiwen.com/i6408556/0ab7ebb3a1c18a59.png)
windows下支持桌面采集
![](https://img.haomeiwen.com/i6408556/37f4cee1ca4d2912.png)
上图可以看到存在乱码,是cmd编码的问题,在cmd 输入chcp 可以看到当前的编码代号,然后输入chcp 65001(utf-8)即可解决乱码问题,下图。
![](https://img.haomeiwen.com/i6408556/fdcdcfccaea64784.png)
-r 指定帧率
-s 指定分辨率 eg: -s 640x480
-pix_fmt 指定格式
-
录制音频
ffmpeg -f dshow -i audio="麦克风 (Webcam C170)" -ar 44100 -ac 2 -f s16le out/audio_1.pcm
ffmpeg -f dshow -i audio="麦克风 (3- Webcam C170)" out/out.wav
ffmpeg -f dshow -i audio="麦克风 (3- Webcam C170)" -codec mp3 out/out.mp3 指定编码为MP3
ffmpeg -f dshow -i audio="virtual-audio-capturer" out/play.wav 录制扬声器 需要安装screen-capture-recorder -
录制音视频
ffmpeg -f gdigrab -r 5 -offset_x 10 -offset_y 20 -s 640x480 -i desktop -f dshow -i audio="麦 克风 (3- Webcam C170)" out/media.mp4
使用gdigrab 录制屏幕 使用dshow 录制声音。
-r 5 -offset_x 10 -offset_y 20 -s 640x480 从屏幕的(10,20)点处开始,抓取640x480的屏幕,设定帧率为5
音视频录制图.png
-
扩展
- -i title=<windowname>可以指定采集某个窗口,目前没有测试
- 除了使用DirectShow作为输入外,使用VFW也可以读取到摄像头的数据,例如下述命令可以播放摄 像头数据:ffplay -f vfwcap -i 0
-
ffmpeg -f dshow -list_options true -i video="Webcam C170" 查看设备头支持能力
能力获取.png
分解/复用
1 mp4 转 flv
ffmpeg -i out/media.mp4 -vcodec copy -acodec copy media.flv
2 mp4 转 mov
ffmpeg -i out/media.mp4 -vcodec copy -acodec copy media.mov
3 从flv中抽取视频
ffmpeg -i out/media.flv -vcodec copy -an out/meida_video.h264
-an 表示不要音频
4 从flv中抽取音频
ffmpeg -i out/media.flv -acodec copy -vn out/meida_audio.aac
-vn 表示抽取视频
5 aac 转 mp3
ffmpeg -i out/meida_audio.aac -acodec mp3 out/meida_audio.mp3
处理原始数据
1 获取mp4中的视频原始数据
ffmpeg -i out/out.mp4 -an -c:v rawvideo -pix_fmt yuv420p out/video.yuv
-c:v 指定视频编码器 rawvideo
-pix_fmt 指定yuv格式
2 获取mp4中的音频原始数据
ffmpeg -i out/out.mp4 -vn -ar 44100 -ac 2 -f s16le out/audio.pcm
-ar 指定音频采样率 44100
-ac 指定音频采样声道 2
-f 指定采样精度 s16le s有符号 16 16bit le 小端存储模式
生成pcm数据需要指定这些参数,同样播放pcm数据也需要告诉ffplay这些对应的参数
ffplay -ar 44100 -ac 2 -f s16le out/audio.pcm
滤镜命令
1 视频裁剪滤镜
ffmpeg -i media_1.mp4 -vf crop=in_w-300:in_h-200 -c:v libx264 -c:a copy out/meida_2.mp4
-vf 表示视频滤镜
crop 滤镜的名字 in_w-300 表示将视频本身的宽度减去300 in_h-200 将视频本身的高度减去200
-c:v libx264 表示指定视频编码器 libx264
-c:a copy 表示指定音频编码器 拷贝 保持原有的
2 添加水印
- 静态水印
- movie滤镜
ffmpeg -i out/media_1.mp4 -vf "movie=out/logo2.png[watermark];[in][watermark] overlay=main_w-overlay_w-10:main_h-overlay_h-10[out] " out/watermark.mp4
movie 滤镜 需要放到引号里面 out/logo2.png是水印的图片
overlay 水印参数
main_w 视频宽度
main_h 视频高度
main_w-overlay_w-10 : 水印在x轴的位置,也可以写成x=main_w-overlay_w-10
main_h-overlay_h-10:水印在y轴的位置 - filter_complex
ffmpeg -i out/media_1.mp4 -i out/logo2.png -filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' out/video_1.mp4
-filter_complex: 相比-vf, filter_complex适合开发复杂的滤镜功能,如同时对视频进行裁剪并旋转。参数之间使用逗号(,)隔开即可
main_w:视频宽度
overlay_w: 要添加的图片水印宽度
main_h : 视频高度
overlay_h:要添加的图片水印宽度
这个没有测试,自己的ffmpeg不支持该水印
- movie滤镜
-
draw 滤镜 文字水印
ffmpeg -i out/media_1.mp4 -vf "drawtext=fontfile=simhei.ttf: text=‘生产力’:x=10:y=10:fontsize=24:fontcolor=white:shadowy=2" out/media_7.mp4
fontfile:字体类型
text:要添加的文字内容
fontsize:字体大小
fontcolor:字体颜色 测试后水印的中文不能显示出来 yinw
英文显示也有点问题
![](https://img.haomeiwen.com/i6408556/9c73a2832a11afe3.png)
- 动态水印
还没有测试
3 添加logo
ffmpeg -y -t 60 -i out/media_1.mp4 -i out/logo1.png -i out/logo2.png -filter_complex "overlay=x=if(lt(mod(t,20),10),10,NAN ):y=10,overlay=x=if(gt(mod(t,20),10),W-w-10,NAN ) :y=10" out/output.mp4
裁剪与合并
- 1 裁剪命令
ffmpeg -i out/process_media.mp4 -ss 00:00:10 -t 120 out/1.mp4
-ss 开始裁剪的时间位置
-t 裁剪的时长 -
2 拼接命令
ffmpeg -f concat -i a.txt out/4.mp4
-f concat 表示要对 后面的数据进行拼接
-i 指定数据源 a.txt 是源文件的列表
a.txt格式如下
file 文件名1
file 文件名2
......
列表格式.png
- 3 裁剪yuv
从头截取 (前30帧)
ffmpeg -s 1920x1080 -i input.yuv -c:v rawvideo -filter:v select="gt(n\, -1)" -vframes 30 out30.yuv
ffmpeg -s 1920x1080 -i input.yuv -c:v rawvideo -filter:v select="between(n\, 0\, 29)" out30.yuv
ffmpeg -r 1 -ss 0 -i input.yuv -vcodec copy -vframes 30 output.yuv
中间截取 (30-100帧)
ffmpeg -s 1920x1080 -i input.yuv -c:v rawvideo -filter:v select="between(n\, 30\, 100)" out.yuv
按时间截取
ffmpeg -s 1920x1080 -i input.yuv -c:v rawvideo -filter:v select="between(t\, 10\, 20)" out.yuv
ffmpeg -s 1920x1080 -r 1 -ss 10 -t 10 -i input.yuv -c:v copy out.yuv
图/视互转
1 视频转图片
ffmpeg -i out/4.mp4 -r 1 -f image2 image-%3d.jpeg
-r 1 表示一秒转换1张图片
-f image 图片格式
image-%3d.jpeg 指定输出图片的名称 %3代表3个数字组成。下图
![](https://img.haomeiwen.com/i6408556/22bb1d835cfcf7ca.png)
2 图片转视频
ffmpeg -i image-%3d.jpeg out.mp4
-i image-%3d.jpeg 指定一组图片
这样转出来的视频会迅速播放完毕,还没有解决完毕
直播相关
1 直播拉流
ffplay http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8
拉取cctv-1的http流
ffmpeg -i http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8 -c copy cctv-1.m3u8
拉取cctv-1的http流 并保存成视频文件
2 直播推流
需要有一个推流服务器。
网友评论