目录
11、在Mac OS上使用ffmpeg进行视频录制——录制的是桌面
12、在Mac OS上使用ffmpeg进行视频录制——使用摄像头录制
15、在Mac OS上使用ffmpeg查询音频和视频录制可用设备
1、ffmpeg/ffplay/ffprobe区别
- ffmpeg:
Hyper fast Audio and Video encoder
超快音视频编码器(类似爱剪辑)
- ffplay:
Simple media player简单媒体播放器
- ffprobe:
Simple multimedia streams analyzer
简单多媒体流分析器
2、ffmpeg命令查看帮助文档
基本信息:ffmpeg -h
高级信息:ffmpeg -h long
所有信息:ffmpeg -h full
3、ffplay命令查看帮助文档
所有信息:ffplay -h
4、ffprobe命令查看帮助文档
所有信息:ffprobe -h
5、ffmpeg音视频处理流程
6、ffmpeg命令分类查询
命令参数 | 内容 | 命令参数 | 内容 |
-version | 显示版本 | -bsfs | 显示可用比特流filter |
-buildconf | 显示编译配置 | -protocols | 显示可用的协议 |
-formats | 显示可用格式(muxers+demuxers) | -filters | 显示可用的过滤器 |
-muxers | 显示可用复用器 | -pix_fmts | 显示可用的像素格式 |
-demuxers | 显示可用解复用器 | -layouts | 显示标准声道名称 |
-codecs | 显示可用编解码器(decoders+encoders) | -sample_fmts | 显示可用的音频采样格式 |
-decoders | 显示可用解码器 | -colors | 显示可用的颜色名称 |
-encoders | 显示可用编码器 |
7、查看具体分类所支持的参数
语法:ffmepg -h type=name
比如:
- ffmpeg -h muxer=flv
- ffmpeg -h filter=atempo (atempo调整音频播放速率)
- ffmpeg -h encoder=libx264
8、ffplay播放控制
选项 | 说明 | 选项 | 说明 |
q, ESC | 退出播放 | t | 循环切换字幕流 |
f | 全屏切换 | c | 循环切换节目 |
p, SPC | 暂停 | w | 循环切换过滤器或显示模式 |
m | 静音切换 | s | 逐帧播放 |
9, 0 | 9减少音量,0增加音量 | left/right | 向后/向前拖动10秒 |
/, * | /减少音量,*增加音量 | down/up | 向后/向前拖动1分钟 |
a | 循环切换音频流 | 鼠标右键单击 | 拖动与显示宽度对应百分比的文件进行播放 |
v | 循环切换视频流 | 鼠标左键双击 | 全屏切换 |
9、ffplay命令-主要选项
选项 | 说明 |
-x width | 强制显示宽带。 |
-y height | 强制显示高度。 |
-video_size size | 帧尺寸 设置显示帧存储(WxH格式),仅适用于类似原始YUV等没有包含帧大小(WxH)的视频。 比如: ffplay -pixel_format yuv420p -video_size 320x240 -framerate 5 yuv420p_320x240.yuv |
-pixel_format format | 格式设置像素格式 |
-fs | 以全屏模式启动 |
-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选项 |
-bytes | 按字节进行定位拖动(0=off 1=on -1=auto) |
-seek_interval interval | 自定义左/右键定位拖动间隔(以秒为单位),默认值为10秒 |
-nodisp | 关闭图形化显示窗口,视频将不显示 |
-noborder | 无边框窗口 |
-volume vol | 设置起始音量。音量范围[0 ~100] |
-f fmt | 强制使用设置的格式进行解析。比如-f s16le |
-window_title title | 设置窗口标题(默认为输入文件名) |
-loop number | 设置播放循环次数 |
-showmode mode | 设置显示模式,可用的模式值:0 显示视频,1 显示音频波形,2 显示音频频谱。缺省为0,如果视频不存在则自动选择2 |
-vf filtergraph | 设置视频滤镜 |
-af filtergraph | 设置音频滤镜 |
10、ffplay命令-高级选项
选项 | 说明 |
-stats | 打印多个回放统计信息,包括显示流持续时间,编解码器参数,流中的当前位置,以及音频/视频同步差值。默认情况下处于启用状态,要显式禁用它则需要指定-nostats。。 |
-fast | 非标准化规范的多媒体兼容优化 |
-genpts | 生成pts |
-sync type | 同步类型 将主时钟设置为audio(type=audio),video(type=video)或external(type=ext),默认是audio为主时钟。 |
-ast audio_stream_specifier | 指定音频流索引,比如-ast 3,播放流索引为3的音频流 |
-vst video_stream_specifier | 指定视频流索引,比如-vst 4,播放流索引为4的视频流 |
-sst subtitle_stream_specifier | 指定字幕流索引,比如-sst 5,播放流索引为5的字幕流 |
-autoexit | 视频播放完毕后退出。 |
-exitonkeydown | 键盘按下任何键退出播放 |
-exitonmousedown | 鼠标按下任何键退出播放 |
-codec:media_specifier codec_name | 强制使用设置的多媒体解码器,media_specifier可用值为a(音频), v(视频)和s字幕。比如-codec:v h264_qsv 强制视频采用h264_qsv解码 |
-acodec codec_name | 强制使用设置的音频解码器进行音频解码 |
-vcodec codec_name | 强制使用设置的视频解码器进行视频解码 |
-scodec codec_name | 强制使用设置的字幕解码器进行字幕解码 |
-autorotate | 根据文件元数据自动旋转视频。值为0或1 ,默认为1 |
-framedrop | 如果视频不同步则丢弃视频帧。当主时钟非视频时钟时默认开启。若需禁用则使用 -noframedrop |
-infbuf | 不限制输入缓冲区大小。尽可能快地从输入中读取尽可能多的数据。播放实时流时默认启用,如果未及时读取数据,则可能会丢弃数据。此选项将不限制缓冲区的大小。若需禁用则使用-noinfbuf |
11、在Mac OS上使用ffmpeg
进行视频录制——录制的是桌面
ffmpeg -f avfoundation -i 1 -r 30 -s 1280x720 -vcodec libx264 output.mp4
参数解释:
-
-f avfoundation
: 指定输入设备为avfoundation
,这是Mac特有的。 -
-i 1
:1
通常是内置摄像头的设备索引。 -
-r 30
: 录制的帧率为30帧/秒。 -
-s 1280x720
: 录制的视频分辨率为1280像素宽和720像素高。 -
-vcodec libx264
: 使用H.264编码。 -
output.mp4
: 输出文件的名称。
12、在Mac OS上使用ffmpeg
进行视频录制——使用摄像头录制
ffmpeg -f avfoundation -framerate 30 -video_size 1280x720 -i "0:0" -c:v libx264 -preset veryfast -crf 23 -pix_fmt yuv420p
13、在Mac OS上使用ffmpeg
进行音频录制
ffmpeg -f avfoundation -i "1:0" -acodec libmp3lame -ac 2 -ar 44100 -y output.mp3
参数解释:
-
-f avfoundation
: 指定使用Mac OS的AVFoundation来获取输入。 -
-i "1:0"
: 指定输入设备。这里的 "1:0" 表示系统的默认音频输入设备。 -
-acodec libmp3lame
: 指定音频编码器使用libmp3lame(MP3)。 -
-ac 2
: 设置音频通道数为2(立体声)。 -
-ar 44100
: 设置采样率为44100Hz。 -
-y output.mp3
: 输出文件名,并且使用该选项将覆盖已存在的文件。
14、在Mac OS上使用ffmpeg
进行音视频录制
ffmpeg -f avfoundation -framerate 30 -video_size 1280x720 -i "0:0" -c:v libx264 -preset veryfast -crf 23 -pix_fmt yuv420p -c:a aac -b:a 160k -ac 2 -ar 44100 output.mp4
参数解释:
-f avfoundation
指定使用 macOS 的 AVFoundation 框架来捕获输入。-framerate 30
设置捕获帧率为 30 FPS。-video_size 1280x720
设置视频分辨率为 1280x720。-i "0:0"
指定输入设备,"0:0"
通常代表第一个视频设备(通常是内置的摄像头),同时 FFmpeg 会尝试从这个设备捕获音频(如果可用)。-c:v libx264
指定视频编码器为 libx264。-preset veryfast
和-crf 23
是 libx264 编码器的选项,用于控制编码速度和输出质量。-pix_fmt yuv420p
设置像素格式为 yuv420p,这对于与大多数播放器和设备兼容很重要。-c:a aac
指定音频编码器为 AAC。-b:a 160k
设置音频比特率为 160 kbps。-ac 2
和-ar 44100
分别设置音频通道数为 2(立体声)和采样率为 44100 Hz。output.mp4
是输出文件的名称。
15、在Mac OS上使用ffmpeg查询音频和视频录制可用设备
ffmpeg -f avfoundation -list_devices true -i ""
16、视频裁剪
变量 | 用于ow和oh参数的表达式中的可用变量 |
x, y | 对x的计算值(从左上角水平方向的像素个数)和y(垂直像素的数量),对每个帧进行评估,x的默认值为(iw - ow)/2, y的默认值为(ih - oh)/2 |
in_w, iw | 输入的宽度 |
in_h, ih | 输入的高度 |
out_w, ow | 输出(裁剪)宽度,默认值= iw |
out_h, oh | 输出(裁剪)高度,默认值= ih |
a | 纵横比,与iw/ih相同 |
sar | 输入样本比例 |
dar | 输入显示宽比,等于表达式a*sar |
hsub, vsub | 水平和垂直的色度子样本值,对于像素格式yuv422p, hsub的值为2,vsub为1 |
n | 输入帧的数目,从0开始 |
pos | 位置在输入框的文件中,如果不知道NAN |
t | 时间戳以秒表示,如果输入时间戳未知 |
17、FFmpeg滤镜Filter内置变量
变量 | 说明 |
t | 以秒表示的时间戳,如果输入的时间是未知的则是NAN |
n | 输入帧的顺序编号,从0开始 |
pos | 输入帧的位置,如果未知的则是NAN |
w | 输入视频帧的宽度 |
h | 输入视频帧的高度 |
18、添加水印
(1)文字水印
参数 | 类型 | 说明 |
text | 字符串 | 文字 |
textfile | 字符串 | 文字文件 |
box | 布尔 | 文字区域背景框(缺省false) |
boxcolor | 色彩 | 展示字体区域块的颜色 |
font | 字符串 | 字体名称(默认为Sans字体) |
fontsize | 整数 | 显示字体的大小 |
x | 字符串 | 缺省为0 |
y | 字符串 | 缺省为0 |
alpha | 浮点数 | 透明度(默认为1),值从0~1 |
(2)图片水印
参数 | 类型 | 说明 |
filename | 字符串 | 输入的文件名,可以是文件,协议,设备 |
format_name, f | 字符串 | 输入的封装格式 |
stream_index, si | 整数 | 输入的流索引编号 |
seek_point, sp | 浮点数 | Seek输入流的时间位置 |
streams, s | 字符串 | 输入的多个流的流信息 |
loop | 整数 | 循环次数 |
discontinuity | 时间差值 | 支持跳动的时间戳差值 |
(3)FFmpeg生成画中画
参数 | 类型 | 说明 |
x | 字符串 | X坐标 |
y | 字符串 | Y坐标 |
eof_action | 整数 | 遇到eof表示时的处理方式,默认为重复 Ø repeat(值为0):重复前一帧 Ø endcall(值为1):停止所有的流 Ø pass(值为2):保留主图层 |
shortest | 布尔 | 终止最短的视频时全部终止(默认false) |
format | 整数 | 设置output的像素格式,默认为yuv420 Ø yuv420 (值为0) Ø yuv422 (值为1) Ø yuv444 (值为2) Ø rgb (值为3) |
(4)FFmpeg视频多宫格处理
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" out.mp4