1 FFmpeg常用命令行

1.1 FFmpeg命令行参数

通用参数

参数 功能
-i 输入
-f 设置输出格式,如mp4、avi、mkv等
-ss 开始时间
-t 时长,秒为单位,-t 60
-y 覆盖

视频参数

参数 功能
-vframes 设置输出视频帧数
-b 设置视频码率,-b 400k,视频内音频也同时重新编码
-b:v 设置视频码率,-b:v 400k 只对视频编码,音频不变
-r 设置帧速率
-s 设置画面的宽高,-s 1280x920
-vn 不处理视频
-aspect 设置横纵比,4:3,16:9,或1.3333,1.7777
-vcodec 设置视频编解码器,libx264,如果设置copy表示原始编码数据必须被拷贝
-vf 视频过滤器

音频参数

参数 功能
-aframes 设置输出音频帧数
-b:a 设置音频码率
-ar 设置采样率,单位:Hz,取值:0 ~ INT_MAX,默认值:0
-ac 设置音频的通道数,取值:0 ~ INT_MAX,默认值:0
-acodec 设置音频编解码器,libmp3lame,如果设置为copy,表示原始编解码数据必须被拷贝
-an 不处理音频
-af 音频过滤器

1.2 常用命令行

录制视频

保留编码格式

ffmpeg -y -i rtsp://xxx@xxx.xxx.xxx.xxx -vcodec copy -t 20 -f mp4 test.mp4

提取视频

保留编码格式

ffmpeg -i test.mp4 -vcodec copy -an test_copy.h264

强制转换编码格式

ffmpeg -i test.mp4 -vcodec libx264 -an test.h264

提取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

修改视频编码格式

将视频转成视频编码格式h265,音频编码格式转成mp3

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 -s 480x270 output_480x270.mp4

按时长裁剪视频

00:05:00开始裁剪10

ffmpeg -i test.mp4 -ss 00:05:00 -t 10 -codec copy 1.mp4

视频格式转换

mp4转成ts

ffmpeg -i 1.mp4 -codec copy -vbsf h264_mp4toannexb 1.ts

mp4转成flv

ffmpeg -i 1.mp4 -codec copy 1.flv

视频拼接

拼接mp4格式(mp4list.txt保存视频名称列表)

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

tslist.txt中存贮1.ts,2.ts,3.ts文件名

拼接flv格式

ffmpeg -f concat -i flvlist.txt -codec copy out_flv2.mp4

注意事项:

  • 把每个视频封装格式也统一为ts,拼接输出的时候再输出你需要的封装格式,比如MP4
  • 视频分辨率可以不同,但是编码格式需要统一
  • 音频编码格式需要统一,音频参数(采样率/声道等)也需要统一

视频截图

输入test.mp4格式时image200:00:02开始,截取一张640x360大小的jpg

ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.jpg

视频抽帧

每秒15帧,每帧都提取,提取5秒时长,输出分辨率640x360的jpg图片

ffmpeg -i test.mp4 -t 5 -s 640x360 -r 15 frame%03d.jpg

图片合成视频

将所有符合这个格式的jpg图片合成帧速率25fps的mp4视频

ffmpeg -f image2 -i frame%03d.jpg -r 25 video.mp4

视频转成Gif

ffmpeg -i test.mp4 -t 5 -r 25 -s 640x360 image.gif

Gif转成视频

ffmpeg -f gif -i image.gif image.mp4

从视频中提取音频

保留原编码格式

ffmpeg -i test.mp4 -acodec copy -vn test.aac

强转编码格式

ffmpeg -i test.mp4 -acodec libmp3lame -vn test.mp3

提取PCM

ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f s16le 48000_2_s16le.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 -i buweishui.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

修改音频采样率

ffmpeg -i test.mp4 -ar 44100 output_44100hz.mp4