简单整理了FFmpeg相关命令,主要包括ffplay播放控制和媒体播放命令、ffmpeg命令相关参数以及常用的提取音视频等命令。
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案,有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。
FFmpeg整体结构:
ffmpeg/ffplay/ffprobe区别
ffmpeg音视频处理流程
命令参数 | 内容 | 命令参数 | 内容 |
---|---|---|---|
-version | 版本 | -bsfs | 可用比特流filter |
-buildconf | 编译配置 | -protocols | 显示可用的协议 |
-formats | 显示可用格式( muxers+demuxers) | -filters | 显示可用的过滤器 可用的过滤器 |
-muxers | 显示可用复用器 | -pix_fmts | 显示可用的像素格式 |
-demuxers | 显示可用解复用器 | -layouts | 显示标准声道名称 |
-codecs | 显示可用编解码器( decoders+encoders) | -sample_fmts | 显示可用的音频采样格式 |
-decoders | 显示可用解码器 | -colors | 显示可用的颜色名称 |
-encoders | 显示可用编码器 |
选项 | 说明 | 选项 | 说明 |
---|---|---|---|
q, ESC | 退出播放 | t | 循环切换字幕流 |
f | 全屏切换 | c | 循环切换节目 |
p, SPC | 暂停 | w | 循环切换过滤器或显示模式 |
m | 静音切换 | s | 逐帧播放 |
9, 0 | 9减少音量,0增加音量 | left/right | 向后/向前拖动10秒 |
down/up | 向后/向前拖动1分钟 | 鼠标右键单击 | 拖动与显示宽度对应百分比的文件进行播放 |
a | 循环切换音频流 | 鼠标左键双击 | 全屏切换 |
v | 循环切换视频流 |
选项 | 说明 |
---|---|
-x width | 强制显示宽带。 |
-y height | 强制显示高度。 |
-pixel_format format | 格式设置像素格式 |
-an | 禁用音频(不播放声音) |
-vn | 禁用视频(不播放视频) |
-sn | 禁用字幕(不显示字幕) |
-ss pos | 根据设置的秒进行定位拖动,注意时间单位:比如’55’ 55 seconds, ‘12:03:45’ ,12 hours, 03 minutes and 45 seconds, ‘23.189’ 23.189 second |
-t duration | 设置播放视频/音频长度,时间单位如 -ss选项 |
-nodisp | 关闭图形化显示窗口,视频将不显示 |
-noborder | 无边框窗口 |
-volume vol | 设置起始音量。音量范围[0 ~100] |
-f fmt | 强制使用设置的格式进行解析。比如-f s16le |
-window_title title | 设置窗口标题(默认为输入文件名) |
-showmode mode | 设置显示模式,可用的模式值:0 显示视频,1 显示音频波形,2 显示音频频谱。缺省为0,如果视频不存在则自动选择2 |
1.播放本地文件
ffplay -window_title "test time" -ss 2 -t 10 -autoexit test.mp4
ffplay buweishui.mp3
2.播放网络流
ffplay -window_title "rtmp stream" rtmp://202.69.69.180:443/webcast/bshdlive-pc
3.播放YUV数据
ffplay -pixel_format yuv420p -video_size 320x240 -framerate 5 yuv420p_320x240.yuv
(-pixel_format 指定像素格式,-framerate 帧率)
4.播放RGB数据
ffplay -pixel_format rgb24 -video_size 320x240 -i rgb24_320x240.rgb
ffplay -pixel_format rgb24 -video_size 320x240 -framerate 5 -i rgb24_320x240.rgb
5.播放PCM数据
ffplay -ar 48000 -ac 2 -f f32le 48000_2_f32le.pcm
6.音视频同时变速
ffplay -i test.mp4 -vf setpts=PTS/2 -af atempo=2
1.双宫格
ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -i 4.mp4 -filter_complex "nullsrc=size=640x480[base];[0:v]setpts=PTS-STARTPTS,scale=320x240[upperleft];[1:v]setpts=PTS-STARTPTS,scale=320x240[upperright];[base][upperleft]overlay=shortest=1[tmp1];[tmp1][upperright]overlay=shortest=1:x=320" out2.mp4
2.四宫格
ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -i 4.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" out3.mp4
ffmpeg命令行参数解释:
ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件]
ffmpeg [[ options ][ -i input_file ]]… {[ options ] output_file}…
1.主要参数
-i | 设定输入流 |
---|---|
-f | 设定输出格式(format) |
-ss | 开始时间 |
-t | 时间长度 |
2.音频参数
-aframes | 设置要输出的音频帧数 |
---|---|
-b:a | 音频码率 |
-ar | 设定采样率 |
-ac | 设定声音的Channel数 |
-acodec | 设定声音编解码器,如果用copy表示原始编解码数据必须被拷贝。 |
-an | 不处理音频 |
-af | 音频过滤器 |
3.视频参数
-vframes | 设置要输出的视频帧数 |
---|---|
-b | 设定视频码率 |
-b:v | 视频码(与上一条一样) |
-r | 设定帧速率 |
-s | 设定画面的宽与高 |
-vn | 不处理视频 |
-aspect aspect | 设置横纵比 4:3 16:9 或 1.3333 1.7777 |
-vcodec | 设定视频编解码器,如果用copy表示原始编解码数据必须被拷贝。 |
-vf | 视频过滤器 |
1.保留封装格式
ffmpeg -i test.mp4 -acodec copy -vn audio.mp4
ffmpeg -i test.mp4 -vcodec copy -an video.mp4
2.提取视频
保留编码格式:ffmpeg -i test.mp4 -vcodec copy -an test_copy.h264
指定格式:ffmpeg -i test.mp4 -vcodec libx264 -an test.h264
3.提取音频
保留编码格式:ffmpeg -i test.mp4 -acodec copy -vn test.aac
指定格式:ffmpeg -i test.mp4 -acodec libmp3lame -vn test.mp3
1.保持编码格式
ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.ts
ffmpeg -i test.mp4 -codec copy test_copy2.ts
2.修改音视频码率
ffmpeg -i test.mp4 -b:v 400k -b:a 192k output_bva.mp4
3.修改视频分辨率
ffmpeg -i test.mp4 -s 480x270 output_480x270.mp4
4.修改音频采样率
ffmpeg -i test.mp4 -ar 44100 output_44100hz.mp4
5.截取视频
ffmpeg -i believe.mp4 -ss 00:03:00 -t 10 -codec copy 1.mp4
1.mp4转ts
ffmpeg -i 1.mp4 -codec copy -vbsf h264_mp4toannexb 1.ts
2.mp4转flv
ffmpeg -i 1.mp4 -codec copy 1.flv
1.截取一张352x240尺寸大小的,格式为jpg的图片
ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg
2.把视频的前30帧转换成一个Animated Gif
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif
3.截取指定时间的缩微图
ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 test.jpg
1.录制视频(默认参数)
桌面:ffmpeg -f dshow -i video="screen-capture-recorder" v-out.mp4
摄像头: ffmpeg -f dshow -i video="Integrated Webcam" -y v-out2.flv (要根据自己摄像头名称)
2.录制声音(默认参数)
系统声音:ffmpeg -f dshow -i audio="virtual-audio-capturer" a-out.aac
系统+麦克风声音:ffmpeg -f dshow -i audio="麦克风 (Realtek Audio)"-f dshow -i audio="virtual-audio-capturer" -filter_complex amix=inputs=2:duration=first: dropout_transition=2 a-out2.aac
3.同时录制声音和视频(默认参数)
ffmpeg -f dshow -i audio="麦克风(Realtek 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