ffmpeg信息查询命令
命令参数 | 内容 |
---|---|
-version | 显示版本 |
-buildconf | 显示编译配置 |
-formats | 显示可用格式(muxers+demuxers) |
-muxers | 显示可用复用器 |
-demuxers | 显示可用解复用器 |
-codecs | 显示可用编解码器(decoders+encoders) |
-decoders | 显示可用解码器 |
-encoders | 显示可用编码器 |
-bsfs | 显示可用比特率filter |
-protocols | 显示可用的协议 |
-filters | 显示可用的过滤器 |
-pix_fmts | 显示可用的像素格式 |
-layouts | 显示标准声道名称 |
-sample_fmts | 显示可用的音频采样格式 |
-colors | 显示可用的颜色名称 |
ffmpeg 控制命令
主要参数:
◼ -i 设定输入流
◼ -f 设定输出格式(format)
◼ -ss 开始时间
◼ -t 时间长度
◼ -y 覆盖
音频参数:
◼ -aframes 设置要输出的音频帧数
◼ -b:a 音频码率
◼ -ar 设定采样率
◼ -ac 设定声音的Channel数
◼ -acodec 设定声音编解码器,如果用copy表示原始编解码数据必须被拷贝。
◼ -an 不处理音频
◼ -af 音频过滤器
视频参数:
◼ -vframes 设置要输出的视频帧数
◼ -b 设定视频码率
◼ -b:v 视频码率
◼ -r 设定帧速率
◼ -s 设定画面的宽与高
◼ -vn 不处理视频
◼ -aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777
◼ -vcodec 设定视频编解码器,如果用copy表示原始编解码数据必须被拷贝。
◼ -vf 视频过滤器
常见的使用场景
使用ffmpeg 提取音视频
//提取YUV数据
ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p output.yuv
-i 指定文件
-an 不处理音频
-c:v 指定编码方式 rawvideo
-pix_fmt 指定像素格式 yuv420p
//指定分辨率播放原始数据
ffplay -s 638x358 out.yuv
//提取PCM音频数据
ffmpeg -i input.mp4 -vn -ar 44100 -ac2 -f s16le output.pcm
-i 指定文件
-vn 不要视频
-ar 44100 指定音频采样率
-ac2 双声道
-f 指定音频数据的存储格式为s16le signed 16bit littleendile
//播放音频
ffplay -ar 44100 -ac 2 -f s16le out.pcm
视频裁剪/合并命令
//裁剪视频
ffmpeg -i input.mp4 -ss 00:00:00 -t 10 output.ts
-i 输入文件
-ss 开始时间
-t 裁剪时长
//拼接视频
ffmpeg -f concat -i inputs.txt out.flv
-f concat 指定拼接模式
-i 指定拼接文件 inputs.txt存储文件列表
out.flv 指定输出结果
inputs.txt 内容为 'file filename' 格式
//file '1.ts'
//file '2.ts'
保留封装格式
ffmpeg -i test.mp4 -acodec copy -vn audio.mp4 (这里的copy就是代表使用原本的格式)
ffmpeg -i test.mp4 -vcodec copy -an video.mp4
提取视频
保留编码格式:ffmpeg -i test.mp4 -vcodec copy -an test_copy.h264
强制格式:ffmpeg -i test.mp4 -vcodec libx264 -an test.h264
提取音频
保留编码格式:ffmpeg -i test.mp4 -acodec copy -vn test.aac
强制格式:ffmpeg -i test.mp4 -acodec libmp3lame -vn test.mp3
使用ffmpeg 命令提取像素格式
提取YUV
提取3秒数据,分辨率和源视频一致
ffmpeg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p yuv420p_orig.yuv
提取3秒数据,分辨率转为320x240
ffmpeg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p -s 320x240 yuv420p_320x240.yuv
提取RGB
提取3秒数据,分辨率转为320x240
ffmpeg -i test.mp4 -t 3 -pix_fmt rgb24 -s 320x240 rgb24_320x240.rgb
RGB和YUV之间的转换
ffmpeg -s 320x240 -pix_fmt yuv420p -i yuv420p_320x240.yuv -pix_fmt rgb24 rgb24_320x240_2.rgb
使用ffmpeg 提取PCM数据
ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -sample_fmt s16 out_s16.wav
ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -codec:a pcm_s16le out2_s16le.wav
使用ffmpeg 转化封装格式
保持编码格式:
ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.ts
ffmpeg -i test.mp4 -codec copy test_copy2.ts
改变编码格式:
ffmpeg -i test.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv
修改帧率:
ffmpeg -i test.mp4 -r 15 output2.mp4
修改视频码率:
ffmpeg -i test.mp4 -b 400k output_b.mkv (此时音频也被重新编码)
只修改视频码率:
ffmpeg -i test.mp4 -b:v 400k output_bv.mkv
修改音频码率:
ffmpeg -i test.mp4 -b:a 192k output_ba.mp4
如果不想重新编码video,需要加上-vcodec copy
修改音视频码率:
ffmpeg -i test.mp4 -b:v 400k -b:a 192k output_bva.mp4
修改视频分辨率:
ffmpeg -i test.mp4 -s 480x270 output_480x270.mp4
修改音频采样率:
ffmpeg -i test.mp4 -ar 44100 output_44100hz.mp4
使用ffmpeg 合并视频
将mp4 转化为ts格式(便于后续合并)
ffmpeg -i 1.mp4 -codec copy -vbsf h264_mp4toannexb 1.ts
ffmpeg -i 2.mp4 -codec copy -vbsf h264_mp4toannexb 2.ts
ffmpeg -i 3.mp4 -codec copy -vbsf h264_mp4toannexb 3.ts
以TS格式进行拼接
方法1:ffmpeg -i “concat:1.ts|2.ts|3.ts” -codec copy out_ts.mp4
方法2:ffmpeg -f concat -i tslist.txt -codec copy out_ts2.mp4
使用ffmpeg 将图像与视频互转
//视频转图片
ffmpeg -i input.flv -r 1 -f image2 image-%4d.jpeg
-i 指定文件
-r 指定转出图片的帧率
-f 将输入文件转成什么格式的
image-%4d.jepg(%4d四个数字)
//图片转视频
ffmpeg -i image-%4d.jpeg output.mp4
截取一张图片
ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.jpg
ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.bmp
音视频录制命令
window平台下的命令
//Windos平台下的使用方法
//windows下不能使用avfoundation来执行操作
//需要使用dshow来操作 dshow需要提前安装,下载地址如下:
//链接:https://pan.baidu.com/s/1vwtHNjYS23jrLOUC4zGh-Q
//提取码:2y9m
//查看支持的设备列表信息
ffmpeg -list_devices true -f dshow -i dummy
//录制桌面视频
ffmpeg -f dshow -i video="screen-capture-recorder" screen_capture.mp4
ffplay screen_capture.mp4
//这里发现一个问题,直接用windows自带播放器播放会出现播放失败问题
//用ffplay播放正常,可能是编码格式的问题
//录制音频(设备列表可以通过指令查询)
ffmpeg -f dshow -i audio="麦克风 (Realtek(R) Audio)" audio-out.aac
ffplay audio-out.aac
//同时录制音视频
ffmpeg -f dshow -i video="screen-capture-recorder":audio="麦克风 (Realtek(R) Audio)" full-out.mp4
ffplay full-out.mp4
//这里采用windows自带的播放器也会播放失败
//查看视频/音频录制支持的参数列表
ffmpeg -f dshow -list_options true -i video="screen-capture-recorder"
ffmpeg -f dshow -list_options true -i audio="麦克风 (Realtek(R) Audio)"
//指定具体的视频录制参数
ffmpeg -f dshow -video_size 1920x1080 -framerate 30 -pixel_format yuv420p -i
video="screen-capture-recorder" output.mp4
-f dshow 使用dshow录制
-video_size 采用的分辨率是1920x1080
-framerate 30 采用的帧率是30
-pixel_format yuv420p 像素格式为yuv420p
-i video="screen-capture-recorder"指定录制设备
Linux平台下的指令
//首先安装x11grab,安装方法自行检索
//录制视频
ffmpeg -video_size 1920x1080 -framerate 25 -f x11grab -i :0.0,0.0 output.mp4
-video_size 1920x1080 分辨率是1920*1080
-framerate 25 帧率是25
-i 0.0,0.0从屏幕左上角开始录制
ffplay output.mp4
//同时录制音频和视频
ffmpeg -video_size 1920x1080 -framerate 25 -f x11grab -i :0.0,0.0 -f pulse -ac 2 -i default output.mkv
-f pulse 使用pulse录制音频
//还可以指定alsa 录制音频
ffplay output.mkv
Mac平台下的指令
//MAC平台下的使用方法
//avfoundation是MAC下的采集源,windows下不可以使用
//录制屏幕
ffmpeg -f avfoundation -i 1 -r 30 raw_output.yuv
-f avfoundation:指定使用avfoundation采集数据源
-i:指定从哪儿采集数据 索引1代表着屏幕
-r:指定录制的帧率
raw_output.yuv 指定原始数据输出的文件名称
//原始数据必须指定数据格式才能播放
ffplay -s 1920*1080 -pix_fmt uyvy422 raw_output.yuv
-s:指定分辨率是1920*1080
-pix_fmt:指定数据格式为uyvy422
raw_output.yuv:输入数据的文件名称
//查询支持的设置列表
ffmpeg -f avfoundtaion -list_devices true -i ""
//录制音频
ffmpeg -f avfoundation -i :0 out_audio.wav
-i :0 指定录制的音频输入设备
out_audio.wav :指定输出的音频文件名称
//播放音频
ffplay out_audio.wav
提取音视频命令
//多媒体格式转换
ffmpeg -i input.mp4 -vcodec copy -acodec copy output.flv
-i:输入文件
-vcodec copy:视频编码处理方式
-acodec copy:音频编码处理方式
//抽取视频信息
ffmpeg -i input.mp4 -an -vcodec copy output.h264
ffplay out.h264
//抽取音频信息
ffmpeg -i input.mp4 -acodec copy -vn output.aac
ffplay out.aac
推流/拉流命令
//直播推流
ffmpeg -re -i output.mp4 -c copy -f flv rtmp://server/live/streamName
-re 保持帧率
-i out.mp4 指定文件
-a 音频 -v 视频 -c 音视频
-f 推出的格式为 flv
//直播拉流
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
-i 指定流地址
-c copy 音视频流直接拷贝不编码
dump.flv 指定本地文件
//拉取的什么格式存储成什么格式
裁剪视频命令
//视频裁剪
fmpeg -i input.mov -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy output.mp4
crop格式:crop=out_w:out_h:x:y
-i 指定文件
-vf crop 指定视频滤镜,crop 裁剪滤镜
in_w-200宽度减少200
in_h-200高度减少200
-c:v libx264视频编码器为libx264
-c:a copy 不对音频进行处理
//播放视频
ffplay output.mp4
视频淡入淡出
# 设置5.5秒的黑场,然后开始0.5秒的淡入: ffmpeg -i 23.2.mp4 -vf fade=t=in:st=5.5:d=0.5 test_a.mp3
音频渐强渐弱
# 时间相关参考上条 ffmpeg -i 23.2.mp4 -filter_complex afade=t=in:st=0:d=2 test_a.mp3
音轨替换
ffmpeg -i 23.2.mp4 -i test_a.mp3 -c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 test23.2.mp4
画面裁剪
# crop=目标宽:目标高:目标视频左上角在原视频中横坐标:目标视频左上角在原视频中纵坐标 ffmpeg -i inputname.mp4 -vf crop=1920:1200:0:0 -threads 5 -preset ultrafast -strict -2 outputname.mp4
添加硬字幕
ffmpeg -i test_1280x720_3.mkv -vf subtitles=test_1280x720_3.srt out.mp4
改变视频对比度和亮度
ffmpeg.exe -i record.mp4 -vf eq=contrast=0.9:brightness=-0.1 output.mp4
指定位率
ffmpeg -i 23.mp4 -b:v 8000k -b:a 192k ober.mp4
解决问题:”Too many packets buffered for output stream 0:1.”
ffmpeg -i in.mp4 -max_muxing_queue_size 1024 out.mp4
画面翻转
ffmpeg -i input.mp4 -vf "hflip" output.mp4 ffmpeg -i input.mp4 -vf "vflip" output.mp4
在视频中插入图片
# 其中scale是图片大小,overlay是左上角坐标 ffmpeg -i 04_演示视频.mp4 -strict -2 -vf "movie=black.png,scale=85:20[mask1];[in][mask1]overlay=95:430:enable='between (t,21,28)'" -b:v 300k -acodec copy out.mp4
在视频中插入多张图片
ffmpeg -i input.mp4 -strict -2 -vf "movie=1.jpg,scale=456:280[mask1];movie=2.jpg,scale=456:280[mask2];movie=3.jpg,scale=456:280[mask3];[in][mask1] overlay=400:200:enable='between (t,0,12)'[top];[top][mask2] overlay=400:200:enable='between (t,12,32)'[middle];[middle][mask3] overlay=400:200:enable='between (t,32,62)'[out]" output.mp4
图片转视频
ffmpeg -ss 0 -t 57 -f lavfi -i color=c=0x000000:s=1280x720:r=5 -i 01.png -filter_complex "[1:v]scale=1280:720[v1];[0:v][v1]overlay=0:0[outv]" -map [outv] -c:v libx264 01.mp4
ffmpeg -r 25 -minrate 25 -loop 1 -i op_084.png -pix_fmt yuv420p -vcodec libx264 -r:v 25 -minrate:v 25 -preset medium -crf 30 -s 1104x828 -vframes 250 -r 25 -minrate 25 -t 3 op_084_test.mp4
13. 无音频的视频中添加音频
```bash
ffmpeg -i 01.mp4 -i 01.mp3 -c:v copy -c:a copy -strict experimental 01_a.mp4
连接视频
ffmpeg -f concat -safe 0 -i filelist.txt -acodec copy -vcodec copy output.mp4 # filelist.txt 内容类似以下: # file '11.mp4' # file '22.mp4'
改变音频速度
ffmpeg -i input.mkv -filter:a "atempo=2.0" -vn output.mkv
视频转gif,没有明显噪点
# 注:生成gif后再压缩极为麻烦,如有压缩大小需求,最好对原视频文件做等比缩小、指定更低帧率等操作,再用以下命令转为gif # 来源如下: ### 版权声明:本文为CSDN博主「没有技术的菜逼」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 ### 原文链接:https://blog.csdn.net/qq_40212938/article/details/113060064
ffmpeg -i “test.mp4” -s 642x358 -vf “[in]scale=642x358,split[split1][split2];[split1]palettegen=stats_mode=single[pal];[split2][pal]paletteuse=new=1” test.gif
```
截取音频:
ffmpeg -i input.wav -ss 00:00:05 -t 00:00:10 output.wav
-ss为开始时间 -t为持续时间
查看音频格式:
ffprobe input.wav
修改音频文件采样率:
ffmpeg -i input.wav -ar 16000 output.wav
多通道变单通道
ffmpeg -i input.wav -ac 1 output.wav
转换格式
ffmpeg -i input.mp3 outpit.wav
提取一个通道并重采样
ffmpeg -i input.wav -ac 1 -ar 16000 output.wav
修改采样精度(位数)
ffmpeg -y -i input.wav -acodec pcm_f32le -ac 1 -ar 16000 -vn output.wav
转换音频格式
ffmpeg -i input.flac output.wav