FFmpeg个人使用指南

定义

在这里插入图片描述

程序功能
libavformat用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能,包含demuxersmuxer库;
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转换成 H264MPEG4 编码

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)
AngleZ轴进行旋转的度数,由Alignment进行了定义原点
BorderStyle1: 边框+阴影;3: 纯色背景。当BorderStyle=3时,文字下方为轮廓颜色的背景,最下方为阴影颜色背景
OutlineBorderStyle=1时,该值定义文字轮廓宽度,为像素数,常见有0,1,2,3,4
ShadowBorderStyle=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)

filter1, filter2, filter3, …filterN-2, filterN-1, filterN

逗号隔开

过滤器图 (Filtergraph)

filterchain1;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
  1. split过滤器创建两个输入文件的拷贝并标记为[a][b]
  2. [a]作为pad过滤器的输入,pad过滤器产生2倍宽度并输出到[1]
  3. [b]作为hflip过滤器的输入,vflip过滤器水平翻转视频并输出到[2]
  4. 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)2160p3840×2160 pixels
2K1440p2560×1440 pixels
HD1080p1920×1080 pixels
SD720p1280×720 pixels
480p720×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:

变量名含义
-Lshow license
-h topicshow help
-? topicshow help
-help topicshow help
–help topicshow help
-versionshow version
-buildconfshow build configuration
-formatsshow available formats
-muxersshow available muxers
-demuxersshow available demuxers
-devicesshow available devices
-codecsshow available codecs
-decodersshow available decoders
-encodersshow available encoders
-bsfsshow available bit stream filters
-protocolsshow available protocols
-filtersshow available filters
-pix_fmtsshow available pixel formats
-layoutsshow standard channel layouts
-sample_fmtsshow available audio sample formats
-colorsshow available color names
-sources devicelist sources of the input device
-sinks devicelist sinks of the output device
-hwaccelsshow available HW acceleration methods

Global options (affect whole program instead of just one file:

变量名含义
-loglevel loglevelset logging level
-v loglevelset logging level
-reportgenerate a report
-max_alloc bytesset maximum size of a single allocated block
-yoverwrite output files
-nnever overwrite output files
-ignore_unknownIgnore unknown stream types
-filter_threadsnumber of non-complex filter threads
-filter_complex_threadsnumber of threads for -filter_complex
-statsprint progress report during encoding
-max_error_rate maximum error rateratio of errors (0.0: no errors, 1.0: 100% errors) above which ffmpeg returns an error instead of success.
-bits_per_raw_sample numberset the number of bits per raw sample
-vol volumechange audio volume (256=normal)

Per-file main options:

变量名含义
-ffmt
-ccodec
-codeccodec
-prepreset
-map_metadataoutfile[,metadata]:infile[,metadata]
-t durationrecord or transcode “duration” seconds of audio/video
-to time_stoprecord or transcode stop time
-fs limit_sizeset the limit file size in bytes
-ss time_offset the start time offset
-sseof time_offset the start time offset relative to EOF
-seek_timestampenable/disable seeking by timestamp with -ss
-timestamp timeset the recording timestamp (‘now’ to set the current time)
-metadata string=stringadd metadata
-program title=string:st=number…add program with specified streams
-target typespecify target file type (“vcd”, “svcd”, “dvd”, “dv” or “dv50” with optional prefixes “pal-”, “ntsc-” or “film-”)
-apadaudio pad
-frames numberset the number of frames to output
-filter filter_graphset stream filtergraph
-filter_script filenameread stream filtergraph description from a file
-reinit_filterreinit filtergraph on input parameter changes
-discarddiscard
-dispositiondisposition

Video options:

变量名含义
-vframes numberset the number of video frames to output
-r rateset frame rate (Hz value, fraction or abbreviation)
-s sizeset frame size (WxH or abbreviation)
-aspect aspectset aspect ratio (4:3, 16:9 or 1.3333, 1.7777)
-bits_per_raw_sample numberset the number of bits per raw sample
-vndisable video
-vcodec codecforce video codec (‘copy’ to copy stream)
-timecode hh:mm:ss[:;.]ffset initial TimeCode value.
-pass nselect the pass number (1 to 3)
-vf filter_graphset video filters
-ab bitrateaudio bitrate (please use -b:a)
-b bitratevideo bitrate (please use -b:v)
-dndisable data

Audio options:

变量名含义
-aframes numberset the number of audio frames to output
-aq qualityset audio quality (codec-specific)
-ar rateset audio sampling rate (in Hz)
-ac channelsset number of audio channels
-andisable audio
-acodec codecforce audio codec (‘copy’ to copy stream)
-vol volumechange audio volume (256=normal)
-af filter_graphset audio filters

Subtitle options:

变量名含义
-s sizeset frame size (WxH or abbreviation)
-sndisable subtitle
-scodec codecforce subtitle codec (‘copy’ to copy stream)
-stag fourcc/tagforce subtitle tag/fourcc
-fix_sub_durationfix subtitles duration
-canvas_size sizeset canvas size (WxH or abbreviation)
-spre presetset the subtitle options to the indicated preset
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值