ffmpeg常用命令
基本信息查询命令
1. 输出ffmpeg基本命令信息
ffmpeg -h
Print help / information / capabilities:
-L show license // 显示许可信息
-h topic show help // 显示帮助信息
-version show version // 显示版本
-buildconf show build configuration // 显示编译配置
-formats show available formats // 显示可用格式 , 其等价于 muxers + demuxers 组合
-muxers show available muxers // 显示可用的复用器
-demuxers show available demuxers // 显示可用的解复用器
-devices show available devices // 显示可用设备
-codecs show available codecs // 显示可用的编解码器 , 其等价于 encoders + decoders 组合
-decoders show available decoders // 显示可用的解码器
-encoders show available encoders // 显示可用的编码器
-bsfs show available bit stream filters // 显示可用的比特流 filters 过滤器
-protocols show available protocols // 显示可用协议 , 如 rtmp , rtsp 等 ;
-filters show available filters // 显示可用的过滤器 , 可用于 : 改变播放速度 , 加水印 , 加 Logo
-pix_fmts show available pixel formats // 显示可用的像素格式
-layouts show standard channel layouts // 显示标准声道名称
-sample_fmts show available audio sample formats // 显示可用的音频采样格式
-colors show available color names // 显示可用的颜色名称
-sources device list sources of the input device // 列出输入设备来源
-sinks device list sinks of the output device // 列出输出设备接收器
-hwaccels show available HW acceleration methods // 显示可用的硬件加速方法
2. 查询指定格式的相关解复用/复用信息
ffmpeg -formats | findstr flv
3. 查询指定的编解码信息
ffmpeg -codec | findstr 264
4. 查看具体的ffmpeg命令分类所支持的参数
ffmpeg -h format=flv
ffmpeg -h encoder=libx264
分解、复用
1. 抽取aac音频流
ffmpeg -i input.mp4 -acodec copy -vn out.aac
2.抽取h264视频流
ffmpeg -i input.mp4 -vcodec copy -an out.h264
3. 视频转格式
ffmpeg -i input.mp4 -vcodec copy -acodec copy out.flv
4. 音视频合并
ffmpeg -i input.h264 -i input.aac -vcodec copy -acodec copy out.mp4
处理原始数据
1. 抽取YUV数据
ffmpeg -i input.mp4 -an -c:v rawvideo -pixel_format yuv420p out.yuv
2. 提取视频中的图片
ffmpeg -i input.mp4 -r 30 -ss 00:00:10 -t 2 image-%3d.jpg
-r:每秒提取30帧
-t:取t秒时间的帧
3. 截取视频中指定时间的某一帧图片
ffmpeg -i input.mp4 -ss 00:00:50 -frames:v 1 out1.jpg
-frames:v 后接张数
4.图片文件转成YUV文件
ffmpeg -i image.png -pix_fmt yuv420p out.yuv
5. 图片文件转成YUV文件
ffmpeg -i image.png -pix_fmt yuv420p out.yuv
6.YUV转H264
ffmpeg -f rawvideo -pix_fmt yuv420p -s 320x240 -r 30 -i input.yuv -c:v libx264 -f rawvideo out.h264
7. 提取PCM数据
ffmpeg -i out.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm
ffplay -ar 44100 -ac 2 -f s16le -i out.pcm
8. pcm转WAV
ffmpeg -f s16be -ar 8000 -ac 2 -acodec pcm_s16be -i input.pcm output.wav
滤镜
1. 添加水印
ffmpeg -i input.mp4 -vf "movie=logo.png,scale=64:48[watermask];[in][watermask] overlay=30:10 [out]" out.mp4
vf: movie指定logo位置,scale指定大小overlay指定logo摆放的位置
2. 删除水印
先通过 ffplay 找到要删除 LOGO 的位置
ffplay -i input.flv -vf delogo=x=806:y=20:w=70:h=80:show=1
删除水印
ffmpeg -i input.flv -vf delogo=x=806:y=20:w=70:h=80 output.flv
拼接与裁剪
1. 裁剪
ffmpeg -i input.mp4 -ss 00:00:00 -t 10 out.mp4
2. 视频合并
ffmpeg -f concat -i inputs.txt -c copy out.flv
inputs.txt内容如下:
file '1.flv'
file '2.flv'
file '3.flv'
3. hls切片
ffmpeg -i input.mp4 -c:v libx264 -c:a libfdk_aac -strict -2 -f hls out.m3u8
4. 拼接成四宫格
ffmpeg -re -i input1.mp4 -re -i input2.mp4 -re -i input3.mp4 -re -i input4.mp4
-filter_complex "nullsrc=size=640x480 [base];
[0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft];
[1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright];
[2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft];
[3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright];
[base][upperleft] overlay=shortest=1 [tmp1];
[tmp1][upperright] overlay=shortest=1:x=320 [tmp2];
[tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3];
[tmp3][lowerright] overlay=shortest=1:x=320:y=240"
-c:v libx264 out.mp4
5. 四张图处合并
ffmpeg -re -i input1.jpg -re -i input2.jpg -re -i input3.jpg -re -i input4.jpg
-filter_complex "nullsrc=size=7680x4320 [base];
[0:v] setpts=PTS-STARTPTS,scale=3840x2160 [upperleft];
[1:v] setpts=PTS-STARTPTS, scale=3840x2160 [upperright];
[2:v] setpts=PTS-STARTPTS, scale=3840x2160 [lowerleft];
[3:v] setpts=PTS-STARTPTS, scale=3840x2160 [lowerright];
[base][upperleft] overlay=shortest=1 [tmp1];
[tmp1][upperright] overlay=shortest=1:x=3840 [tmp2];
[tmp2][lowerleft] overlay=shortest=1:y=2160 [tmp3];
[tmp3][lowerright] overlay=shortest=1:x=3840:y=2160" output.jpg
直播
1. 推流
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://server/live/streamName
2. 拉流保存
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
3. 实时推流
ffmpeg -framerate 15 -f avfoundation -i "1" -s 1280x720 -c:v libx264 -f flv rtmp://localhost:1935/live/room
转码
1. 修改视频分辨率
ffmpeg -i input.mp4 -vf scale=1920:1080 -y output.mp4
2. 视频转JPEG
ffmpeg -i input.flv -r 1 -f image2 image-%3d.jpeg
3.视频转gif
ffmpeg -i input.mp4 -ss 00:00:00 -t 10 out.gif
4. 图片转视频
ffmpeg -f image2 -i image-%3d.jpeg out.mp4
5. PNG图片转BMP图片
ffmpeg -i input.png output.bmp
视频采集命令
查看设备列表
ffmpeg -devices (-hide_banner)
查看avfoundation支持的参数
ffmpeg -h demuxer=avfoundation
查看libavfilter支持的参数
ffmpeg -h demuxer=lavfi
查看支持的采集设备列表
ffmpeg -f avfoundation -list_devices true -i ""
采集摄像头画面
ffmpeg -f avfoundation -framerate 30 -video_size 640x480 -i 0 out.yuv
播放摄像头采集画面
ffplay out.yuv -pix_fmt yuv420p -video_size 640x480