FFMPEG进阶系列03-ffmpeg转码专题(上)
概述
关键的参数
该篇主要是探讨转码相关的技术点,比如:
- 视频尺寸:指的就是视频的分辨率,常见的分辨率有4096x2304,1920x1080,1280x720,720x576等。
- 视频编码:视频编码方式就是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式。视频编码格式常见到的有:MPEG-2 TS、Divx、Xvid、H.264、WMV-HD和VC-1。
- 音频编码:音频编码方式指通过特定的压缩技术对音频数据进行处理的方法。
- 帧率:帧率(即视频更新率)是用于测量显示帧数的量度。测量单位为“每秒显示帧数”(Frame Per Second,FPS,帧率)或“赫兹”,单位用FPS用来描述视频每秒播放多少帧,而单位用赫兹用来描述显示器的画面每秒更新多少次。 一般帧率越高,视频画面越流畅。
- 比特率:指每秒传送的比特(bit)数,即每秒传输的文件大小。比特率规定使用“比特每秒”(bit/s 或 bps)为单位。比特率越高,每秒传送的数据越大。
- 采样率:采样率的单位是Hz,表示每秒采样的次数。单位时间内取样率越大,精度就越高,处理过的视频文件就越接近没有处理过的视频文件。
- 码率:码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。码率与体积成正比:码率越大,体积越大;码率越小,体积越小。由于文件体积与取样率是成正比的,所以几乎所有的编码格式都想用最低的码率达到最少的失真,“码率”就是失真度,码率越高越清晰,反之则画面粗糙而且马赛克多。
- 视频部分的位深度:用于指定图像中的每个像素可以使用的颜色信息数量,用“位即bit”为单位。
- 音频部分的位深度:单个声道的采样数据大小
视频压缩
一般来说,在做转码时音频影响不大,重点在于视频压缩。
视频压缩参数主要分为以下:
- -s 设置输出分辨率(例如 -s 480x320)
- -r 设置帧率(例如 -r 25)
- -b:v 设置码率(例如 -b:v 500k)
- -c:v 或 -vcodec设置编码器(例如 -c:v libx264)
- 特殊参数-an,-vn,-sn分别排除所有的音频,视频,字幕流。
- 编码器高级参数设置(也最为复杂)
视频分辨率和压缩大小参考
分辨率 | Bitrate | 10分钟的视频 |
---|---|---|
320p 320×240 | 180 kbit/s | ~13 MB |
360p 640×360 | 300 kbit/s | ~22 MB |
480p 864×480 | 500 kbit/s | ~37 MB |
576p 720x576 | 850 kbit/s | ~63 MB |
720p 960×720 | 1000 kbit/s | ~75 MB |
编码器高级参数设置
编码器高级参数设置,甚为复杂:
- -vcodec libx264 强制指定视频编码模式
- -profile:v high 使用H.264的High模式 比较消耗资源
- -pre slow 使用慢速模式 耗时间 清晰度高。该参数还可选择 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo
- -b:v 360k / 720k / 1550k 视频比特率 (该参数比较重要 如果是转换Web用途 是否正确直接影响视频播放流畅程度)
- -maxrate 500k 最大比特率
- -bufsize 1000k 比特率缓衝大小
- -threads 0 处理器核心利用数量
- -aspect 16:9 / 4:3 视频比例
- -pass N 1-3可选
##ffmpeg x264编码参数简介
x264参数在FFMPEG中可以使用很多参数,同样也可以使用x264本身的参数来控制,具体的参数列表如下所示:
参数 | 类型 | 说明 |
---|---|---|
preset | 字符串 | 编码器预设参数 。可选ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow and placebo。默认"medium" |
tune | 字符串 | 调优编码参数 |
profile | 字符串 | 编码profile档级设置。可选baseline主要用于低清视频的制作,main主要用于移动设备视频的制作,high主要用于电脑播放和高清视频的制。 |
level | 字符串 | 编码level层级设置 |
wpredp | 字符串 | P帧预测设置 |
x264opts | 字符串 | 设置x264专有参数 |
crf | 浮点数 | 选择质量恒定质量模式 |
crf_max | 浮点数 | 选择质量恒定质量模式最大值 |
qp | 整数 | 恒定量化参数控制 |
psy | 浮点数 | 只用psychovisual优化 |
rc-lookahead | 整数 | 设置帧类型和帧率控制预读帧数 |
weightb | 布尔 | 允许B帧加权预测,可以减少相邻B帧质量低的影响,对质量和压缩比都有提高,且对速度影响极少。默认为auto |
weightp | 整数 | P帧加强预测。 选项none,simple,smart,默认-1 |
ssim | 布尔 | 计算和打印ssim统计信息 |
intra-refresh | 布尔 | 用定时刷I帧以替代IDR帧,默认auto |
bluray-compat | 布尔 | 蓝光兼容参数 |
b-bias | 整数 | B帧可能指数,正值倾向于增加B帧,负值倾向于减少B帧。如果B-Frams设置的较大,可以改成 -1。默认值: |
mixed-refs | 布尔 | 每个 partition一个参考,而不是每个宏块一个参考。默认auto |
8x8dct | 布尔 | 8×8矩阵变换,用在 high profile。 默认auto |
aud | 布尔 | 带AUD间隔符。默认auto |
mbtree | 布尔 | 宏块树频率控制。默认auto |
deblock | 字符串 | 环路滤波器参数 |
cplxblur | 浮点数 | 减少波动QP参数。默认-1 |
partitions | 字符串 | 逗号分隔的 partition列表,可以包含的值有p8×8、p4x4、b8×8、8×8、i4×4、none、all |
direct-pred | 整数 | 运动向量预测模式 |
slice-max-size | 整数 | 每个slice的最大字节数。默认-1 |
nal-hrd | 整数 | HRD信号信息设置。选项none,vbr,cbr |
motion-est | 整数 | 运动估计方法。选项dia,hex,umh,esa,tesa。默认-1 |
forced-idr | 布尔 | 强行设置关键帧为IDR帧,默认false |
coder | 整数 | 编码器类型。选项default,cavlc,cabac,vlc,ac。默认default |
b_strategy | 整数 | I/P/B帧选择策略 。默认-1 |
chromaoffset | 整数 | QP色度和亮度之间的差异参数 |
sc_threshold | 整数 | 场景切换阈值参数 |
noise_reduction | 整数 | 降噪处理参数 |
x264-params | 字符串 | 与x264opts操作相同 |
音频压缩
- -acodec libfaac 强制指定音频处理模式
- -ac 2 声道选择
- -ar 44100 音频赫兹
- -ab 128k 比特率 128k (或-b:a 128k)
- 示例:-acodec libfaac -ac 2 -ar 44100 -ab 64k
更多资料,更多分享
音视频技术交流群1 已满
音视频技术交流群2 已满
音视频技术交流群3 群号782508536
最新文章请关注以下专栏:
简书专栏:https://www.jianshu.com/nb/29979868
知乎专栏:https://zhuanlan.zhihu.com/multimedia
参考
[1] ffmpeg转换参数和压缩输出大小的比率
FFMPEG进阶系列03-ffmpeg转码专题(上)相关推荐
- FFMPEG进阶系列02-ffmpeg命令详解3
ffmpeg 的封装转换 FFmpeg的封装转换部分,主要是通过libavformat这部分来完成的功能,通过libavformat库进行mux和demux操作,多媒体文件的格式有很多种,但是还是有好 ...
- FFMPEG进阶系列03-ffmpeg转码专题(中)x264参数详解
文章目录 概述 版本 Presets(预设) tune slow-firstpass Frame-type options(帧类型选项) keyint min-keyint no-scenecut s ...
- FFMPEG进阶系列01-ffplay命令详解
概述 ffplay是一个基于FFMPEG库和SDL库开发的多媒体播放器.它的主要目的是是用来测试FFMPEG的各种API,比如codec/format/filter等等库. 掌握ffplay的设计逻辑 ...
- 音视频开发系列(65)-FFMPEG进阶系列01-ffplay命令详解
概述 ffplay是一个基于FFMPEG库和SDL库开发的多媒体播放器.它的主要目的是是用来测试FFMPEG的各种API,比如codec/format/filter等等库. 掌握ffplay的设计逻辑 ...
- FFMPEG进阶系列02-ffmpeg命令详解2
帮助信息 查看ffmpeg版本 通过ffmpeg -version查看ffmpeg的版本,这里所查看的版本,是详细的版本,包含libavformat.libavcodec.libavutil.liba ...
- 安卓进阶系列-03上弹选择框(PopupDialog)的使用
主要介绍上弹选择框的使用,这个功能基于Dialog实现,为安卓开发常见控件之一.实现方式并非利用第三方控件而是利用安卓原生对话框控件,不过样式自定义了. 1.布局使用 <?xml version ...
- iOS高级进阶系列之项目开发基础(上)多环境配置,Mach-O与链接器。
前言 最近对项目进行优化,就顺便写一些日常开发中会用到的中高级开发技巧.这篇文章聊一下下面三个内容:多环境配置,Mach-O与链接器,Symbol. 多环境配置 聊到多环境配置,我们先说几个概念 上图 ...
- JavaScript进阶系列01,函数的声明,函数参数,函数闭包
本篇主要体验JavaScript函数的声明.函数参数以及函数闭包. □ 函数的声明 ※ 声明全局函数 通常这样声明函数: function doSth() { alert("可以在任何时候调 ...
- 高薪程序员面试题精讲系列152之电商专题(中)-SPU是怎么回事?SPU如何设计?SKU又是什么呢?SN你知道吗?
一. 面试题及剖析 1. 今日面试题 你做过电商项目吗? SKU怎么设计? SPU如何设计实现? 2. 题目剖析 在前两篇文章中,壹哥给大家介绍了电商相关的一些背景知识,以及购物车的业务实现.如果你还 ...
最新文章
- 用于目标检测的半自动视频标注
- ffmpeg把ts文件转m3u8并切片
- 蛋疼的ElasticSearch(一)之安装ElasticSearch
- 飞桨全新发布,核心框架首次完整公开解读
- 兰州大学第一届『飞马杯』程序设计竞赛 - ★★飞马祝福语★★(动态dp)
- [vue-element] ElementUI怎么修改组件的默认样式?
- 对层级聚类树进行模块分割,定位基因在哪个模块中
- [转]MVP+WCF+三层结构搭建项目框架
- 螺旋传动设计系统lisp_[罗升机电]第236期 丝杆升降机系统工程之齿轮传动的设计!...
- Windows11系统中便签小工具在哪 便签使用方法简单图解
- 网易BUFF产品体验报告
- HTML5期末大作业:旅游网站设计——北京旅游(1页) 北京旅游网页设计制作 简单静态HTML网页作品 我的旅游网页作业成品 学生旅游网站模板
- 上位机使用C++通过ADS协议与倍福PLC通信例程-布尔变量的读取
- Springboot启动流程详解
- 倍福beckhoff详细知识库展示
- SpreadJS 纯前端表格控件应用案例:金融业数据智能分析平台
- 弹簧物理-如何模拟弹簧和阻尼
- error 1366
- 读书笔记--删除数据时的提示效果在项目中的应用
- (攻防sj)web-bug