FFmpeg

  • 定义
  • 视频转换
    • 编码/格式转换
  • 提取音频
  • 提取视频
    • 提取视频ES信息
  • 截取视频/图像
    • 截存图片
    • 图片(序列帧)转视频
    • 截取片段
  • 合并视频
    • 合并为.mkv文件
  • 使用过滤器
    • 过滤器图 (Link Label)
      • 视频过滤器
      • 音频过滤器
      • 过滤器链 (Filterchain)
      • 过滤器图 (Filtergraph)
        • 实例
      • 选择媒体流
    • 缩减文件体积
    • 动态设置分辨率
    • 设置帧率
    • 设置码率
  • 添加/去除图片
    • 去除图片
  • m3u8切片
  • 其他
  • -Help

定义

程序 功能
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)
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)

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) 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个人使用指南相关推荐

  1. FFmpeg滤镜使用指南

    from:http://blog.chinaunix.net/uid-26000296-id-4282537.html FFmpeg添加了很多滤镜,查看哪些滤镜有效可用命令: # ./ffmpeg - ...

  2. Qt与FFmpeg联合开发指南(二)——解码(2):封装和界面设计

    与解码相关的主要代码在上一篇博客中已经做了介绍,本篇我们会先讨论一下如何控制解码速度再提供一个我个人的封装思路.最后回归到界面设计环节重点看一下如何保证播放器界面在缩放和拖动的过程中保证视频画面的宽高 ...

  3. FFMPEG基本操作命令指南(二)

    FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.FFmpeg有非常强大的功能包括视频采集功能.视频格式转换.视频抓图.给视频加水印等. 接上第一篇基础的几个命令, ...

  4. FFMPEG基本操作命令指南(一)

    FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.FFmpeg有非常强大的功能包括视频采集功能.视频格式转换.视频抓图.给视频加水印等. 下面是常见的一些ffmpe ...

  5. Linux上的ffmpeg完全使用指南

    <div class="below-title-meta"><div class="adt">By <span class=&qu ...

  6. ffmpeg最新源代码(定期更新)

    为了方便那些不能连接到ffmpeg的SVN仓库更新源代码的用户,ffmpeg工程组特开辟一个专区,定期更新ffmpeg的源代码,并将其快照上传,有需要的朋友可以长期关注本帖. ffmpeg的编译指令通 ...

  7. ffmpeg使用硬件加速hwaccel、cuvid、h264_cuvid、h264_nvenc

    文章目录 ffmpeg支持硬件加速的原理 所用环境说明 ffmpeg使用硬件加速 安装nvidia驱动 安装cuda 加入header 安装pkgconfig 开始配置 在ffmpeg中看如何使用硬件 ...

  8. FFMPEG转码及切片

    由于优优好房上有些视频需要批量切片,首先想到的就是FFmpeg. 一开始查阅了大量的博客,论坛,文章,踩了很多坑,后面参照FFmpeg的编译指南,搞定 在此就不赘述ffmpeg的安装 http://t ...

  9. 详细的FFmpeg编译流程与脚本分析

    FFmpeg是一个跨平台的多媒体库,也是目前音视频领域应用最广泛的库.它包括libavcodec.libavformat.libavutil.libavdevice.libavfilter.libsw ...

最新文章

  1. python小白入门可以参看下
  2. 前端学习之JavaScript第二天学习
  3. 如何找到SAP support package名称
  4. linux和windows下icmp的区别
  5. Win7下使用U盘安装Ubuntu16.04双系统图文教程(亲测)
  6. 电路设计——教你如何阅读数据手册
  7. Java Swing窗体JFrame之窗体美化-窗体及组件外观设置
  8. 【Vivado那些事儿】Vivado介绍
  9. Springboot JPA日志输出打印SQL语句和传入的参数 高阶篇,java微服务架构视频下载
  10. 敏感词过滤及反垃圾文本的相关知识(欢迎收藏)
  11. java参数传递内存图解,探讨Java参数传递问题
  12. idea 引入包报错:Unable to provision, see the following errors
  13. 2022年5月语音合成(TTS)和语音识别(ASR)论文月报
  14. CentOS部署单机Presto
  15. springdoc swagger3 文件上传API正确写法
  16. 智能优化算法之灰狼优化算法(GWO)的实现(Python附源码)
  17. 微信朋友圈怎么发文字?微信怎么发朋友圈只发文字?
  18. 从appstore快速安装Xcode 8.0_如何解决xcode8安装慢的问题
  19. Oracle GoldenGate心跳表检测延迟
  20. 【收藏向】电路(下) 思维导图 3小时不挂科(邱关源教材)

热门文章

  1. 西门子PLC远程控制WinCC远程组态
  2. Complete Anatomy 2021 for Mac(3D医学软件)
  3. element el-input 只能输入正整数完美解决不闪动
  4. Cadence IUS 之二: 生成波形
  5. winscp普通用户上传文件没有权限解决
  6. css 科技 边框_纯css制作带三角的边框(附效果图)
  7. ui svg 转纯svg_带有SVG和边框图像的高科技UI元素
  8. Aplication对象 简单聊天室(16)
  9. 阿里巴巴风鸣:敲着代码,操着产品、运营的心
  10. 世界著名IT企业汇总