ffmpeg命令参数:
主要参数 | 作用 |
---|---|
-i | 设置输入流 |
-f | 设置输出格式 |
-ss | 设置开始时间 |
-t | 设置时间长度 |
音频参数 | 作用 |
---|---|
-aframes | 设置输出的音频帧数 |
-b:a | 设置音频码率 |
-ar | 设置采样率 |
-ac | 设置声音的channel数 |
-acodec | 设置声音编解码器,cpoy表示原始编解码数据必须被拷贝 |
-an | 不处理音频 |
-af | 音频过滤器 |
例子:
ffmpeg -i test.mp4 -b:a 192k -ar 48000 -ac 2 -acodec libmp3lame -aframes 200 out.mp3
视频参数 | 作用 |
---|---|
-vframes | 设置输出的视频帧数 |
-b | 设置视频码率 |
-b:v | 设置视频码率 |
-r | 设置帧速率 |
-s | 设置画面的宽与高 |
-vn | 不处理音频 |
-aspect | 设置横纵比4:3,16:9,1.3333:1.7777 |
-vcodec | 设置视频编解码器,cpoy表示原始编解码数据必须被拷贝 |
-vf | 视频过滤器 |
例子:
ffmpeg -i test.mp4 -vframes 300 -b:v 300k -r 30 -s 640x480 -aspect 16:9 -vcodec libx265
ffmpeg提取音视频数据:
保留封装格式:
ffmpeg -i test.mp4 -acodec copy -vn -audio.mp4
ffmpeg -i test.mp4 -vcodec copy -an video.mp4
提取视频:
保留编码格式:ffmepg -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_320x240_2.rgb
提取PCM:
ffmpeg -i test.mp3 -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm
ffmpeg -i test.mp3 -ar 48000 -ac 2 -sample_fmt s16 out_s16.wav
ffmpeg -i test.mp3 -ar 48000 -ac -codec:a pcm_s16le out2_s16le.wav
ffmpeg -i test.mp3 -ar 48000 -ac 2 -f f32le 48000_2_f32le.pcm
ffmpeg -i test.mp4 -t 10 -vn -ar 48000 -ac 2 -f f32le 48000_2_f32le_2.pcm
后缀格式可不为pcm,目的是为了好识别
ffmpeg命令转封装
保持编码格式:
ffmpeg -i test.mp4 -vcodec copy -acode 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格式进行拼接:
方法一:ffmpeg -i "concat:1.mp4|2.mp4|3.mp4" -codec copy out_mp4.mp4
方法二:ffmpeg -f concat -i mp4list.txt -codec copy out_mp42.mp4
以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
以FLV格式进行拼接:
方法1:ffmpeg -i "concat:1.flv|2.flv|3.flv" -codec copy out_flv.mp4
方法2:ffmpeg -f concat -i flvlist.txt -codec copy out_flv2.mp4
方法1只适用于部分封装格式,比如TS
拼接建议:
- 使用方法2进行拼接
- 转成TS格式再进行拼接
不同编码拼接要点:
- 视频分辨率可以不同,但编码格式需统一
- 音频编码格式需统一,音频参数(采样率/声道等)也需统一
ffmpeg图片和视频转换
截取一张图片:
ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.jpg
-vframes 帧 如果大于1 那么 输出加%03d test%03d.jpg, C语言格式
转换视频为图片(每帧一张图):
ffmpeg -i test.mp4 -t 5 -s 640x360 -r 15 frame%03d.jpg
图片转换为视频:
ffmpeg -f image2 -i frame%03d.jpg -r 25 video.mp4
从视频中生成GIF图片:
ffmpeg -i test.mp4 -t 5 -r 1 image1.gif
ffmpeg -i test.mp4 -t 5 -r 25 -s 640x360 image2.gif
将 GIF 转化为 视频:
ffmpeg -f gif -i image2.gif image2.mp4
ffmpeg视频录制
查看可用设备名字:
ffmpeg -list_devices true -f dshow -i dummy
录制视频(默认参数):
桌面:ffmpeg -f dshow -i video="screen-capture-recorder" v-out.mp4
摄像头: ffmpeg -f dshow -i video="Integrated Camera" -y v-out2.flv (要根据自己摄像头名称)
录制声音(默认参数):
系统声音:ffmpeg -f dshow -i audio="virtual-audio-capturer" a-out.aac
系统+麦克风声音:
ffmpeg -f dshow -i audio="麦克风阵列 (2- Realtek High Definition Audio)" -f dshow -i audio="virtual-audio-capturer" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 a-out2.aac
同时录制声音和视频:
ffmpeg -f dshow -i audio="麦克风阵列 (2- Realtek High Definition Audio)" -f dshow -i audio="virtual-audio-capturer" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f dshow -i video="screen-capture-recorder" -y av-out.flv
查看视频录制可选参数:
ffmpeg -f dshow -list_options true -i video="screen-capture-recorder"
查看音频录制可选参数:
- ffmpeg -f dshow -list_options true -i audio="virtual-audio-capturer“
- ffmpeg -f dshow -list_options true -i audio="麦克风阵列 (2- Realtek High Definition Audio)"
ffmpeg拉流
直播拉流:
ffplay rtmp://server/live/streamName
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
对于不是rtmp的协议 -c copy要谨慎使用,若没有用-c copy,ffmpeg会根据指定的文件后缀,自动生成相应的编码格式
ffmpeg推流
ffmpeg -re -i out.mp4 -c copy flv rtmp://server/live/streamName
-re,表示按时间戳读取文件