准备工具
- x265-Yuuki版,Asuna或Yuuki分支皆可。
- gop_muxer,下载可至https://github.com/msg7086/gop_muxer/releases。
x265输出时后缀为.gop,即可输入分段文件。
代码: 全选
例: x265 --crf 20 -o out.gop in.avs
gop_muxer可将gop文件封装为mp4,输出文件和最后一个输入文件同名。
代码: 全选
例: gop_muxer gops\out.gop gops\out2.gop
注意:同名文件将会被覆盖,并且不会有任何提醒!
文件结构组成
代码: 全选
mv\mv.gop
mv\mv.headers
mv\mv.options
mv\mv.data-0
mv\mv.data-240
mv\mv.data-480
mv\mv.data-575
mv\mv.data-815
- *.gop —— 文件索引,包含所有数据文件和头文件的文件名。
- *.headers —— x265输出的裸流文件头,包含SPS PPS VPS SEI等数据。二进制文件。
- *.options —— x265输出给封装程序的选项,包含FPS VUI等数据。
- *.data-* —— 帧数据。横线后的数字为GOP的起始帧编号。
高级用法之断点续压
场景:电网断电;内存不足崩盘;熊孩子捣乱等。
做法:
- 找到最后一个data文件,例如mv.data-12345,这个12345便是最后一个GOP的起始点。
- 修改AVS,在最后加上trim(12345,0)。Vapoursynth同理。
- 修改输出文件名,例如mv2.gop,然后继续压制。
- 用编辑器打开mv.gop,删除最后一行mv.data-12345,然后保存。
- 压制完成后,用 gop_muxer mv.gop mv2.gop 获得完整的文件。
高级用法之分段压制
场景:CPU太多,AVS太慢;服务器太多,资源无法有效利用等。
做法:
- 在视频中的合适位置找到场景切换作为关键帧。
例:3000帧的片分为4段,分别找到770-1490-2304帧的场景切换作为关键帧。 - 复制AVS为4份,分别加上合适的切割代码,例如mv3.avs加上trim(1490,2303)。Vapoursynth同理。
- 分别运行x265,在不同的CPU或不同的服务器上压制,得到4组输出视频。
- 压制完成后,用 gop_muxer mv1.gop mv2.gop mv3.gop mv4.gop 获得完整的文件。
高级用法之边压边播
场景:检查已压制视频是否播放正常。
做法:
- 在压制进行中时,用 gop_muxer ×.gop 可直接获得压制完成部分的文件。
要避免花屏,可以复制gop到新的文件,等待当前gop压制完毕后再封装。
其它
gop_muxer会自动跳过不存在的gop文件,因此可以在最后指定一个不存在的文件来更改输出文件名。
代码: 全选
例: gop_muxer gops\mv1.gop gops\mv2.gop pikachu.gop
注意:同名文件将会被覆盖,并且不会有任何提醒!
x265与gop_muxer对VFR的支持都不好,若需要VFR请自行用其他工具导入时间戳。
与其他方案相比较的优势
- 断点续压,与MKV方案相比:
MKV切割拆流位置不精确,找断点比较费力;合并文件时会留下额外的头信息帧。
-- - 分段压制,与MP4/MKV合并方案相比:
合并文件时会留下额外的头信息帧,曾经有遇到过播放器在合并点崩溃的情况。
gop_muxer会自动跳过头信息帧,因此输出的文件和不分段压制出的文件结构相同。
-- - 边压边播,与MKV方案相比:
不依赖播放器打开不完整文件的偶然性;不依赖MKV输出(意味着不用忍受过时的Haali Muxer带来的各种问题)。
封装完的临时MP4文件与最终输出的成品文件完全相同。