[视频] x264 压缩笔记
转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]
本文链接: http://www.php-oa.com/2009/03/22/x264.html
象x264本身是不能直接处理视频的,由于他没有解码部分,所以须要 mencoder 和 ffmpeg 之类解码成 yuv 的文件,然后在用他来编码.但在处理时一定要指定宽高.

象mplayer假设播放 y4m,原始 yuv 不带 y4m 头,播放时要手动指定正确分辨率。宽高错一点都会花。另外,二个程序编码和解码通信时,最好使用 mkfifo 来建立一个管道(pipe)这样能更加好的通信,不然 mencoder 的输出会搞花 x264 的编码。
|
1
|
$mplayer |
解码的过程用mencoder能够这样写
$ mencoder -really-quiet $Videotime -of rawvideo -ovc raw \
-ofps $fps -noautosub -vf scale=$Scale,harddup,format=i420 -nosound $FileName -o -
然后通过管道传送给x264的程序来处理.
假设 mencoder 加字幕有问题,能够使用 mplayer 来加字幕
|
1
|
mplayersub/root/sub.ssaformat=i420 |
使用x264程序的格式:
x264 默认选项 -o 输出文件 输入文件 [长x宽]
输入支持格式:RAW/y4m/avi/avs(编译时可选)
输出支持格式:264/mkv/mp4(编译时可选)
三次编码,画质最好.但须要的时间长
1:第一次压缩,创建统计文件
|
1
|
$"$(SourceFile)"--no-psnrno-ssimhex\ref1"$(PassLogFile)"\ |
2:按建立的统计文件压缩并输出,不覆盖统计文件
|
1
|
$"$(SourceFile)"--no-psnrno-ssimhex\ ref1"$(PassLogFile)"\ |
3:按建立的统计文件压缩,优化统计文件
|
1
2
3
4
|
$"$(SourceFile)"--no-psnrno-ssimhex\--merangeref1--psy-rd --threads"$(PassLogFile)"--pass"$(DestFile)" |
二次
编码測试视频流
|
1
2
3
4
|
$"$(SourceFile)"--no-psnrno-ssimhex\--merangeref1--direct"$(PassLogFile)"\ --pass |
正式编码
|
1
2
3
4
|
$"$(SourceFile)"--no-psnrno-ssimhex\--merangeref1 --psy-rd--threads"$(PassLogFile)"--pass"$(DestFile)" |
一次质量优先,但这样没法保证码流,也就是讲,你不知道出来的文件有多大.
|
1
2
3
|
$"$(SourceFile)"--no-psnrno-ssimhex\--merangeref1--psy-rd"$(DestFile)" |
一次大小优先,但有可能动作快的地方.由于码流太少,感觉非常不好.
|
1
2
3
4
|
$"$(SourceFile)"--no-psnrno-ssimhex\--merangeref1--psy-rd--threads"$(DestFile)" |
帧类型选项:
-I/–keyint <整数> 最大IDR帧间距,默认250
-i/–min-keyint <整数> 最小IDR帧间距,默认25
–scenecut <整数> 画面动态变化限,当超出此值时插入I帧,默认40
–pre-scenecut 更快,但低精度的画面动态检測,须要多线程,而且在启用多线程时自己主动打开。
-b/–bframes <整数> 在IP帧之间可插入的B帧数量最大值,范围0~16,默认0
-b-adapt 自适应B帧判定模式。 0:关闭;1:高速;2:优化(高B帧时速度大大下降),默认1
–b-bias <整数> 控制插入B帧判定,范围-100~+100,越高越easy插入B帧,默认0
–b-pyramid 同意B帧做參考帧
–no-cabac 关闭内容自适应二进制算术编码(CABAC,高效率的熵编码)(会提快速度,但严重影响质量)
-r/–ref <整数> 最大參考帧数,范围0~16,默认1
–no-deblock 关闭环路滤波(一种除马赛克算法)
-f/–filter <alpha:beta>设置环路滤波的AlphaC和Beta的參数,范围-6-6,默认都为0
–interlaced 启用纯交错模式(用于隔行扫描的源)
码率控制选项:
-q/–qp <整数> 固定量化模式并设置使用的量化值,范围0~51,0为无损压缩,默认26
-B/–bitrate <整数> 设置平均码率
–crf <整数> 质量模式,量化值动态可变
–vbv-maxrate <整数> 平均码率模式下,最大瞬时码率,默认0(与-B设置同样)
–vbv-bufsize <整数> 码率控制缓冲区的大小,单位kbit,默认0
–vbv-init <小数> 码率控制缓冲区数据保留的最大数据量与缓冲区大小之比,范围0~1.0,默认0.9
–qpmin <整数> 设置最小量化值,范围0~51,默认10
–qpmax <整数> 设置最大量化值,范围0~51,默认51
–qpstep <整数> 设置相邻帧之间的量化值差,范围0~50,默认4
–ratetol <小数> 平均码率模式下,瞬时码率能够偏离的倍数,范围0.1~100.0,默认1.0
–ipratio <小数> I帧和P帧之间的量化系数,默认1.40
–pbratio <小数> P帧和B帧之间的量化系数,默认1.30
–chroma-qp-offset <整数> 色度和亮度之间的量化差,范围-12~+12,默认0
–aq-mode <整数> 自适应量化模式,能够在1帧中不同宏块间又一次分配量化值,能提高暗部细节,但会提高码率。与–qp不能同一时候使用,0关闭,1开启,默认1
–aq-strength <小数> AQ强度,减小低细节宏块的量化值,默认1.0
-p/–pass <1|2|3> 多次压缩码率控制
1:第一次压缩,创建统计文件
2:按建立的统计文件压缩并输出,不覆盖统计文件,
3:按建立的统计文件压缩,优化统计文件
–stats <字符串> 统计文件的名称,默认"x264_2pass.log"
–qcomp <小数> 线性量化控制,0.0为固定码率,1.0为固定量化值,默认0.6,仅仅用于2-pass和质量模式
–cplxblur <小数> 依据相邻帧平滑量化值比例的最大值,范围0~99.9,默认20.0,仅仅用于2-pass和质量模式
–qblur <小数> 对统计文件结果平滑量化值比例的最大值,范围0~99.9,默认0.5,仅仅用于2-pass
–zones <z0>/<z1>/… 分段量化,格式为:<開始帧>,<结束帧>,<选项>,可选项为:q=<整数>(量化值)或b=<小数>(码率倍数)
–qpfile <字符串> 强制帧的类型和量化值
分析选项:
-A/–analyse <字符串> 动态块划分方法,默认"p8x8,b8x8,i8x8,i4x4"。可选项:p8x8/p4x4/b8x8/i8x8/i4x4;none/all(p4x4须要p8x8. i8x8须要–8x8dct)
–direct <字符串> 动态预測方式,默认"spatial"。可选项:none/spatial/temporal/auto
–direct-8×8 <-1|0|1> 动态预測方式宏块大小。 0: 4×4、1: 8×8、-1:尽可能减小体积,默认1
-w/–weightb 同意B帧加权预測(能够降低相邻B帧质量低的影响)
–me <字符串> 对全像素块动态预測搜索的方式,默认"hex",可选项:
dia:菱形搜索,半径1 (快)
hex:正六边形搜索,半径2
umh:可变半径六边形搜索
esa:全面搜索(非常慢,并且效果与umh差点儿同样)
tesa: 用hadamard方式进行全面搜索,比esa更慢
–merange <整数> –me为umh/esa时的搜索半径,最大64,默认16
–mvrange <整数> 设置运动矢量的最大范围,默认-1(自己主动确定)
–mvrange-thread <整数> 线程间最小缓冲,用于一些播放器的兼容性,默认-1(自己主动确定)
-m/–subme <整数> 动态预測和分区方式,可选项1~9,默认6(与压缩质量和时间关系密切,1是7速度的四倍以上)
1:用全像素块进行动态搜索,对每一个块再用高速模式进行四分之中的一个像素块精确搜索
2:用半像素块进行动态搜索,对每一个块再用高速模式进行四分之中的一个像素块精确搜索
3:用半像素块进行动态搜索,对每一个块再用质量模式进行四分之中的一个像素块精确搜索
4:用高速模式进行四分之中的一个像素块精确搜索
5:用质量模式进行四分之中的一个像素块精确搜索
6:进行I、P帧像素块的速率失真最优化(rdo)
7:进行所有帧像素块的速率失真最优化
8:进行I、P帧运动矢量及块内部的速率失真最优化
9:进行所有帧运动矢量及块内部的速率失真最优化(质量最好)
–psy-rd 在rdo中使用Psy算法(一种心理视觉模型)和Psy-Trellis量化,可提高细节,但会大幅提高码率。须要-m>6。默认 ["1.0:0.0"]。第一个值为Psy-rdo强度,第二个值为Psy-Trellis强度。
–mixed-refs 能够在一帧内使用不同參考帧
–no-chroma-me 不进行色度的动态预測
-8/–8x8dct 能够使用8×8的离散余弦变换(DCT)
-t/–trellis <整数> Trellis量化,对每一个8×8的块寻找合适的量化值,须要CABAC,默认0
0:关闭
1:仅仅在最后编码时使用
2:一直使用
–no-fast-pskip 关闭高速P帧跳过检測
–no-dct-decimate 关闭P帧联合编码(能够添加�细节,但也会增大体积)
–nr <整数> 噪声去除,范围0~100000,默认0
–deadzone-inter <整数> 设置inter模式下,亮度死区量化值,范围0~32,默认21。
–deadzone-intra <整数> 设置intra模式下,亮度死区量化值,范围0~32,默认11。
–cqm <字符串> 设置外部量化矩阵格式,默认"flat",可选项:jvt/flat
–cqmfile <字符串> 读取JM格式的外部量化矩阵文件,自己主动忽略其它–cqm*选项
–cqm4 <list> 设置4×4的量化矩阵,用逗号分开,范围1~255的16个整数
–cqm8 <list> 设置8×8的量化矩阵,用逗号分开,范围1~255的64个整数
–cqm4i/–cqm4p/–cqm8i/–cqm8p 设置I、P帧不同的量化矩阵
–cqm4iy/–cqm4ic/–cqm4py/–cqm4pc 设置亮度、色度不同的量化矩阵
视频标准化选项:
这些选项与编码无关,只是假设要用mp4之类的播放器,能够设置,风险自担
–overscan <字符串> 过扫描线,默认"undef"(不设置),可选项:show(观看)/crop(去除)
–videoformat <字符串> 视频格式,默认"undef",可选项:component/pal/ntsc/secam/mac/undef
–fullrange <字符串> Specify full range samples setting,默认"off",可选项:off/on(我也不明确这是干什么的,请高手指点)
–colorprim <字符串> 原始色度格式,默认"undef",可选项:undef/bt709/bt470m/bt470bg,
smpte170m/smpte240m/film
–transfer <字符串> 转换方式,默认"undef",可选项:
undef/bt709/bt470m/bt470bg/linear,log100/log316/smpte170m/smpte240m
–colormatrix <字符串> 色度矩阵设置,默认"undef",undef/bt709/fcc/bt470bg,smpte170m/smpte240m/GBR/YCgCo
–chromaloc <整数> 色度样本指定,范围0~5,默认0
输入、输出选项:
-o/–output 指定输出文件
–sar width:height 设置採样比例设置,表示採样像素长宽比
–fps <小数|rational> 设定帧率
–seek <整数> 设定起始帧
–frames <整数> 最大编码帧数
–level <字符串> 类似于MPEG4里的"profile&level",表示编/解码等级
-v/–verbose 显示每个帧的信息
–progress 显示编码进程
–quiet 安静模式
–no-psnr 关闭PSNR计算
–no-ssim 关闭SSIM计算
–threads <整数> 编码线程(使用多线程技术)
–thread-input 在自有线程中执行Avisynth
–non-deterministic 非确定性。能够略微降低多线程的开销
–asm <整数> 覆盖CPU检測
–no-asm 关闭所有CPU优化指令
–visualize 显示编码帧信息图,和XVID类似
–dump-yuv <字符串> 保存帧为yuv格式
–sps-id <整数> 设置SPS和PPS的ID值,默认0
–aud 使用数据定义符号
[视频] x264 压缩笔记的更多相关文章
- C# 利用 OpenCV 进行视频捕获 (笔记)
原文:C# 利用 OpenCV 进行视频捕获 (笔记) 简介 这个项目是关于如何从网络摄像头或者视频文件(*.AVI)中捕获视频的,这个项目是用C#和OPENCV编写的. 这将有助于那些喜欢C#和Op ...
- EV录屏 --- 免费无水印,集视频录制与直播功能于一身的桌面录屏软件, 支持录屏涂鸦、实时按键显示、视频体积压缩等实用功能
https://www.ieway.cn/index.html 免费无水印,集视频录制与直播功能于一身的桌面录屏软件,支持录屏涂鸦.实时按键显示.视频体积压缩等实用功能 EVCapture 3.9.7 ...
- 2019 ICCV、CVPR、ICLR之视频预测读书笔记
2019 ICCV.CVPR.ICLR之视频预测读书笔记 作者 | 文永亮 学校 | 哈尔滨工业大学(深圳) 研究方向 | 视频预测.时空序列预测 ICCV 2019 CVP github地址:htt ...
- iOS 视频选择压缩
//原理,还是调用UIImagePickerController控制器,设置Type为视频 #import "ViewController.h" #import <AVFou ...
- ios 视频/图片压缩
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...
- apiCloud 选择图片,选择视频,压缩图片
选择视频或图片,只需要一个 UIMediaScanner 模板就可以实现,点击链接查看api https://docs.apicloud.com/Client-API/UI-Layout/UIMedi ...
- asp.net core mvc视频A:笔记6-1.应用发布与部署
显示:直接使用上节课的项目 一.使用vs发布应用 这里选择发布到文件夹,当然你可以选择其他的发布方式 部署模式:(我的VS里没有这个配置,不知道为啥...视频里有) 1.框架依赖:选择此模式,发布后需 ...
- FFmpeg处理音视频流程学习笔记
原文作者:一叶知秋0830 链接:https://www.jianshu.com/p/1b715966af50 FFmpeg处理音视频完整流程包括5个阶段(输入文件—>编码数据包—>解码后 ...
- sql视频学习关键笔记(自用记单词与学习用)
sql字段类型 numeric(18,3)-18位整数加3位小数点(货币计量最好选这类型) sql关键字 insert. update. delete alter grant 授权. revoke 回 ...
随机推荐
- RAC 的一些概念性和原理性的知识(转)
一 集群环境下的一些特殊问题 1.1 并发控制 在集群环境中, 关键数据通常是共享存放的,比如放在共享磁盘上. 而各个节点的对数据有相同的访问权限, 这时就必须有某种机制能够控制节点对数据的访问. O ...
- iOS会议和组织
全世界有许多iOS会议和组织,如果你没有机会去参加,知道他们的存在和向他们学习对你也是有益的.事实上,他们中有些提供免费的幻灯片.视频,有用资料等,所以你不能够忽视他们. 有一些会议的主题并不仅仅关于 ...
- .NET基础拾遗(4)委托为何而生?
生活中的例子: 你早上要吃包子作为早饭,那么你可能让你爸爸或者妈妈帮你做,那你就会调用 爸爸.要包子() 或妈妈.要包子() 返回包子对象. 但是如果你爸妈不在家的时候,你只能去街上买,问题是你根本不 ...
- C#基本数据类型与C++区别
与C++不同的地方: char占两个字节存Unicode字符, long long 改为 long ; unsize ... 改为 u... 新增: byte占1个字节,类似与C++char, sby ...
- 吸血鬼数字算法参考 -- javascript版本
// 吸血鬼数字 java编程思想 第四章 75页 练习10 for (var i = 10; i <= 99; i++) { for (var j = i + 1; j < 99; j+ ...
- tttt
while(scanf("%d",&n)!=EOF) { res=-1; level(tmp,n,res,1); printf("%d/n",res); ...
- 使用apache的ab对页面进行压力测试
ab是apache自带的一个很好用的压力测试工具,当安装完apache的时候,就可以在bin下面找到ab 我们可以模拟100个并发用户,对一个页面发送1000个请求 ./ab -n1000 -c100 ...
- ACM ICPC Team
Link: https://www.hackerrank.com/challenges/acm-icpc-team/submissions/code/11617807 def count_max_to ...
- Log4net从下载到使用例子
一.首先下载log4net.dll http://pan.baidu.com/s/1gdigrwJ 二.添加log4net引用 三.代码: using System; using System.C ...
- 帮小黎解决问题C++巩固获得数字每个位置上的数
现在有一个数字 a= 12345; 想要取得这个数字上的没一个数字 使用 除法 +模除 的方法可以获得 原理:除(/)得到的是商 模除(%)的到的是余数 采用这种方式,先将要求的数的某一位 ...