FFmpeg个人使用指南
FFmpeg
- 定义
- 视频转换
- 编码/格式转换
- 提取音频
- 提取视频
- 提取视频ES信息
- 截取视频/图像
- 截存图片
- 图片(序列帧)转视频
- 截取片段
- 合并视频
- 合并为.mkv文件
- 使用过滤器
- 过滤器图 (Link Label)
- 视频过滤器
- 音频过滤器
- 过滤器链 (Filterchain)
- 过滤器图 (Filtergraph)
- 实例
- 选择媒体流
- 缩减文件体积
- 动态设置分辨率
- 设置帧率
- 设置码率
- 添加/去除图片
- 去除图片
- m3u8切片
- 其他
- -Help
定义
程序 | 功能 |
---|---|
libavformat |
用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能,包含demuxers 和muxer 库;
|
libavcodec | 用于各种类型声音/图像编解码; |
libavutil | 包含一些公共的工具函数; |
libswscale | 用于视频场景比例缩放、色彩映射转换; |
libpostproc | 用于后期效果处理; |
ffmpeg | 是一个命令行工具,用来对视频文件转换格式,也支持对电视卡实时编码; |
ffsever | 是一个HTTP多媒体实时广播流服务器,支持时光平移; |
ffplay | 是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示; |
程序 | 功能 |
---|---|
容器 (Container) |
容器就是一种文件格式,比如.flv ,.mkv 等。包含下面5种流以及文件头信息。
|
流 (Stream) |
是一种视频数据信息的传输方式,包括音频 (audio),视频 (video),字幕 (subtitle),附件 (attachment),数据 (data)。
|
帧 (Frame) |
帧代表一幅静止的图像,分为I帧 ,P帧 ,B帧 。
|
编解码器 (Codec) |
是对视频进行压缩或者解压缩,CODEC =COde (编码) +DECode (解码)
|
复用/解复用 (mux/demux) |
把不同的流按照某种容器的规则放入容器,这种行为叫做复用 (mux) ;把不同的流从某种容器中解析出来,这种行为叫做解复用 (demux) .
|
视频转换
ffmpeg -i input.avi output.mp4
ffmpeg -i input.mp4 output.ts
.avi文件想转为.mp4,或者.mp4想转为.ts。
ffmpeg -i input.avi -vcodec libx264 output.mp4
指定解码方式,[编码/格式转换
ffmpeg -i "http://www.***.com/input.avi" -y -vcodec libx264 output.mp4
获取在线视频,自动下载并且转码并保存
该方式需要带上-y
(按顺序读取)
编码/格式转换
ffmpeg -i input.mp4 -vcodec h264 output.mp4
ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4
视频编码是MPEG4或H264转换成 H264 或 MPEG4 编码
ffmpeg -i input.mp4 -c:v libx265 output.mp4
ffmpeg -i input.mp4 -c:v libx264 output.mp4
或者用外部编码器 x265 或者 x264 来编码
提取音频
ffmpeg -i test.mp4 -acodec copy -vn output.aac
变量名 | 含义 |
---|---|
copy | 保留输入格式 |
默认输出.mp4的Audio Codec是.aac,如果不是,可以转为最常见的.aac
ffmpeg -i test.mp4 -acodec aac -vn output.aac
提取视频
ffmpeg -i input.mp4 -vcodec copy -an output.mp4
提取视频ES信息
ffmpeg –i input.mp4 –vcodec copy –an –f m4v output.h264
截取视频/图像
截存图片
ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic.jpg
将input.mp4间隔 每1秒截取1帧
变量名 | 含义 |
---|---|
-r |
帧率(/秒),效果和-vf fps 一样
|
-q:v | 表示存储.jpg的图像质量,一般2是高质量。 |
ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-1.jpg
从input.mp4的 第20秒开始 接下来10秒,间隔 每1秒截取1帧
变量名 | 含义 |
---|---|
-ss | 开始时间(/秒) |
-t | 持续时间(/秒) |
ffmpeg -i input.mp4 output.%d.jpg
截取视频文件所有帧,导出成以数字编号命名的jpg
图片(序列帧)转视频
ffmpeg -i input.mp3 -i input.%3d.jpg -s 1920x1080 -vcodec mpeg4 output.avi
把以 数字编号 结尾的 序列帧 和 音频文件 利用 MPEG4编码 合成 HD分辨率 视频文件。(注:图片要放在同一个文件夹下)
变量名 | 含义 |
---|---|
%3d | 匹配数字 |
-s | 分辨率 (Scale) |
-author | 作者署名? |
截取片段
ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4
从 第15秒开始,截取5秒钟 。
-vcodec copy -acodec copy
写成-c:v copy -c:a copy
也可以?
合并视频
ffmpeg -i input.mp4 -i input.srt -c copy -c:s mov_text output.mp4
合并 视频input.mp4 和 字幕input.srt 为 文件output.mp4
变量名 | 含义 |
---|---|
-i | 输入文件 (Input) |
-c copy
-c:s mov_text
的顺序不可以改变,
或者使用完整表达-c:v copy
-c:a copy
-c:s mov_text
合并为.mkv文件
使用上述命令合并为Matroska格式 (.mkv)的文件会出现Subtitle codec 94213 is not supported
的报错,改为
ffmpeg -i input.mkv -i input.srt -c copy -c:s srt output.mkv
ffmpeg -i "input.mp4" -lavfi "subtitles=input.srt:force_style=''" -crf 1 -c:a copy "output.mp4"
变量名 | 含义 |
---|---|
Name | 风格 (Style) 的名称。区分大小写。不能包含逗号 |
Fontname | 使用的字体名称,区分大小写 |
Fontsize | 字体的字号 |
PrimaryColour |
设置(字体)主要颜色 (BBGGRR )。
|
SecondaryColour |
设置次要颜色 (BBGGRR )。注:在卡拉OK效果 中由次要颜色 变为主要颜色
|
OutlineColour |
设置轮廓颜色 (BBGGRR )
|
BackColour |
设置阴影颜色 (BBGGRR )。ASS的这些字段还包含了Alpha通道 信息。(AABBGGRR ),注:ASS的颜色代码要在前面加上&H
|
Bold |
-1 : 粗体;0 : 常规
|
Italic |
-1 : 斜体;0 : 常规
|
Underline |
-1 : 下划线;0 : 常规
|
Strikeout |
-1 : 中划线;0 : 删除线
|
ScaleX | 修改文字的宽度 (%) |
ScaleY | 修改文字的高度 (%) |
Spacing | 文字间的额外间隙 (pixel) |
Angle |
按Z轴 进行旋转的度数,由Alignment 进行了定义原点
|
BorderStyle |
1 : 边框+阴影;3 : 纯色背景。当BorderStyle =3 时,文字下方为轮廓颜色的背景,最下方为阴影颜色背景
|
Outline |
当BorderStyle =1 时,该值定义文字轮廓宽度,为像素数,常见有0,1,2,3,4
|
Shadow |
当BorderStyle =1 时,该值定义阴影的深度,为像素数,常见有0,1,2,3,4
|
Alignment | 定义字幕的位置 |
MarginL | ←字幕可出现区域与左边缘的水平距离 (pixel) |
MarginR | 字幕可出现区域与右边缘的水平距离 (pixel)→ |
MarginV | 字幕可出现区域与下边缘的垂直距离 (pixel)↓ |
使用过滤器
在处理中,过滤器 (Filter)的意思是被编码到输出文件之前用来修改输入文件内容的工具。如:视频翻转,旋转,缩放等。
[input_link_label1][input_link_label2]… filter_name=parameters [output_link_label1][output_link_label2]…
过滤器图 (Link Label)
变量名 | 含义 |
---|---|
过滤器图 (Link Label) | 标记过滤器的输入或输出的名称 |
-vf | 视频过滤器 |
-af | 音频过滤器 |
视频过滤器
变量名 | 含义 |
---|---|
transpose |
旋转,当transpose =1 时,按顺时针方向旋转90°
|
hflip | 左右翻转 |
音频过滤器
变量名 | 含义 |
---|---|
atempo |
音频播放倍数,>1 时加速,<1 时倍速,比如:0.5 时是原始速度的50%
|
过滤器链 (Filterchain)
filter
1
, filter2
, filter3
, …filterN-2
, filterN-1
, filterN
逗号隔开
过滤器图 (Filtergraph)
filterchain
1
;filterchain2
;…filterchainN-1
;filterchainN
实例
ffplay -f lavfi -i testsrc -vf split[a][b];[a]pad=2*iw[1];[b]hflip[2];[1][2]overlay=w
split
过滤器创建两个输入文件的拷贝并标记为[a]
,[b]
[a]
作为pad
过滤器的输入,pad过滤器产生2倍宽度并输出到[1][b]
作为hflip
过滤器的输入,vflip过滤器水平翻转视频并输出到[2]- 用
overlay
过滤器把[2]
覆盖到[1]
的旁边
分号隔开
选择媒体流
-map file_number:stream_type[:stream_number]
变量名 | 含义 |
---|---|
-map 0 | 选择第一个文件的所有流 |
-map i:v | 从文件序号i (Index) 中获取(所有)视频流 |
-map i:a | 获取(所有)音频流 |
-map i:s | 获取(所有)字幕流 |
-an | 排除所有音频流 |
-vn | 排除所有视频流 |
-sn | 排除所有字幕流 |
- | - |
---|---|
第1个视频流 |
0:v:0
|
第1个音频流 |
0:a:0
|
第1个字幕流 |
0:s:0
|
缩减文件体积
ffmpeg -i input.mp4 -fs 1024K output.mp4
输出大小 1M 的视频
变量名 | 含义 |
---|---|
-fs | 控制文件体积 (File Size)(/Kb) |
计算公式
文件体积 (Kb)
=(视频码率
+音频码率
)×时长
÷8
视频码率
是视频数据(视频色彩量、亮度量、像素量)每秒输出的位数。一般用的单位是kbps。
动态设置分辨率
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
将 HD 分辨率缩小到 SD 输出
ffmpeg -i input.mp4 -vf scale=1280:-1 output.mp4
-1为动态判断,输出时保持原始的宽高比
设置帧率
变量名 | 含义 |
---|---|
-r | 帧率 (Frame Rate)(/秒) |
-vf fps=fps= | fps (Frames Per Second) |
-r 29.97
-r 30000/1001
-r netsc
具有相同效果
设置码率
计算公式
码率Bitrate
=文件体积File Size
÷时长Duration
变量名 | 含义 |
---|---|
-b | 码率 |
-b:a | 音频平均码率 |
-b:v | 视频平均码率 |
-bufsize | 设置码率控制缓冲器 |
-minrate | 控制最低码率 |
-maxrate | 控制最高码率 |
ffmpeg -i input.mp4 -b:v 2500k output.mp4
输出 平均码率2500k 的视频
ffmpeg -i input.mp4 -b:v 2500k -bufsize 2500k output.mp4
官方文档建议设置-b:v
时,同时加上-bufsize
让整体码率更趋近于指定值,减少波动。
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4
希望码率波动不要超过阈值,比如:码率最大值不要超过2500k
添加/去除图片
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay output.mp4
为视频添加图片
变量名 | 含义 |
---|---|
overlay | 图片位置,以左上角为坐标原点 |
w:h | 图片的宽和高 |
W:H | 视频的宽和高 |
overlay=W-w | 图片位于右上角↗ |
overlay=0:H-h | 图片位于左下角↙ |
overlay=W-w:H-h | 图片位于右下角↘ |
去除图片
简单来说就是在图标上面盖一张图片
-vf delogo=x:y:w:h[:t[:show]]
变量名 | 含义 |
---|---|
x:y | 以左上角为原点的坐标 |
w:h | 图片的宽和高 |
t | 矩形边缘的厚度,默认值4 |
show | 若设置为1有一个绿色的矩形,默认值0 |
m3u8切片
ffmpeg -i input.ts -c copy -map 0 -f segment -segment_list index.m3u8 -segment_time 5 title-%03d.ts
ffmpeg -i input.mp4 -c copy hls_list_size 0 hls_time 5 output.m3u8
变量名 | 含义 |
---|---|
-segment_time | 切片 (Segment),进行文件切片操作间隔时间(/秒) |
hls_list_size | 目录文件index中需要播放的文件数量,0表示整个视频 |
hls_time | 每个切片文件持续时间 |
其他
名称 | 视频大小 | 分辨率 |
---|---|---|
UHD (4K) | 2160p | 3840×2160 pixels |
2K | 1440p | 2560×1440 pixels |
HD | 1080p | 1920×1080 pixels |
SD | 720p | 1280×720 pixels |
480p | 720×480 pixels |
-Help
变量名 | 含义 |
---|---|
-h | – print basic options |
-h long | – print more options |
-h full | – print all options (including all format and codec specific options, very long) |
-h type=name | – print all options for the named decoder/encoder/demuxer/muxer/filter/bsf |
See man ffmpeg for detailed description of the options.
Print help / information / capabilities:
变量名 | 含义 |
---|---|
-L | show license |
-h topic | show help |
-? topic | show help |
-help topic | show help |
–help topic | show help |
-version | show version |
-buildconf | show build configuration |
-formats | show available formats |
-muxers | show available muxers |
-demuxers | show available demuxers |
-devices | show available devices |
-codecs | show available codecs |
-decoders | show available decoders |
-encoders | show available encoders |
-bsfs | show available bit stream filters |
-protocols | show available protocols |
-filters | show available filters |
-pix_fmts | show available pixel formats |
-layouts | show standard channel layouts |
-sample_fmts | show available audio sample formats |
-colors | show available color names |
-sources device | list sources of the input device |
-sinks device | list sinks of the output device |
-hwaccels | show available HW acceleration methods |
Global options (affect whole program instead of just one file:
变量名 | 含义 |
---|---|
-loglevel loglevel | set logging level |
-v loglevel | set logging level |
-report | generate a report |
-max_alloc bytes | set maximum size of a single allocated block |
-y | overwrite output files |
-n | never overwrite output files |
-ignore_unknown | Ignore unknown stream types |
-filter_threads | number of non-complex filter threads |
-filter_complex_threads | number of threads for -filter_complex |
-stats | print progress report during encoding |
-max_error_rate maximum error rate | ratio of errors (0.0: no errors, 1.0: 100% errors) above which ffmpeg returns an error instead of success. |
-bits_per_raw_sample number | set the number of bits per raw sample |
-vol volume | change audio volume (256=normal) |
Per-file main options:
变量名 | 含义 |
---|---|
-f | fmt |
-c | codec |
-codec | codec |
-pre | preset |
-map_metadata | outfile[,metadata]:infile[,metadata] |
-t duration | record or transcode “duration” seconds of audio/video |
-to time_stop | record or transcode stop time |
-fs limit_size | set the limit file size in bytes |
-ss time_off | set the start time offset |
-sseof time_off | set the start time offset relative to EOF |
-seek_timestamp | enable/disable seeking by timestamp with -ss |
-timestamp time | set the recording timestamp (‘now’ to set the current time) |
-metadata string=string | add metadata |
-program title=string:st=number… | add program with specified streams |
-target type | specify target file type (“vcd”, “svcd”, “dvd”, “dv” or “dv50” with optional prefixes “pal-”, “ntsc-” or “film-”) |
-apad | audio pad |
-frames number | set the number of frames to output |
-filter filter_graph | set stream filtergraph |
-filter_script filename | read stream filtergraph description from a file |
-reinit_filter | reinit filtergraph on input parameter changes |
-discard | discard |
-disposition | disposition |
Video options:
变量名 | 含义 |
---|---|
-vframes number | set the number of video frames to output |
-r rate | set frame rate (Hz value, fraction or abbreviation) |
-s size | set frame size (WxH or abbreviation) |
-aspect aspect | set aspect ratio (4:3, 16:9 or 1.3333, 1.7777) |
-bits_per_raw_sample number | set the number of bits per raw sample |
-vn | disable video |
-vcodec codec | force video codec (‘copy’ to copy stream) |
-timecode hh:mm:ss[:;.]ff | set initial TimeCode value. |
-pass n | select the pass number (1 to 3) |
-vf filter_graph | set video filters |
-ab bitrate | audio bitrate (please use -b:a) |
-b bitrate | video bitrate (please use -b:v) |
-dn | disable data |
Audio options:
变量名 | 含义 |
---|---|
-aframes number | set the number of audio frames to output |
-aq quality | set audio quality (codec-specific) |
-ar rate | set audio sampling rate (in Hz) |
-ac channels | set number of audio channels |
-an | disable audio |
-acodec codec | force audio codec (‘copy’ to copy stream) |
-vol volume | change audio volume (256=normal) |
-af filter_graph | set audio filters |
Subtitle options:
变量名 | 含义 |
---|---|
-s size | set frame size (WxH or abbreviation) |
-sn | disable subtitle |
-scodec codec | force subtitle codec (‘copy’ to copy stream) |
-stag fourcc/tag | force subtitle tag/fourcc |
-fix_sub_duration | fix subtitles duration |
-canvas_size size | set canvas size (WxH or abbreviation) |
-spre preset | set the subtitle options to the indicated preset |
FFmpeg个人使用指南相关推荐
- FFmpeg滤镜使用指南
from:http://blog.chinaunix.net/uid-26000296-id-4282537.html FFmpeg添加了很多滤镜,查看哪些滤镜有效可用命令: # ./ffmpeg - ...
- Qt与FFmpeg联合开发指南(二)——解码(2):封装和界面设计
与解码相关的主要代码在上一篇博客中已经做了介绍,本篇我们会先讨论一下如何控制解码速度再提供一个我个人的封装思路.最后回归到界面设计环节重点看一下如何保证播放器界面在缩放和拖动的过程中保证视频画面的宽高 ...
- FFMPEG基本操作命令指南(二)
FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.FFmpeg有非常强大的功能包括视频采集功能.视频格式转换.视频抓图.给视频加水印等. 接上第一篇基础的几个命令, ...
- FFMPEG基本操作命令指南(一)
FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.FFmpeg有非常强大的功能包括视频采集功能.视频格式转换.视频抓图.给视频加水印等. 下面是常见的一些ffmpe ...
- Linux上的ffmpeg完全使用指南
<div class="below-title-meta"><div class="adt">By <span class=&qu ...
- ffmpeg最新源代码(定期更新)
为了方便那些不能连接到ffmpeg的SVN仓库更新源代码的用户,ffmpeg工程组特开辟一个专区,定期更新ffmpeg的源代码,并将其快照上传,有需要的朋友可以长期关注本帖. ffmpeg的编译指令通 ...
- ffmpeg使用硬件加速hwaccel、cuvid、h264_cuvid、h264_nvenc
文章目录 ffmpeg支持硬件加速的原理 所用环境说明 ffmpeg使用硬件加速 安装nvidia驱动 安装cuda 加入header 安装pkgconfig 开始配置 在ffmpeg中看如何使用硬件 ...
- FFMPEG转码及切片
由于优优好房上有些视频需要批量切片,首先想到的就是FFmpeg. 一开始查阅了大量的博客,论坛,文章,踩了很多坑,后面参照FFmpeg的编译指南,搞定 在此就不赘述ffmpeg的安装 http://t ...
- 详细的FFmpeg编译流程与脚本分析
FFmpeg是一个跨平台的多媒体库,也是目前音视频领域应用最广泛的库.它包括libavcodec.libavformat.libavutil.libavdevice.libavfilter.libsw ...
最新文章
- python小白入门可以参看下
- 前端学习之JavaScript第二天学习
- 如何找到SAP support package名称
- linux和windows下icmp的区别
- Win7下使用U盘安装Ubuntu16.04双系统图文教程(亲测)
- 电路设计——教你如何阅读数据手册
- Java Swing窗体JFrame之窗体美化-窗体及组件外观设置
- 【Vivado那些事儿】Vivado介绍
- Springboot JPA日志输出打印SQL语句和传入的参数 高阶篇,java微服务架构视频下载
- 敏感词过滤及反垃圾文本的相关知识(欢迎收藏)
- java参数传递内存图解,探讨Java参数传递问题
- idea 引入包报错:Unable to provision, see the following errors
- 2022年5月语音合成(TTS)和语音识别(ASR)论文月报
- CentOS部署单机Presto
- springdoc swagger3 文件上传API正确写法
- 智能优化算法之灰狼优化算法(GWO)的实现(Python附源码)
- 微信朋友圈怎么发文字?微信怎么发朋友圈只发文字?
- 从appstore快速安装Xcode 8.0_如何解决xcode8安装慢的问题
- Oracle GoldenGate心跳表检测延迟
- 【收藏向】电路(下) 思维导图 3小时不挂科(邱关源教材)