头像
msg7086
帖子: 600
注册时间: 2011-02-19 0:49

关于x265-Yuuki中实现的GOP-Based断点续编码的一些简要介绍说明

之前为了实现自己的一些需求,所以给x265加入了GOP-Based输出补丁,可以实现断点续压、分段压制、边压边播、篡改数据包等效果,可谓是各位压制大佬的拆楼挖沟利器。然而一直懒癌发作,一直没有花时间来写这篇说明书。现在算是补上。

准备工具 基本用法
x265输出时后缀为.gop,即可输入分段文件。

代码: 全选

例: x265 --crf 20 -o out.gop in.avs
注意:分段文件会很多,建议先新建一个文件夹,然后把gop文件放入其中,即 -o gops\out.gop。

gop_muxer可将gop文件封装为mp4,输出文件和最后一个输入文件同名。

代码: 全选

例: gop_muxer gops\out.gop gops\out2.gop
将得到包含两段视频的文件gops\out2.mp4。
注意:同名文件将会被覆盖,并且不会有任何提醒!

文件结构组成

代码: 全选

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的起始帧编号。
断点续压时,可以通过编辑gop文件索引来达到选择性删除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
会将两个视频合并封装至pikachu.mp4中。
注意:同名文件将会被覆盖,并且不会有任何提醒!

x265与gop_muxer对VFR的支持都不好,若需要VFR请自行用其他工具导入时间戳。

与其他方案相比较的优势
  • 断点续压,与MKV方案相比:
    MKV切割拆流位置不精确,找断点比较费力;合并文件时会留下额外的头信息帧。
    --
  • 分段压制,与MP4/MKV合并方案相比:
    合并文件时会留下额外的头信息帧,曾经有遇到过播放器在合并点崩溃的情况。
    gop_muxer会自动跳过头信息帧,因此输出的文件和不分段压制出的文件结构相同。
    --
  • 边压边播,与MKV方案相比:
    不依赖播放器打开不完整文件的偶然性;不依赖MKV输出(意味着不用忍受过时的Haali Muxer带来的各种问题)。
    封装完的临时MP4文件与最终输出的成品文件完全相同。
Delogo LGD Collections 各种台标下载 | Home Of VapourSynth Evolution

<回答が無い理由>
1. 誰も知らない
2. 質問文が意味不明
3. 知ってるが、お前の態度が気に入らない
4. 良いボケが思いつかない
ceshiwenfq
帖子: 19
注册时间: 2017-06-02 1:04

Re: 关于x265-Yuuki中实现的GOP-Based断点续编码的一些简要介绍说明

你好,感谢说明,试了一下没实现,请问哪里错了
传参:
vspipe.exe --y4m test.vpy - |"x265-10b.exe" --y4m -D 10 --crf 20 --preset medium -o test.gop -
header、gop、option文件生成成功,但所有帧信息都集中到data-0里,跑了三四千帧,都只有一个data-0文件。
测试版本2.6asuna和2.7yuuki
头像
msg7086
帖子: 600
注册时间: 2011-02-19 0:49

Re: 关于x265-Yuuki中实现的GOP-Based断点续编码的一些简要介绍说明

--no-open-gop 试一下。
Delogo LGD Collections 各种台标下载 | Home Of VapourSynth Evolution

<回答が無い理由>
1. 誰も知らない
2. 質問文が意味不明
3. 知ってるが、お前の態度が気に入らない
4. 良いボケが思いつかない
litfal
帖子: 32
注册时间: 2012-05-13 17:17

Re: 关于x265-Yuuki中实现的GOP-Based断点续编码的一些简要介绍说明

這簡直神器!
救了我等RP狗...
以前CPU差的時候編碼器崩潰,內心也跟著崩潰了

現在也能幫我分段壓那些16C32T用不完的超高解析度片源

另外好奇,有沒有可能跑一個 1pass生成stats,
再解析 stats 找出 2個或數個適合切割的點
我覺得可能是找碼率的峰值,或是碼率變率的峰值,在那邊切不會損失太多壓縮率或畫質
头像
msg7086
帖子: 600
注册时间: 2011-02-19 0:49

Re: 关于x265-Yuuki中实现的GOP-Based断点续编码的一些简要介绍说明

这个有点介入太多了,不是很想去实现。本来2pass就很少用到,特别是avs运算量比较大的时候,更得不偿失了。

原本自己avs挂载一下找到合适的分断点就不难。
Delogo LGD Collections 各种台标下载 | Home Of VapourSynth Evolution

<回答が無い理由>
1. 誰も知らない
2. 質問文が意味不明
3. 知ってるが、お前の態度が気に入らない
4. 良いボケが思いつかない
litfal
帖子: 32
注册时间: 2012-05-13 17:17

Re: 关于x265-Yuuki中实现的GOP-Based断点续编码的一些简要介绍说明

我發現如果處裡的是高解析度(4Kx4K) 與高FPS (90) 的源,似乎就不會切割.data檔了,會一個壓到底
头像
msg7086
帖子: 600
注册时间: 2011-02-19 0:49

Re: 关于x265-Yuuki中实现的GOP-Based断点续编码的一些简要介绍说明

litfal 写了: 2018-03-31 0:05 我發現如果處裡的是高解析度(4Kx4K) 與高FPS (90) 的源,似乎就不會切割.data檔了,會一個壓到底
还是请检查一下是否正确生成了IDR帧 —— 也就是,opengop是否正确关闭了。
Delogo LGD Collections 各种台标下载 | Home Of VapourSynth Evolution

<回答が無い理由>
1. 誰も知らない
2. 質問文が意味不明
3. 知ってるが、お前の態度が気に入らない
4. 良いボケが思いつかない
K19
帖子: 1
注册时间: 2018-05-08 14:03

Re: 关于x265-Yuuki中实现的GOP-Based断点续编码的一些简要介绍说明

我投在线网站所以只能x264,但是压制时CPU喂不饱,想问下这种分段压制在x264下有没有实现?
头像
msg7086
帖子: 600
注册时间: 2011-02-19 0:49

Re: 关于x265-Yuuki中实现的GOP-Based断点续编码的一些简要介绍说明

K19 写了: 2018-05-08 14:05 我投在线网站所以只能x264,但是压制时CPU喂不饱,想问下这种分段压制在x264下有没有实现?
可以的,把我的补丁包移植到x264后编译即可。gop_muxer可能也需要修改以适应avc的头包。
Delogo LGD Collections 各种台标下载 | Home Of VapourSynth Evolution

<回答が無い理由>
1. 誰も知らない
2. 質問文が意味不明
3. 知ってるが、お前の態度が気に入らない
4. 良いボケが思いつかない
头像
Niconeiko
帖子: 7
注册时间: 2018-11-07 21:31
联系: 网站

Re: 关于x265-Yuuki中实现的GOP-Based断点续编码的一些简要介绍说明

av1或许可以通过这种方式实现多线程压制...

回到 “视频编码器 / Video encoder discussion”