跳至主要內容

ffmpeg 的使用

牧歌...大约 6 分钟

ffmpeg 的使用

基础知识

容器/文件(Conainer/File):特定格式的多媒体文件,比如mp4、flv、mkv等

流媒体(Stream):表示时间轴上的一段连续数据,如一段声音数据、一段视频数据或者一段字幕数据,可以是压缩的、也可以是非压缩的,压缩的数据需要关联特定的解码器。

数据帧/数据包(Frame/Packet):通常,一个媒体流是由大量的数据帧组成的,对于压缩数据,帧对应着编解码器的最小处理单元,分属于不同媒体流的数据帧交错存储于容器之中。 Frame对应压缩前的数据,Packet对应压缩后的数据

编解码器(Codec):以帧为单位实现压缩数据和原始数据之间的相互转换的工具

复用(mux):把不同的流按照某种容器的规则放入容器,这种行为叫做复用

解复用(demux):把不同的流从某种容器中解析出来,这种行为叫解复用

码率和帧率:视频文件的最重要的基本特征,对于他们的特有设置会决定视频质量。如果知道码率和时长那么可以很容易计算出输出文件的大小。 帧率:也称帧频率,帧率是视频文件中每一秒的帧数,肉眼想要看到连续移动图像至少需要15帧 码率:也称比特率、数据率,是一个确定整体视频/音频质量的参数,秒为单位处理的字节数,码率和视频质量成正比,在视频文件中比特率用 bps 来表达

FFmpeg官网:http://www.ffmpeg.org FFmpeg doc:http://www.ffmpeg.org/documentation.html FFmpge wiki:https://trac.ffmpeg.org/wiki

安装ffmpge在win上

  1. 下载
  2. 安装
  3. 将安装路径的 /bin 添加带环境变量
  4. 使用 cmd 测试一下 ffmpeg -version

包含工具

ffmeg

超快音频编辑器(Hyper fast Audio and Video encoder),类似爱剪辑

image.png
image.png
# 帮助手册有3种
ffmpeg -h
ffmpeg -h long
ffmpeg -h full

ffplay

简单媒体播放器(Simple media player)

# 帮助文档就一个
ffplay -h

ffprobe

简单多媒体流分析器(Simple multimedia streams analyzer)

常用命令

查看具体分类所支持的参数

# type 是分类 name 是分类下的具体选项
ffmpeg -h type=name

# 例如
ffmpeg -h muxer=flv
ffmpeg -h filter=atempo # atempo是调整音频播放速率选项
ffmpeg -h encoder=libx264

ffplay播放控制

选项说明选项说明
q,ESC退出播放t循环切换字幕流
f全屏切换c循环切换节目
p,SPC暂停w循环切换过滤器或显示模式
m静音切换s逐帧播放
9,09减小音量,0增加音量left/right向后/向前拖动10秒
/,*/减少音量,*增加音量down/up向后/向前拖动1分钟
a循环切换音频流鼠标右键单击拖动与显示宽度对应百分比的文件进行播放
v循环切换视频流鼠标左键双击全屏切换
-x width #强制显示宽
-y height #强制显示高
-video_size size #帧尺寸 设置显示帧存储(WxH格式),仅适用于类似原始YUV等没有包含帧大小的视频
-pixel_format format # 格式,设置像素格式
-fs # 以全屏模式启动
-an # 禁用音频(不播放声音)
-vn # 禁用视频(不播放视频)
-sn # 禁用字幕(不播放字幕)
-ss pos # 根据设置的秒进行定位拖动,时间单位。
-t duration # 设置播放视频/音频长度,时间单位与 -ss 一致
-autoexit # 视频播放完毕退出

# 例如
ffplay -x 200 -y 50 -video_size 320*240 -pixel_format yuv420p -fs -an -vn -sn -ss 335  -t 10 test_120*720.mp4
-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
-inbuf # 不限制输入缓冲区大小。尽可能快地从输入中读取尽可能多的数据。播放实时流默认启用,
# 如果未及时读取数据,则可能会丢弃数据。如果需要禁用使用-noinfbuf

ffplay rtmp://ip:端口/地址 # 播放网络流

简单过滤器

ffplay -i test.mp4 -vf transpose=1 # 视频旋转
ffplay test.mp4 -vf hflip # 视频反转
ffplay test.mp4 -vf vflip # 视频反转
ffplay test.mp4 -vf hflip,transpose=1 # 视频旋转和反转
ffplay -i test.mp4 -af atempo=2 # 音频变速播放
ffplay -i test.mp4 -vf setpts=PTS/2 # 视频变速播放
ffplay -i test.mp4 -vf setpts=PTS/2 -af atempo=2 # 可以调整音视频同时变速

ffmpeg主要参数

-i 设定输入流
-f 设定输出格式(format
-ss 开始时间
-t 时间长度

ffmpeg视频参数

-vframees 设置要输出的视频帧数
-b 设定视频码率
-b:v 视频码率
-r 设定帧速率
-s 设定画面的宽与高
-vn 不处理视频
-aspect aspect 设置横纵比 4:3 16:9 或 1.333 1.777
-vcodec 设定视频编码解码器,如果用copy表示原始编解码数据必须被拷贝
-vf 视频过滤器

ffmpeg音频参数

-aframes 设置要输出的音频帧数
-b:a 音频码率
-ar 设定采样率
-ac 设定声音Channel 数
-acodec 设定声音编解码器,如果用copy表示原始编码数据必须被拷贝
-an 不处理音频
-af 音频过滤器

-c 是 -codec 的简写

不是 rtmp 谨慎使用 -v copy ,有可能转换格式不支持

拉流推流的使用

2_转发海康摄像头视频流

裁剪

image.png|650
image.png|650
# 裁剪视频的左侧三分之一示例。输入也可以换成视频
ffmpeg -i input.jpg -vf crop=iw/3:ih:0:0 out.jpg

# 中间的三分之示例
ffmpeg -i input.jpg -vf crop=iw/3:ih:iw/3:0 out.jpg

水印

文字水印

text 文字
textfile 文字文件
box 文字文件
boxcolor 字体区域的颜色
font 字体名称
fontsize 字体大小
x 缺省为0
y 缺省为0
alpha 透明度默认1,值0-1
enable 布尔 是否开启

# 示例:跑马灯 3秒显示一次
ffplay -i input.mp4 -vf "drawtext=fontsize=40:fontfile=FreeSerif.ttf:text='跑马灯':x=mod(50*t\,w):y=abs(sin(t))*h*0.7:alpha=0.5:fontcolor=whit:enable=lt(mod(t\,3)\,1)"


图片水印

内置变量

image.png|690
image.png|690
# 距离左侧和顶部各10像素
ffmpeg -i input.mp4 -vf "movie=log.png[watermark];[in][watermark]overlay=10:10[out]" output.mp4

画中画

画中画效果|690
画中画效果|690

多宫格

这效果多倍快了效果呀|690
这效果多倍快了效果呀|690
上次编辑于:
贡献者: Owen
评论
  • 按正序
  • 按倒序
  • 按热度