`
jubincn
  • 浏览: 242606 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
文章分类
社区版块
存档分类
最新评论

[视频] 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 i420.yuv -demuxer rawvideo -rawvideo w=320:h=240

解码的过程用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
mplayer new.mp4 -really-quiet -sub/root/sub.ssa -ass -subcp utf-8
-font /root/wendy.ttf -fps 25 -vf scale=640:368,harddup,
format=i420
-vo yuv4mpeg:file=>(x264 --demuxer y4m --bitrate 515 --preset slow
--profile baseline --level 30 --vbv-bufsize 10000 --vbv-maxrate 10000
--threads auto --input-res 640x368 --fps 25.000 --sar 507:500
--output output1.264 - 2>/dev/null) -ao null -nosound -noframedrop

使用x264程序的格式:

x264 默认选项 -o 输出文件 输入文件 [长x宽]
输入支持格式:RAW/y4m/avi/avs(编译时可选)
输出支持格式:264/mkv/mp4(编译时可选)

三次编码,画质最好.但需要的时间长

1:第一次压缩,创建统计文件

?
1
$ x264 "$(SourceFile)"--no-psnr --no-ssim --keyint 250 --min-keyint 25
--level 40 --me
hex\ --merange 16 --non-deterministic --subme 1 --ref1
--bframes 3 --trellis 1 --weightb \ --direct auto --bitrate $(VideoBitrate)
--qcomp 0.6 --threads auto --stats
"$(PassLogFile)"\ --pass 1 -o /dev/null


2:按建立的统计文件压缩并输出,不覆盖统计文件

?
1
$ x264 "$(SourceFile)"--no-psnr --no-ssim --keyint 250 --min-keyint 25 --level
40 --me
hex\ --merange 16 --non-deterministic --subme 1 --ref1 --bframes 3
--trellis 1 --weightb \ --direct auto --bitrate $(VideoBitrate) --qcomp 0.6
--threads auto --stats
"$(PassLogFile)"\ --pass 3 -o /dev/null


3:按建立的统计文件压缩,优化统计文件

?
1
2
3
4
$ x264 "$(SourceFile)"--no-psnr --no-ssim --keyint 250 --min-keyint 25 --level 40 --me hex\
--merange 16 --non-deterministic --aq-mode 1 --aq-strength 1.0 --b-adapt 1 --ref1 --subme 6 \
--psy-rd 1:0 --bframes 3 --trellis 1 --weightb --direct auto --bitrate $(VideoBitrate) --qcomp 0.6 \
--threads auto --stats "$(PassLogFile)"--pass 2 -o "$(DestFile)"


二次

编码测试视频流

?
1
2
3
4
$ x264 "$(SourceFile)"--no-psnr --no-ssim --keyint 250 --min-keyint 25 --level 40 --me hex\
--merange 16 --non-deterministic --subme 1 --ref1 --bframes 3 --trellis 1 --weightb \
--direct auto --bitrate $(VideoBitrate) --qcomp 0.6 --threads auto --stats "$(PassLogFile)"\
--pass 1 -o /dev/null

正式编码

?
1
2
3
4
$ x264 "$(SourceFile)"--no-psnr --no-ssim --keyint 250 --min-keyint 25 --level 40 --me hex\
--merange 16 --non-deterministic --aq-mode 1 --aq-strength 1.0 --b-adapt 1 --ref1 --subme 6 \
--psy-rd 1:0 --bframes 3 --trellis 1 --weightb --direct auto --bitrate $(VideoBitrate) --qcomp 0.6 \
--threads auto --stats "$(PassLogFile)"--pass 2 -o "$(DestFile)"


一次质量优先
,但这样没法保证码流,也就是讲,你不知道出来的文件有多大.

?
1
2
3
$ x264 "$(SourceFile)"--no-psnr --no-ssim --keyint 250 --min-keyint 25 --level 40 --me hex\
--merange 16 --non-deterministic --aq-mode 1 --aq-strength 1.0 --b-adapt 1 --ref1 --subme 6 \
--psy-rd 1:0 --bframes 3 --trellis 1 --weightb --direct auto --crf 25 --threads auto -o"$(DestFile)"


一次大小优先
,但有可能动作快的地方.因为码流太少,感觉很不好.

?
1
2
3
4
$ x264 "$(SourceFile)"--no-psnr --no-ssim --keyint 250 --min-keyint 25 --level 40 --me hex\
--merange 16 --non-deterministic --aq-mode 1 --aq-strength 1.0 --b-adapt 1 --ref1 --subme 6 \
--psy-rd 1:0 --bframes 3 --trellis 1 --weightb --direct auto --bitrate $(VideoBitrate) --qcomp 0.6 \
--threads auto -o "$(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,越高越容易插入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学习笔记

    ### H.264/AVC 标准与 x264 编码器 #### 1. H.264/AVC 标准概述 H.264,亦称为MPEG-4 Part 10或Advanced Video Coding (AVC),是由ITU-T视频编码...对于需要高性能视频压缩的应用场景而言,x264是一个非常优秀的选择。

    x264学习笔记(1)-函数调用流程

    x264实现了标准中的高级特性,如B帧、环路滤波、场编码等,这些特性为视频压缩提供了较高的压缩率和较好的视频质量。 2. x264源代码版本与主流程函数入口: 本次学习所使用的x264源代码版本为x264-snapshot-***-...

    基于AForge实现C#摄像头视频录制功能

    基于AForge实现C#摄像头视频录制功能 在本文中,我们将详细介绍基于AForge实现C#摄像头视频录制...通过使用AForge,我们可以轻松地实现C#摄像头视频录制功能,并且可以实现视频播放、拍照、压缩和写入到文件中等功能。

    本地推流到RTSP,视频HEVC H265视频测试

    HEVC引入了更多的编码工具,如更精细的块划分(最大支持64x64像素)、多参考帧预测、熵编码优化等,这些都极大地提高了压缩性能。 在给定的文件列表中,`video-hvec-h265.mkv`和`video-hvec-h265-lp.mp4`表明了两个...

    华硕笔记本,摄像头驱动

    当摄像头驱动出现问题或者缺失时,用户可能无法正常使用摄像头进行视频通话、拍照或录制视频。因此,更新或安装正确的摄像头驱动对于确保笔记本的摄像头功能正常至关重要。 标题中的“华硕笔记本,摄像头驱动”意味...

    入门学习H264的必备资料

    6. **x264**:x264是世界上最高效的开源H264视频编码库,广泛应用于各种视频处理工具和系统。其源码优化程度高,对于学习编码技巧和优化策略有很大帮助。 通过这些资料的学习,你可以逐步掌握H264的基本原理,如宏...

    x265_cmd_api_thrd_preset_lossless_svt.pdf

    x265 是一款开源的 H.265/HEVC 编码器,它是 x264 的后继者,提供高质量的视频编码解决方案。由于文档内容只是提供了一部分且存在识别错误,但是我们可以从提供的结构和内容概述中挖掘出x265编码器的重要知识点。 1...

    机械革命MECHREVO Z2 Air Series GK5CP5X 黑苹果4k屏NV156UQM-N66

    这款笔记本配置了4K分辨率的显示屏,型号为NV156UQM-N66,暗示它拥有高清晰度和出色的显示效果,适合对视觉体验有较高要求的用户,如设计师或视频编辑工作者。 【描述】"机械革命MECHREVO Z2 Air Series GK5CP5X...

    应用笔记 - 为媒体服务器应用程序增加高清视频功能吗?.pdf

    PCIE-8120卡支持的视频压缩方案包括CIF格式的H.263和MPEG-4以及高达1080p分辨率的H.264。视频流解码后,该设备能够提供不同分辨率之间的全缩放和帧率的自适应功能,还能将视频流和图形混合以创建各种输出布局。同时...

    H.264相关文档

    H.264,全称为ITU-T的高效率视频编码(High Efficiency Video Coding,简称HEVC)和MPEG-4的第10部分,是一种广泛应用于数字视频编码的标准,为高清视频传输、存储和播放提供了高效的数据压缩技术。这个压缩包文件...

    蓝天模具笔记本电脑支持的SoundBlaster驱动

    这个驱动包含了一系列音频增强功能,如EAX Advanced HD(环境音频扩展高级版)用于游戏中的沉浸式音效,Crystalizer技术可以提升压缩音乐或视频的音质,以及CMSS-3D(Creative Multi-Channel Surround 3D)可以将...

    数字图像与视频处理(303-2复习笔记)1

    【数字图像与视频处理复习笔记】本篇复习笔记聚焦于数字图像和视频处理的核心概念,涉及神经网络、机器学习和深度学习的相关应用。在当前快速发展的科技领域,这些技术的重要性日益凸显,但未来是否仍为主流尚无法...

    远程视频监控项目

    "x264"是一个高效的H.264视频编码库,用于压缩视频数据以减少带宽需求。在远程监控场景中,x264编码可以优化视频质量与传输速度之间的平衡。 "web_camera"是项目的核心组件,它负责捕捉和传输视频。理解如何与Web...

    笔记本Chicony摄像头Vista下驱动

    压缩包子文件的文件名称“Camera_Chicony_1.1.74.216_Vistax86x64”揭示了驱动的具体版本信息,1.1.74.216表示这是驱动的版本号,通常随着修复错误和添加新功能而更新。"Vistax86x64"表明这个驱动支持32位(x86)和64...

    行业文档-设计装置-笔记本摄像头.zip

    标题和描述中提到的是“行业文档-设计装置-笔记本摄像头.zip”,这通常指的是一个包含有关笔记本摄像头设计和装置的专业文档的压缩文件。该文件只有一个子文件,名为“笔记本摄像头.pdf”,我们可以推测这是一个详细...

    Sony 笔记本显示卡驱动

    在计算机硬件中,显卡是负责处理图形和视频输出的重要组件,对于图形密集型任务,如游戏、图像编辑或视频播放等,一个合适的驱动程序至关重要。 描述中提到的“Sony VGN-TZ13”是一款由Sony生产的超便携笔记本型号...

    VFW学习笔记

    - **格式转换**:VFW支持多种视频压缩格式,如MJPEG、H.264等,通过适当的编解码器(CODEC)可以进行格式转换。 - **流控制**:`capGrabFrame`和`capStartCapture`等函数允许开发者控制视频流的启动、停止及帧的捕获...

    计算机组装视频卡的种类(20211020214932)页.pdf

    关键性能指标是压缩速度,比如在640x480分辨率、256色深、25-30帧/秒的视频条件下,视频卡至少需每秒处理7.5-9MB数据。更高的分辨率和色深将需要处理更大容量的数据。 3. 电视卡:电视卡主要功能是让计算机具备收看...

    QT学习笔记-初识FFmpeg

    而编码格式则是指视频或音频数据是如何被压缩和编码的,例如H.264、AAC等。 ##### 2.3 ffmpeg视频解码(解码为YUV) **2.3.1 方案流程图** FFmpeg视频解码的主要步骤如下: 1. 注册所有组件(av_register_all()...

    行业文档-设计装置-便携式笔记本.zip

    标题和描述中提到的“行业文档-设计装置-便携式笔记本.zip”是一个包含便携式笔记本设计相关知识的压缩文件。在这个文档中,我们很可能能找到关于笔记本电脑的设计原理、制造工艺、技术规格以及市场趋势等方面的信息...

Global site tag (gtag.js) - Google Analytics