版面规则
提问时请注意:尽量详细描述操作过程、AVS脚本内容等,最好能写出片名,只贴图有时无法看出问题原因。
提示:发布原创内容请尽量使用附件上传。使用网盘会出现过期失效的问题,请注意。
techneek
帖子: 8
注册时间: 2012-10-30 21:17

为什么要索引?

之前压DVD的时候,经常用到索引DVD2AVI,现在已经进化到DGindex了。当时对索引的认识,仅仅是把多个VOB文件连接起来,顺便还能IVTC,或者Demux音轨之类的。
到了BD时代,可能对于M2TS,索引也是必要的。

但是现在有些压制组似乎在压制一些单个文件的片源时,例如普通的TS,甚至是MKV的时候,也会用到索引。我不明白这种单个文件的片源为何需要索引呢?

索引究竟能带来什么好处呢?相比直接调用directshowsource()有什么优势呢?
264768502
核心会员
核心会员
帖子: 402
注册时间: 2010-09-23 17:38

Re: 为什么要索引?

相比起DSS,那些做索引的frameserver更稳定
头像
mawen1250
核心会员
核心会员
帖子: 670
注册时间: 2011-07-24 20:33

Re: 为什么要索引?

ts、m2ts内部不包含index,所以如果读取前不做index就完全没法保证准确的解码,也就是必然会RP(例如DSS、DSS2)。但即便是做index,如果demuxer不当也是会RP的,例如eac3to和ffms2默认的haali demuxer就容易出问题,ffms2做index时指定demuxer="lavf"再配合解码时seekmode=-1和threads=1是能够保证progressive源解码的正确性,如果是要重封装为mkv则应该用ffmpeg之类基于lavf的demuxer做而不是eac3to。
而正常的mkv内部是有index所以不需要做index也是能够准确解码的(但方法不当也依然存在RP的可能性)。
264768502
核心会员
核心会员
帖子: 402
注册时间: 2010-09-23 17:38

Re: 为什么要索引?

=.= 也没那么吓人吧 必然RP什么的...
头像
06_taro
核心会员
核心会员
帖子: 998
注册时间: 2010-09-22 18:32
来自: United Kingdom
联系: 网站

Re: 为什么要索引?

這麼說吧,譬如我一個濾鏡要請求文件的第1000幀,我如何知道這個第1000幀的數據在這個文件的什麼位置?

如果格式頭部自帶index,要請求第1000幀,就可以從頭部讀取index,然後找到第1000幀的entry point,直接跳到那個位置,然後解碼取出第1000幀

如果格式沒有自帶index,我該怎麼辦?根據文件總幀數和體積猜測到底在哪兒?甚至有些格式連總幀數都沒有時怎麼辦?從頭開始解碼一直解碼到第1000幀麼?如果這樣的話我突然要非線性請求第100000幀又怎麼辦?

所以需要有一個index的過程,將整個文件分析一遍,之後就知道每一幀在文件中的位置,之後請求幀的時候可以順利進行。和有幾個文件沒有關係,只和格式本身有沒有內建index相關。

理論上像mkv、mp4這種文件是不需要預先index的,直接從頭部就可以讀取entry point,像DSS2讀取mkv或者LSMASHVideoSource讀取mp4那樣。ffms2能力有限不管啥東西都要index一遍是它自己的問題(DGNV讀mkv/mp4也是一樣)。就算是多個文件合併,只要知道每個文件的entry point list,跳到後面的文件只需要將需要的幀號計算出來就行了,同樣不會產生index的需要。
つまんねー事聞くなよ!

I, personally, for me, believe (obviously sometimes) that my OS choice is right. That's me. I'm not telling you that you should believe it. Learn the facts, and the origins behind the facts, and make up your own damn mind. That's why you have one. (source)

Follow me: @06_taro

304——
为纪念伟大的宇宙史上最强压制304先生,联合国教科文组织决定,将每年的第304天,即平年的10月31日或者闰年的10月30日,定为世界304日。
techneek
帖子: 8
注册时间: 2012-10-30 21:17

Re: 为什么要索引?

不是吧,预览的时候是有可能出现楼上说的情况,但是压片的时候肯定是从头压到尾的,不存在seek啊,就按顺序一帧一帧的demux出来还能出错吗?
头像
msg7086
帖子: 600
注册时间: 2011-02-19 0:49

Re: 为什么要索引?

techneek 写了:压片的时候肯定是从头压到尾的
如果是「真·果压」的话,当然可以不用做索引直接压。
Delogo LGD Collections 各种台标下载 | Home Of VapourSynth Evolution

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

Re: 为什么要索引?

msg7086 写了:
techneek 写了:压片的时候肯定是从头压到尾的
如果是「真·果压」的话,当然可以不用做索引直接压。
什么叫「真·果压」???作为80后的老年人,行话我听不懂啊~ {:cat_3}
头像
06_taro
核心会员
核心会员
帖子: 998
注册时间: 2010-09-22 18:32
来自: United Kingdom
联系: 网站

Re: 为什么要索引?

从头到尾不代表一定是线性seek。很多时候滤镜本身会要求一个前后帧序列,但是它不一定内部cache好。更不用提使用了Trim、Splice等NL操作的情况。

即使你是真的从头至尾的线性seek,Haali或者dshow滤镜的工作机制仍然会导致frame accuracy受影响:

像DSS2之类的源滤镜为了可以让非线性seek的滤镜正常工作,自己使用了一个在任何情况下对于请求帧都在当前GOP(如果可以获取的话)内像前后做一次framecount correction的机制,即使你是完全裸压根本不需要它这么做的情况。因为DSS2不知道你后面想怎么做,它始终使用统一的处理方式。问题是这个基于Haali的correction,本身就经常是错误的。Haali RP最简单的一个例子,eac3to parsing文件的时候会报告总共有多少帧,这就是Haali demuxer计算出来的,然后你可以拿它与DGNV做index的结果比较,很多m2ts通过这样比较一下都能发现有几帧的差距,这就是Haali的RP…

DSS的话本身倒没有这种Haali引起的问题,但是不管是DSS还是DSS2,都有另外一个麻烦,就是走dshow滤镜。dshow机制是用来给实时播放设计的。实时播放不需要frame accurate,而更需要的是快速计算/推测出帧可能在的位置以实现快速跳转,所以dshow滤镜对于无index的格式使用这种推测出来的结果可能会相差几帧,对播放来说不算什么问题。但是压制需要frame accurate时这种机制就很不可靠了。和DSS2里Haali一样,滤镜本身不知道你压制的时候是不是完全线性的,所以即使之后是完全线性处理,它们还是使用自己的机制来获取帧,然后得到的结果就有可能会偏差。
つまんねー事聞くなよ!

I, personally, for me, believe (obviously sometimes) that my OS choice is right. That's me. I'm not telling you that you should believe it. Learn the facts, and the origins behind the facts, and make up your own damn mind. That's why you have one. (source)

Follow me: @06_taro

304——
为纪念伟大的宇宙史上最强压制304先生,联合国教科文组织决定,将每年的第304天,即平年的10月31日或者闰年的10月30日,定为世界304日。
头像
msg7086
帖子: 600
注册时间: 2011-02-19 0:49

Re: 为什么要索引?

techneek 写了:什么叫「真·果压」???作为80后的老年人,行话我听不懂啊~ {:cat_3}
正如taro巨巨所说,如果你不加任何滤镜(特别是spatial滤镜),直接压的话,一般不需要做indexing直接压没什么问题。

但是有很多滤镜都会向前向后预读一些帧,比如你在处理第1帧的时候,说不定会抓出第2、3帧来做计算,那么对于一些文件就很容易RP。

另外,如果你真的不需要加滤镜的话,连AVS都不用过,直接喂给x264就好了,何必再多此一举走directshowsource呢
Delogo LGD Collections 各种台标下载 | Home Of VapourSynth Evolution

<回答が無い理由>
1. 誰も知らない
2. 質問文が意味不明
3. 知ってるが、お前の態度が気に入らない
4. 良いボケが思いつかない

回到 “AviSynth”