-
列出支持多设备(mac平台)
ffmpeg -f avfoundation -list_devices true -i ""
-
列出支持的编解码格式
ffmpeg -encoders
ffmpeg -decoders
-
查看filter
ffmpeg -filters
ffmpeg -h filter=<filter>
-
录制屏幕保存为h264格式
ffmpeg -f avfoundation -i 1 -c:v libx264 -r 15 xx.h264
-
捕获音频
ffmpeg -f avfoundation -i :1 -acodec aac xx.aac
-
同时捕获视频和音频
ffmpeg -f avfoundation -i 2 -f avfoundation -i :1 -pix_fmt yuv420p -ar 48000 -vcodec libx264 -crf 23 -preset veryslow -x264opts b-adapt=2:bframes=0:aq-strength=1:psy-rd=0.8,0 -vsync vfr -acodec aac -bsf:a aac_adtstoasc xx.mp4
两个-i分别指定视频和音频,冒号后面的表示音频,数字代表设备编号 -
封装格式转换
ffmpeg -i xx.mp4 -acodec copy -vcodec copy xx.flv
-
抽取视频
ffmpeg -i xx.mp4 -an -vcodec copy xx.h264
-
抽取音频
ffmpeg -i xx.mp4 -acodec copy -vn xx.aac
-
抽取音频转mp3
ffmpeg -i xx.mp4 -vn -acodec libmp3lame -ab 200k xx.mp3
-ab
指定输出码率,否则会使用默认码率 -
提取yuv
ffmpeg -i xx.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv
-
提取pcm
ffmpeg -i xx.mp4 -vn -ar 44100 -ac2 -f s16le out.pcm
-
pcm转wav
ffmpeg -f s16be -ar 48000 -ac 2 -acodec pcm_s16be -i input.raw output.wav
-
查看每一帧的信息
ffprob -show_frames
-
播放yuv
ffplay -f rawvideo -video_size 1920x1080 -pix_fmt yuv420p out.yuv
-
播放pcm
ffplay -f s16le -ac 1 -ar 48000 out.pcm
-
aac转mp3
ffmpeg -i xx.aac -acodec mp3 xx.mp3
-
更改视频帧率,码率
ffmpeg -i xx.mp4 -vf fps=fps=15 -b:v 500K -b:a 128K yy.mp4
-vf fps=fps=15 设置帧率
-b:v 设置视频比特率
-b:a 设置音频比特率
-
视频旋转
ffmpeg -i in.mp4 -metadata:s:v rotate="90" -codec copy out.mp4
-
修改分辨率
ffmpeg -i in.mp4 -strict -2 -vf scale=-1:480 out.mp4
-1表示保持比例 -
剪切视频
ffmpeg -ss 00:00:00 -t 00:00:30 -i xx.mp4 yy.mp4
-ss 指定从什么时间开始
-t 指定需要截取多长时间
剪切时间可能不精确,和关键帧有关,精确剪切将-i参数放在-ss之前即可,或者
ffmpeg -y -ss start -t duration -accurate_seek -i input.mp4 -codec copy -avoid_negative_ts 1 output.mp4
-
视频倍速播放
ffmpeg -i input.mp4 -r 120 -filter:v "setpts=0.25*PTS" output.mp4
-r指定输出帧率,避免丢帧 -
视频慢速播放
ffmpeg -i input.mp4 -filter:v "setpts=2.0*PTS" output.mp4
-
音频倍速播放与慢速播放
ffmpeg -i input.mp4 -filter:"atempo = 2.0" -vn output.mp4
atempo filter 配置区间在0.5和2.0之间,如果需要更高倍,可以使用多个 atempo filter 串在一起来实现,下面是实现4倍的参考
ffmpeg -i input.mp4 -filter:"atempo=2.0,atempo=2.0" -vn output.mp4
-
音视频同时倍速播放
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4
-
视频合并
ffmpeg -f concat -i list.txt -c copy out.mp4
list.txt为需要合并到视频文件列表,内容格式
file ./split1.mp4
file ./split2.mp4
-
推流
ffmpeg -re -stream_loop -1 -i xx.mp4 -vcodec copy -acodec copy -b:v 800k -b:a 32k -f flv rtmp://10.1.101.16/live
-stream_loop 指定循环次数,-1为无限循环
-
rtmp数据保存文件
ffmpeg -i rtmp://server/live/streamName -c copy out.flv
-
左右翻转视频
ffmpeg -i in.avi -vf "vflip" out.avi
-
上下翻转视频
ffmpeg -i in.avi -vf "hflip" out.avi
-
插入sei
ffmpeg -i xx.h264 -c:v copy -bsf:v h264_metadata=sei_user_data='086f3693-b7b3-4f2c-9653-21492feee5b8+hello' xx.sei.h264
-
添加图片水印
左下角
ffmpeg -i input.mp4 -i logo.png -filter_complex 'overlay=x=10:y=main_h-overlay_h-10' output.mp4
main_w:视频宽度
overlay_w: 要添加的图片水印宽度
main_h : 视频高度
overlay_h:要添加的图片水印宽度
视频左上角的坐标为0:0,overlay参数指定的图片左上角在视频中的坐标位置 -
播放纯音频减少延时
ffplay -i rtmp://10.1.101.12:1936/live/666 -analyzeduration 1000000
analyzeduration
单位是微妙 -
生成静音数据
ffmpeg -f lavfi -t 10 -i anullsrc test.aac
设置参数anullsrc=r=48000:cl=mono
r: sample_rate
cl: channel_layout
主要参数
下表中:
<>
内的参数表示由用户具体指定;[]
内的表示是可选参数,可以指定也可以省略。- 括号内的
i
表示该参数用于输入流,o
表示用于输出流,i/o
表示均可,global
表示全局参数。 - 关键字
duration
,position
或offset
满足:[-][HH:]MM:SS[.m...]
这种时间戳格式。或者以秒为单位的SS[.m...]
格式。
常用的如下:
-b[:stream_specifier] (o)
:输出比特率-f <fmt> (i/o)
:指定 fmt 作为输入或输出的视频格式。一般会根据文件扩展名自动选择,但有时需要手动指定-i <filename> (i)
:指定 filename 作为源文件-y (global)
:文件存在时直接覆盖。-n (global)
:文件存在时不覆盖并立即退出。-bsf[:stream_specifier] <bitstream_filters> (o)
:设置比特流滤镜。bitstream_filters 是一个逗号分隔的滤镜列表。-stream_loop <num> (i)
:指定输入流的循环次数。0 表示不循环,-1 表示无限循环。-c[:stream_specifier] <codec> (i/o)
:-c可写为-codec。选择一个 codec ,即编码器(输出时)或一个解码器(输入时),参与到 stream_specifier 指定的一个或多个流的编码/解码中。在输出时, 可以被指定为 copy,表示复制数据流。-t <duration> (i/o)
:(在参数 -i 之前指定)工作持续 duration 时长。一般用于指定剪辑数据流的范围。 它与 -to 参数相互冲突,但本参数优先。-to <position> (o)
:到 position 位置后,终止输出。与 -t 参数冲突,本参数优先级低。-fs <limit_size> (o)
:输出文件大小达到 limit_size 后停止输出,单位是 byte.-ss <position> (i/o)
:(在参数 -i 之前指定)从 position 指定的位置开始工作。注意:大多数情形下,工作起始位置是不精确的。ffmpeg会找到其前部的一个点作为真正的起始,并在结束工作后将该点与用户指定点之间的内容抛弃。然而,如果你使用了 copy 参数,这部分内容却会被保留。-sseof <position> (i/o)
:类似-ss
参数,只不过是从数据流末端向前寻找 position。此时0
表示数据流末。-itsoffset <offset> (i)
:指定输入流以原时间戳加上offset
作为其输入时间戳。-metadata[:metadata_specifier] key=value (o)
:以键值对的形式设置元数据。-frames[:stream_specifier] <num> (o)
:在输出num
帧后停止写入。-qscale[:stream_specifier] q (o)
:使用固定质量(VBR)。stats (global)
:输出编码过程,是系统默认值。可以使用 -nostats 关闭。-attach <filename> (o)
:将 filename 文件附加到输出文件。附件流作为文件的最后一个流,只有很少的文件类型被支持(例如字体)。
视频参数
-vframes <num>
:文件的总帧数。-frames:v 的别名。-r[:steam_specifier] <fps> (i/o)
:文件的帧率。-s[:steam_specifier] <size> (i/o)
:帧尺寸。参数size
需要满足格式<width>x<height>
,例如320x240。-aspect[:steam_specifier] <asp> (o)
:宽高比,例如4:3
。如果使用了-vcodec copy
,那么指定容器的宽高比而不是视频的。-vn (o)
:禁止输出视频。-vcodec <codec> (o)
:设置视频编码器。-codec:v
的别名。-pass[:stream_specifier] <n>
:选择当前编码数(1或者2),常用于二次编码的情况。在第一次编码中,音频输出往往被设置为 NULL,对于 Windows 与 Unix 系统分别是:
ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL
ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null
音频参数
-aframes <num> (o)
:文件的总帧数。-frames:a
的别名。-ar[:stream_specifier] <freq> (i/o)
:采样率。默认输出等于输入。仅当输入文件为真实设备或者 raw 数据时,该参数才能用于输入过程。-aq <q> (o)
:音频品质(VBR)。-q:a
的别名。-ac[:stream_specifier] <channel> (i/o)
:设置音频通道数。默认输出等于输入。仅当输入文件为真实设备或者 raw 数据时,该参数才能用于输入过程。-an (o)
:禁止输出音频。-acode <codec> (i/o)
:设置音频的解码器或编码器。-codec:a
的别名。
字幕参数
-scodec <codec> (i/o)
:字幕解码器或编码器。-codec:s
的别名。-sn (o)
:禁止输出字幕。-canvas_size <size>
:设置字幕渲染区域的尺寸。
其他参数
以下直接在 ffmpeg 后使用,例如:ffmpeg -version
。
-bsfs
:可用的比特流滤镜。-h [arg]
:帮助。arg 的内容可以是:decoders
:可用的解码器。或特指:decoder=<name>
。encoders
:可用的编码器。或特指:encoder=<name>
。filters
:所有滤镜。或特指:filter=<name>
。formats
:可用的分流器与混流器。或特指分流器:demuxer=<name>
,或特指混流器:muxer=<name>
。
-protocols
:支持的协议。-version
:版本信息。