x264 - 高品质 H.264 编码器

H.264 / MPEG-4 AVC 是优秀的视讯编码格式
就目前已成熟的视讯编码格式而言,H.264的压缩率是最佳的。
压缩率极高,可以只用很低 bitrate 提供堪用画质。

而 x264 为免费开放原始码的 H.264 / MPEG-4 AVC 编码器,
其编码效率与商业 H.264 编码器相比而有过之而不及。
例如名声响亮的商业影音转换工具 - TMPGEnc,
起初 TMPGEnc 4.0 XPress 的 H.264 编码器采用的是 商业编码器 - MainConcept H.264,
在推出一下代 TMPGEnc Video Mastering Works 5.0,便改用 x264,这证明了 x264 的优秀。

此文只是基础知识,说明只是大略而已。

H.264:  Wiki
x264:  官网Wiki

----------------------------------------------------------------

本文索引

#1F: 下载、基本参数设定
#2F: GUI - 图形接口 工具接口介绍
#3F: CLI - 命令列接口 使用教学
#4F: CLI - FFmpeg with libx264
#5F: 其他 x264 (CLI) 编译版
#6F: 常见设备的相容编码参数

----------------------------------------------------------------

H.264 Profiles

Baseline Profile (BP)
主要用于低成本应用,对播放设备的性能要求不高,此 profile 常见用于早期性能较低的行动设备 (如 Apple iPod)。现今行动设备性能比起以前强大许多,此 profile 已经没有什么必要性了。

Main Profile (MP)
此 profile 原本是用于 SD 分辨率数码电视广播,虽然没有实行,然而被用于 HD 分辨率的电视广播。在 2004 年 High Profile 被开发之后,此 profile 已经没有什么必要性了。
早期的高性能行动播放设备(如 Sony PSP),也是使用此 profile。

High Profile (HiP)
目前使用最广泛的 profile,由其是 HD 分辨率电视应用 (如 Blu-ray / AVCHD 光盘储存、游戏机等电视多媒体播放器、HDTV DVB 广播服务)。
现今的行动播放设备都可以流畅播放用此 profile 的 SD 分辨率影片,中阶等级可以上 720p 分辨率,高阶甚至可上 FullHD (软解可能会有点吃力,硬解完全没问题)。

High 10 Profile (Hi10P)
超越目前主流的消费型产品能力,此 profile 建立在 High Profile 之上,多了支援 10 bit 的精度,色彩更精准。
以影片压制而言,将 High Profile (8 bit) 影片重新编码输出为 H.264 High 10 Profile ,虽然色彩精度不会变,但至少压缩率比输出 High Profile (8 bit) 还要高。

High 4:2:2 Profile (Hi422P)
针对专业领域应用,此 profile 建立在 High 10 Profile 之上,多了支援 4:2:2 色彩取样,位元深度达 10 bit。

High 4:4:4 Predictive Profile (Hi444PP)
此 profile 建立在 High 4:2:2 Profile 之上,多了支援 4:4:4 色彩取样,位元深度达 14 bit,并且支援高效率无损重新编码,且每张画面编码为三个独立的色彩平面。

ps. 目前 x264 的 H.264 Hi444P 仅支援 8-10 bit

详细资料(Wiki)

----------------------------------------------------------------

H.264 Frame

影片是由许多连续的 Frames 所组成,但并不是所有 Frames 都是完整的画面,那些 Frames 需要参考其他 Frames 才能解码出一张完整的画面。



H.264 的 Frame types 有 I、B、P 三种。

I-frame:
不需要参考其他 Frames,是一张完整的画面。

I-frame (IDR):
不需要参考其他 Frames,是一张完整的画面。
IDR frame 为真正的 关键划格 (keyframes),
P-frame & B-frame 不会越过 IDR frame 去参考其他 Frames,
所以可以随意跳转到任意 IDR frame 开始播放/解码,而不会发生问题。

P-frame:
只纪录了与之前的 Frames 相异的区块,最多可以参考 "16 张" 之前的 Frames
播放/解码时需要参用到之前的 Frames 的部分资料,才能解码出完整画面。
在 x264 中,你不能控制 P-frame 数量,但你可以控制一个 P-frame 所能参考的 Frame 数量,
也就是 Reference frame (ref) 的数值。

B-frame:
只纪录了与前一张与后一张的 Frames 相异的区块,压缩率高(由其是在低动态/低变化的影片),
播放/解码时需要用到前后两张的 Frames 的部分资料,才能解码出完整画面。

(登入后即可检视图片)
从此图你可以发见 B-Frame 有用到前一张与后一张 Frame 的资料。

播放 Farme 的顺序是依照 Frame 的时间点,但解码顺序则不一定,
当 B-Frame 有用到后一张 Frame 的资料时,就必须预先解码后一张 Frame。
以上图为例
解码(处理)顺序: 1-2-4-3 
显示(播放)顺序: 1-2-3-4

由于 P-/B-frame 不是完整的画面,解码时必须参考其他 Frames,
所以你不能随意跳转到 P-/B-frame 上播放/解码。
也就是说你如果播放 MPEG 视讯格式,当你跳播放时间点时,
正常而言,并不会跳到你所选的时间点上,而是最近的 IDR / I-frame。


就压缩率而言...
由于 P-/B-frame 并不是完整的画面,所以占用的资料量较少,
提高这类 Frame 使用量可以有效提升压缩率,但对画质几乎不会降低,
这代表可以使用较少的 bitrate (位元率)达到维持一定画质。

由以上得知,在 bitrate 充足的情况下,则不需要使用较多 B-frame、Reference frame (ref) ,
多少 bitrate 为充足依影片内容为定,高动态影片需要较多 bitrate,低动则较少。

至于使用时机...
提高 B-frame/ref 使用量可以降低 bitrate 的需求,使用较少 bitrate 达到目标品质。
低动态的影片可以使用较多的 B-frame,高动态或是纯静态则是 P-frame 效果较好。

对于相容性与硬件负担...
提高 B-frame/ref 使用量的副作用是降相容性以及提高硬件负担,请先保证相容性再来追求压缩率。
而 ref 的副作用要比 B-frame 强,例如 ref=16 这代表解码一个 P-frame 必须要连跳回 1~16 张之前的 Frames 取用资料。


x264 参数设定 

Maximun B-frame:
当设定 B-frame 时,重复部分比较多/变化较少的 Frames 会被编码为 B-frame
此值限制 B-frame 的最大连续数量。

Reference frame (ref):
设定一个 P-frame 所能参考的 Frames 数量。
ref 会影响播放相容性,请参考下文 H.264 Level 部分

推荐设定
‧Reference frame (ref): 3 - 5
‧Maximun B-frame: 3 - 6

GOP 长度:
一个 IDR frame 到下一个 IDR frame 的范围。
所以将 GOP 设为无限大(无 IDR Frame)虽然可以增加压缩率,
但这样就不能随意跳转到其他时间点播放/解码。
建议维持 default 即可。

参考资料
http://en.wikipedia.org/wiki/Inter_frame
http://www.ptt.cc/man/AVEncode/DA31/DA6A/M.1320786582.A.3E0.html
http://zh.wikipedia.org/wiki/%E8%A6%96%E8%A8%8A%E5%A3%93%E7%B8%AE%E5%9C%96%E5%83%8F%E9%A1%9E%E5%9E%8B

----------------------------------------------------------------

H.264 Profile (x264)

Profile 越高 压缩率 也越高,但编码复杂度也越高,对播放硬件性能要求较高

x264 支援输出的 H.264 Profile:
baseline, main, high, high10, high422, high444

没有特殊需求使用 High Profile 即可。

无法直接指定输出 Profile 的话,可以手动设定参数值。

H.264 Profile 对应的参数

ps. 空字段代表无限制
完整表格(Wiki,下拉至 Profiles 底部)


参数说明:

bframes (Number of B-frames):
设定 I-frame P-frame 之间连续 B-frames 的最大数量。

cqm (custom quantization matrices):
设定所有自订量化矩阵(custom quantization matrices)为内建的默认之一。内建默认有 flat 和 JVT。

weightp (explicit weighted prediction):
使 x264 能够使用明确加权预测(explicit weighted prediction)来改善 P-frame 的压缩率。亦改善淡入/淡出的品质。模式越高越慢。

8x8dct (Adaptive 8x8 DCT):
弹性 8x8 离散余弦转换(DCT)使x264能够弹性使用 I-frame 的 8x8 转换。

cabac (CABAC: Context Adaptive Binary Arithmetic Coder):
弹性内容的二进制算数编码资料流压缩,禁用 CABAC 会切换回效率较低的弹性内容的可变长度编码(CAVLC:Context Adaptive Variable Length Coder)系统。大幅降低压缩效率(通常10~20%)和解码的硬件需求。

interlaced:
支援编码输出  interlaced 的视讯。

----------------------------------------------------------------

x264 preset

Preset 是个参数设定组,权衡压缩效率和编码速度

设定值越高 压缩效率越高 编码速度越慢
在自订品质模式(qp/crf)下,压缩率高代表 bitrate (位元速率) 越低
在自订位元速率(bitrate)下,压缩率越高则代表画质越高

若没有特殊需求使用
通常搭配 强制指定 Level 或 Reference frame 来限制输出 MaxDpbMbs 不会过高。

可用设定值: Ultra Fast (最快), Super Fast (超快), Very Fast (很快), Faster (较快), Fast(快速), Medium (中等), Slow (缓慢), Slower (较慢), Very Slow (很慢), Placebo (最慢)

由左至右 为 低至高

越高越好,建议设定值 > Medium,除非不在意压缩率

----------------------------------------------------------------

x264 tune

针对特定类型的影片微调参数设定值,以获得更好的品质或压缩率。

Film (电影): 胶片电影。
Animation (动画): 例如卡通/日本动画。
Grain (胶片颗粒): 颗粒感很重的影片。
Still Image (静止影像): 例如幻灯片效果的影片。
PSNR: 优化 PSNR 值。  Wiki
SSIM: 优化 SSIM 值。  Wiki
Fast Decode (快速解码): 用于低性能播放设备。 (※ 压缩率极低)
Zero Latency (零延迟): 处里时间低延迟。主要用于直播等。 (※ 压缩率极低)

----------------------------------------------------------------

H.264 Level

Level 、 MaxDpbMbs 直接表示了对播放设备的解码性能要求
值越高,代表播放设备解码性能要求越高,相对的输出影片的压缩率也越越高

MaxDpbMbs 对应的 Level


举例说明:
Level 3.2: MaxDpbMbs 20480 以下
Level 4.1: MaxDpbMbs 32768 以下


关系方程式:

强制指定 Level (限制 MaxDpbMbs),则
ref = Min(Floor(MaxDpbMbs / (PicWidthInMbs * FrameHeightInMbs)), 16)

ps. 1. Floor(x): 取整数,小数码直接舍去。 ex. Floor(1.9) = 1
ps. 2. Min(x, y): 取比较小的数值。 ex. Min(2, 5) = 2

强制指定 ref,则
MaxDpbMbs = PicWidthInMbs * FrameHeightInMbs * ref

PicWidthInMbs = Width / 16
FrameHeightInMbs = Height / 16
(小数直接进制)

举例 1:
当我设定输出为
‧Resolution: 1280x1720
‧Level: 不指定(自动)
‧Reference frame (ref): 4

则 MaxDpbMbs = 80 * 45 * 4 = 14400
对照上表,得 Level = 3.1

举例 2:
当设定输出为
‧Resolution: 1280x1720
‧Level: 3.1
‧Reference frame (ref): 不指定(自动)

ref = Min(Floor(18000 / (80 * 45)), 16) = Min(Floor(5.0), 16) = Min(5, 16) = 5

则输出 H.264 的 ref 可能为 4 或 5

同上,如果要同时强制指定 ref 与 level
则 ref 设定值不能大于 5
( 强制指定 ref 不能大于 Level 的限制)

详细说明(Wiki)

----------------------------------------------------------------

x264 Bitrate Control

指定输出品质: QP (VBR) 、 CRF (VBR)
指定输出 Bitrate / 档案大小: Single pass (ABR) 、 2-pass (VBR)

推荐使用 CRF,如果需要控制输出大小则用 1-Pass CRF + 2-Pass Bitrate
工具不支援,则用 Auto 2-pass

----------------

Custom Bitrate (自定位元率)
输出: Average Bit Rate (ABR, 平均位元率)

自订 Bitrate 控制输出 Size,直接编码输出视讯。
由于没有先扫描过一次,x264 无法得知影片各时间点的复杂程度。
当 x264 编码到影片后段时,画面可能比较复杂,需要比较多的 Bitrate 才能维持一定品质,
可能由于前面分配了的 Bitrate 已达或是超越使用者设定值,
x264 为了使输出 Bitrate 趋近使用者设定值,会下修 Bitrate ,会造成后段画质下降。

x264 没有原生 Constant Bit Rate (CBR, 常数码元率) 模式
但将 bitrate bufsize maxrate 三者设为相同数值
可以得到 CBR 或接近 CBR 的输出

----------------

Custom Bitrate (自定位元率), N-Pass
输出: Variable Bit Rate (VBR, 可变位元率)

自订 Bitrate 控制输出 Size
会先扫描影片,再进行编码输出视讯。
x264 先扫描过影片得知影片各时间点的复杂程度,
编码时依照影片各时间点的复杂程度分配 Bitrate,所以不会出现以上 ABR 的问题。
跑越多 Pass 输出结果会越靠近 CRF。
缺点是耗费大量时间。

----------------

Constant Quantizer (QP)
输出: Variable Bit Rate (VBR, 可变位元率)

范围: 0 - 69,值越小分配的 Biterate 越充足,则画质损失越少 (0 为无损)。
默认值: 23
建议使用 21 - 28。

指定一个数值当作品质,x264 将依据使用者设定值合理分配流量。

----------------

Constant Ratefactor (CRF)
输出: Variable Bit Rate (VBR, 可变位元率)

范围: 0 - 51.0,值越小分配的 Biterate 越充足,则画质损失越少。
默认值: 23
建议使用 18 - 26。

算是 QP 的强化版,依据人眼视觉品质做优化。
这是 x264 最佳的 VBR 输出模式

----------------

1-Pass CRF + 2-Pass Bitrate
输出: Variable Bit Rate (VBR, 可变位元率)

此方法目的是为了 2-Pass Bitrate 参考 CRF 的 Bitrate 分配方式。
先用 1-Pass CRF 编码输出档案,
如果不满意输出档案大小,再用 2-Pass Bitrate 修正,
档案大小符合需求的话,则不须进行 2-Pass Bitrate。
通常 GUI 不支援此方法,必须使用 CLI 手动设定。

----------------

参考资料:
http://www.techbang.com/posts/8659-compression-ratio-than-the-movie-why-is-vbr-better
http://forum.doom9.org/showthread.php?t=120264
http://www.nmm-hd.org/newbbs/viewtopic.php?f=8&t=696

----------------------------------------------------------------

x264 设定优先级

preset -> tune -> 使用者设定选项 -> fast first pass -> profile -> level

当参数冲突时,后者会取代前者或是影响前者

preset slower 的参数为:
--b-adapt 2 --direct auto --me umh
--partitions all --rc-lookahead 60
--ref 8 --subme 9 --trellis 2

当我设定
‧x264 Preset: Slower
‧Reference frame (ref): 4

等同于
--b-adapt 2 --direct auto --me umh
--partitions all --rc-lookahead 60
--ref 4 --subme 9 --trellis 2

输出 H.264 的 Reference frame (ref) 为 4

当我设定
‧x264 Preset: Slower
‧Level: 3.2

输出 H.264 的 Reference frame (ref) 为 5
(请参考上文 "H.264 Level" 部分)

----------------------------------------------------------------

参考资料

wiki/H.264/MPEG-4_AVC
NMM-x264设定
http://www.cnblogs.com/zyl910/archive/2011/12/04/x264_presets.html
GUI (图形接口) 工具接口介绍

以下依推荐程度排序 (越前面越推荐)

1. VidCoder
连结:  HomePage /  Downloads

(登入后即可检视图片)

2. Handbrake
连结:  HomePage /  Downloads

(登入后即可检视图片)

3. MeGUI
连结:  HomePage /  Downloads

(登入后即可检视图片)



CLI (命令列接口) 使用教学

使用 CLI 接口必须要会用基本的 CMD

CLI 使用说明:  这里
CMD 入门教学:  这里

----------------------------------------------------------------

基本用法

基本语法:
x264 [设定选项] -o <输出> <输入>


可以用 raw 输入,
或 YUV4MPEG (*.y4m)
或 Avisynth (*.avs, 需要有支援的编码版)
或 lavf / ffms 支援的输入格式

依指定附档名选择输出档案格式:
.264 -> Raw bytestream
.mkv -> Matroska
.flv -> Flash Video
.mp4 -> MP4 (需要有 GPAC 的编译版)

ex. 1.
x264 --crf 20 -o output.mkv input.m2ts

ex. 2.
x264 --profile high --preset veryslow --crf 18 --ref 4 --bframes 5 -o output.mp4 input.m2ts


----------------------------------------------------------------

Bitrate Control

指定 bitrate: --bitrate, -B
指定 quality (crf): --crf 
指定 quality (qp): --qp

Custom Bitrate (ABR):
x264 [设定选项] -B 1000 -o <输出> <输入>

Custom Bitrate, 2-Pass (VBR):
x264 [设定选项] -p 1 -B 1000 -o <输出> <输入>
x264 [设定选项] -p 2 -B 1000 -o <输出> <输入>

Constant Quantizer (QP):
x264 [设定选项] --qp 20 -o <输出> <输入>

Constant Ratefactor (CRF):
x264 [设定选项] --crf 20 -o <输出> <输入>

1st pass crf + 2nd pass bitrate:
x264 -p1 --stat "XXX.stat" --crf 20 --slow-firstpass [设定选项] -o <输出> <输入>
x264 -p2 --stat "XXX.stat" -B 1000 [设定选项] -o <输出> <输入>


如果不满意输出档案大小,再用 2-pass bitrate 修正
档案大小符合需求的话,则不须进行 2-pass bitrate

※ 1-pass 必需要用 --slow-firstpass

----------------------------------------------------------------

Filtering

--vf, --video-filter <filter0>/<filter1>/...

Filter options may be specified in <filter>:<option>=<value> format.

目前官方版只有以下三种 filters
crop:left,top,right,bottom
resize:[width,height][,sar][,fittobox][,csp][,method]
select_every:step,offset1[,...]

其他编译版常见 filters
hqdn3d:ls,cs,lt,ct
pad:[left][,top][,right][,bottom][,width][,height][,red][,green][,blue]
yadif:[mode][,order]


详细请参考
x264 -- fullhelp


语法1:
--vf crop:0,140,0,140/resize:width=1280,fittobox=width,method=lanczos

语法2:
--vf crop:0,140,0,140/resize:1280,,,width,,lanczos



Resize 范例:

ex. 1280x720 (PAR 1:1, DAR 16:9)
--vf resize:width=720,height=480,sar=1:1

ex. 1280xH (mod 2)
--vf resize:width=720,fittobox=width

ex. Letterbox, 720x480, PAR 40:33
--vf resize:width=720,height=480,sar=40:33,fittobox=both/pad:width=720,height=480


---------------------------------------------------------------

Frame Rate

x264 改变 fps 并不会舍弃或填补 Frames 维持 时间长度与影音同步
需要此功能的话可以使用 AviSynth 输入 or FFmpeg

范例:

如果确定输入是 CFR,强制输出 CFR
x264 [设定选项] --force-cfr -o <输出> <输入>

强制指定 fps (CFR: 23.976 fps)
x264 [设定选项] --fps 23.976 -o <输出> <输入>

强制指定 fps (CFR: 24000/1001 fps)
x264 [设定选项] --fps 24000/1001 -o <输出> <输入>

承上,强制指定 timebase
x264 [设定选项] --timebase 1001/24000 -o <输出> <输入>

使用 timecode 控制输出 fps
x264 [设定选项] --tcfile-in timecode.txt -o <输出> <输入>

承上,指定 timecode 的 timebase
x264 [设定选项] --timebase 1001 --tcfile-in timecode.txt -o <输出> <输入>


如果输入为 VFR,输出视讯为 Raw bytestream 时
可以汇出输入影片的 timecode 给 Muxer / Remuxer 使用

输出 timecode
x264 [设定选项] --tcfile-out timecode.txt -o <输出> <输入>


---------------------------------------------------------------

Piping

pipe A to B
A程式 [参数] | B程式 [参数]

A 的输出参数 与 B 的的输入参数 的 "值" 写 "-"
※ 要注意边解码工具是否支援 piping

如果需要使用 ffmpeg 的 Decoder / Filters

pipe ffmpeg to x264
ffmpeg -i input.mkv [设定选项] -f yuv4mpegpipe - | x264 [设定选项] --demuxer y4m -o <输出> -


FFmpeg 有含 x264 的编译版,瑞无特殊需求直接使用单一 FFmpeg 即可

x264 64bit 版无法使用 AviSynth (32bit)
改用 AviSynth 64bit 或是尝试以下方法

pipe ffmpeg(32bit) to x264
ffmpeg -i <输入AVS档> -f yuv4mpegpipe - | x264 [设定选项] --demuxer y4m -o <输出> -

pipe avs2yuv to x264
avs2yuv <输入AVS档> - | x264 [设定选项] --demuxer y4m -o <输出> -


---------------------------------------------------------------

相关连结

FFmpeg参考
avs2yuv
avs4x264mod
CLI - FFmpeg with libx264

基本上,FFmpeg 内建的 x264 与 x264.exe 相同参数的名称相同
只是写法/规则稍有差异

libx264选项

----------------------------------------------------------------

范编码例

x264 范例参数: profile high, preset veryslow, crf 18, ref 4, bframes 5

ex1. 内建 x264 编码
ffmpeg -i input.mkv -an -c:v libx264 -profile:v high -preset:v veryslow -crf 18 -x264opts ref=4:bframes=5 output.mp4

ex2. 内建 x264 编码 + copy audio
ffmpeg -i input.mkv -c:v libx264 -profile:v high -preset:v veryslow -crf 18 -x264opts ref=4:bframes=5 -c:a copy output.mp4

ex3. pipe ffmpeg to x264 (用在需要x264_10bit时,否则多此一举)
ffmpeg -i input.mkv -f yuv4mpegpipe - | x264 --profile:v high --preset:v veryslow --crf 18 --ref 4 --bframes 5 --demuxer y4m - -o output.mp4

x264 无损压缩

ex4. 内建 x264 无损压缩 RGB24
ffmpeg  -i rgb24.mkv -pix_fmt bgr24 -c:v libx264rgb -qp 0 output.mp4


----------------------------------------------------------------

Libx264 位元率控制

推荐 crf,如果需要控制输出大小则用 1-pass crf + 2-pass bitrate

1. Constant Ratefactor (CRF):
ffmpeg -i blu_ray.m2ts -c:v libx264 -crf 20 -c:a copy output.mkv

关键参数: -c:v libx264 -crf xx


2. Custom Bitrate (ABR):
ffmpeg -i blu_ray.m2ts -c:v libx264 -b:v 1000k -c:a copy output.mkv

关键参数: -c:v libx264 -b:v xxxk


3. Custom Bitrate, 2-Pass (VBR):
:1st-pass
ffmpeg -i blu_ray.m2ts -an -pass 1 -passlogfile text.log -fastfirstpass 0 -c:v libx264 -b:v 1000k -f null -
:2rd-pass
ffmpeg -i blu_ray.m2ts -pass 2 -passlogfile text.log -c:v libx264 -b:v 1000k -c:a copy output.mkv

关键参数: -pass n -passlogfile xxx.log -c:v libx264 -b:v xxxk


4. 1st pass crf + 2nd pass bitrate:

因为 crf 的 bitrate 分配方式是最佳的
这么做为了让 2-pass 参考 crf 的 bitrate 分配方式
效果与 crf 相同,多了 2-pass 可修正输出大小

步骤 1: 1-pass crf
ffmpeg -i blu_ray.m2ts -an -pass 1 -passlogfile text.log -fastfirstpass 0 -c:v libx264 -crf 20 -f null -

步骤 2: 2-pass bitrate
ffmpeg -i blu_ray.m2ts -pass 2 -passlogfile text.log -c:v libx264 -b:v 1000k -c:a copy output.mkv

关键参数(1): -pass 1 -passlogfile xxx.log -c:v libx264 -crf xx
关键参数(2): -pass 2 -passlogfile xxx.log -c:v libx264 -b:v xxxk

在 "步骤 1: 1-pass crf" 可以设定输出档案
如果不满意输出档案大小,再用 2-pass bitrate 修正
档案大小符合需求的话,则不须进行 2-pass bitrate
其他 x264 编译版

详情请下载后用 x264 --fullhelp

1. x264.nl
http://mirror01.x264.nl/

2. x264kMod
http://komisar.gin.by/

3. POP@4bit
http://pop.4-bit.jp/
http://pop.4-bit.jp/bin/x264/
封锁日本国外IP,需要使用代理服务器

4. x264tMod
http://www.nmm-hd.org/newbbs/viewtopic.php?f=8&t=219
此编译版多了 VSFilter
常见设备

以下参数组以设备的极限播放能力为准,请搭配 x264 preset 使用


AVCHD
--profile high --level 4.1 --bluray-compat --open-gop --slices 4 --vbv-bufsize 14000 --vbv-maxrate 14000

Blu-ray
--profile high --level 4.1 --bluray-compat --open-gop --slices 4 --vbv-bufsize 30000 --vbv-maxrate 30000

DivX Plus HD
--profile high --level 4.0 --vbv-bufsize 25000 --vbv-maxrate 20000

DXVA
--profile high --level 4.1 --vbv-bufsize 78125 --vbv-maxrate 62500

iPhone 2G
--profile baseline --level 1.3 --ref 1 --vbv-bufsize 2000 --vbv-maxrate 768

iPhone 3G/3GS, iPod dassic, iPod touch 1/2/3, iPod nano
--profile baseline --level 3.0 --ref 1 --vbv-bufsize 10000 --vbv-maxrate 10000

iPhone 4, iPad 1/2, iPod touch 4/5
--profile main --level 3.1 --vbv-bufsize 14000 --vbv-maxrate 14000

iPhone 4S/5, iPad 3/4/mini, WDTV
--profile high --level 4.1 --vbv-bufsize 78125 --vbv-maxrate 62500

iPod nano 7
--profile high --level 3.0 --vbv-bufsize 12500 --vbv-maxrate 12500

PS3
--profile high --level 4.1 --vbv-bufsize 31250 --vbv-maxrate 31250

PSP
--profile main --level 3.0 --b-pyramid none --vbv-bufsize 10000 --vbv-maxrate 10000

Xbox 360
--profile high --level 4.1 --vbv-bufsize 24000 --vbv-maxrate 24000

※ 参考自 MeGUI

PSV (Version 1.80)
--profile high --level 4.1 --vbv-bufsize 17500 --vbv-maxrate 17500

※ 参考自  http://pop.4-bit.jp/?p=5923
你好
感谢你的教学
我经常会剪裁影片(去头去尾)
ffmpeg -hide_banner -i "test.MOV" -ss 00:55 -t 00:10 -c:v libx264 -
x264-params crf=22 -an "test.mp4"



要剪10秒的影片我会设crf=22
要剪15秒的影片我会设crf=23
这样有点麻烦

我一直想改成控制输出大小不大于20MB
但一直不成功
不知该如何修改
谢谢
I love Vancouver!
kobenein wrote:
要剪10秒的影片我会设crf=22
要剪15秒的影片我会设crf=23
这样有点麻烦
我一直想改成控制输出大小不大于20MB

首先 1st-pass crf

ffmpeg -i input.mkv -an -ss 00:55 -t 00:10  -pass 1 -passlogfile text.log -codec:v libx264 -x264opts crf=22 output.mp4

如果输出小于 20MB,则到此为止
如果输出大于 20MB,则删除输出影片,再跑 2nd-pass 指定位元率来强制输出大小

20 MiB = 8 * 20 Mib = 8 * 20 * 1024 * 1024 bits = 167772160 bits

P.S. 这边 Ki = 1024, Mi = 1024 K, 1 byte (B) = 8 bits (b)

bitrate = 167772160 bits / 10 sec = 16777216 bps = (16777216 / 1000) * K bps ~= 16777 K bps

P.S. 这边 K = 1000, M = 1000 K

ffmpeg -i input.mkv -an -ss 00:55 -t 00:10  -pass 2 -passlogfile text.log -codec:v libx264 -b:v 16777k output.mp4

这样 2nd-pass 会参考 crf 22 的 bitrate 分配方式 等比例缩小到 16777 K bps
kingdragon wrote:
首先 1st-pas...(恕删)


感谢
有成功了
不过我实际上是用 165000K / 秒数
不然还是蛮容易超过20MB的
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值