『漫游』酷论坛>『影音数码技术学习交流』>[求助]写AVS压RMVB产生 ..
ralphgu@2004-12-25 17:01
引用
最初由 wolfsoft 发布
changefps是自动添加或删除null帧,但能否处理干净未知
selectevery只是单纯地提取帧,整齐划一地对帧率进行缩小.
:eek: 但是120的祯率分布有那么均匀么……万一都是NULL怎么办……
用SELECTEVERY的话……
ralphgu@2004-12-25 17:04
引用
最初由 wolfsoft 发布
接口错误?是不是没装相应的编码解码器啊.光是ffdshow未必管用.
突然想起还有一种可能...也许那根本就不是AVI格式的(只有我这么不厚道的人才能想到啊,嘿嘿)
字幕用写字板打不开就用记事本试试,实在不行还有UE一类的万能编辑器.
:confused: 我以前下了个GIG的DVDRIP的SP14集…… AVICODEC,GSPOT都不能看编码……
最近又下了个头文字D第一季的21集……rmvb……结果同上……:mad: 超级郁闷一记
wolfsoft@2004-12-25 18:52
引用
最初由 ralphgu 发布
:eek: 但是120的祯率分布有那么均匀么……万一都是NULL怎么办……
用SELECTEVERY的话……
当然没那么均匀的,否则做120纯属RP有问题给人找麻烦(日本职人里确实有这样的).
也不可能都是null,一般来说都是1空4或1空3,分别对应24和30,个别情况会1空1,对应60.,不管怎么说吧,如果是selectevery(5,0),就会在30的地方每4帧少取1实际帧;而如果用selectevery(4,0),就会在24的地方每4帧多取1null帧.如果变化的部分比较少,那么由此产生的顿滞就几乎看不出来(很少有人能看出来吧,除非你一帧一帧地走).另一方面,由于动画本身是24帧的,30只存在于激烈动作(这样的部分即使在MPEG2流里也是帧帧有变化)或者CG,是少数派,所以推荐使用selectevery(5,0),否则把大部分24做成30就是毫无意义.
tct66@2004-12-25 18:56
不需要用TmpgEnc+VFAPI,WMV/RMVB如果要用avs才需要
如果是VBR/ABR MP3的avi,試試
AviSource("wmv9-120fps.avi").ensurevbrmp3sync
changefps(23.976)
其實不加ensurevbrmp3sync,應該也是可以
selectevery(5,0)這個指令,如果一開使op是120fps的30P
那麼一定掉禎得比changefps(23.976)還嚴重
而且120FPS的24P畫面也可能出現掉禎的情形
所以最簡單的是使用changefps(23.976)
最完美的處理方法是用sswroom的aviread分析那裡是24P/30P/60P
再分段處裡
次等的處理方法是重製成VFR的mkv再壓制成rmvb
VDM+avs[changefps(29.970)]+decombvfr->avi->
mkvmerge(timecodes)->VFR MKV
wolfsoft@2004-12-26 00:12
人家一开头就说了changefps会异步,怎么还在这推荐changefps啊
用selectevery也会让120中的24掉?怎么个掉法?请指教
而且我说了现在的动画,30的只占全篇很少一部分,就算是30的OP又如何?那么多30的OP的DVD被人弄成24的DVDRIP,大家不照样看的不亦乐乎?
这只是网友自己压RM玩啊大哥,有必要弄那么麻烦吗?又不是开到1000k以上做DVDRIP.你绕那一大圈我看跟用TMPG也差不多啊
unranger@2004-12-26 01:09
感觉SelectEvery(5, 0)可以的话ChangeFPS(23.976)没理由不行的...
楼主来说一下用AviSource("***").EnsureVBRMP3Sync().ChangeFPS(23.976)到底行不行a...
adamhj@2004-12-27 11:16
楼上正解,用EnsureVBRMP3Sync()才是正道。
小狼啊,我记得我和你说过changefps和selectevery几乎是一样的吧,不信你去试试吧,现视研04,用changefps出来的不同步,用selectevery出来的照样不同步。
对avs而言就没有什么null帧的概念,avs只是个frameserver,它只是对每帧的数据(图象)进行变换,但对于帧的类型根本不管,因为帧的类型是对编码而言的。changefps其实就是按比例取帧,只不过这个比例不一定是整数而已,因为用了浮点运算可能会有0~1帧的偏差,但不足以造音视不同步。
wxl_man@2004-12-27 16:12
引用
最初由 yellowsaint 发布
另外,用MKVEGUI提取某些MKV的字幕,怎么会发生成功提取出来的字幕用写字板打不开?是不是因为MKV本身有问题?
用mkvgui取字幕会不会取不完整??
我在取c2得星界时就遇到取出得字幕压出得rmvb里有些地方没有字幕但是原来mkv里却一点不少,是不是要自己补上??
weilai@2004-12-27 17:17
對於 changefps 的 去Null frame 之說
左看右看 AVS源碼
的確看不怎麼出來有"智慧型"除Null frame的模樣
不過其實不能就此定論changefps沒有去Null frame的作用
並且因為源碼有無最佳化也是個問題(有最佳化的話就不易看不出來的說)
P.S.此時只有實做及用工具來證實才可定调
不過就NULL Frame處理原則其 FRAME_SIZE = 0
AVS: GetFrame 式子為 int((n * a + (b>>1)) / b) = int((vi.num_frames * b + (a >> 1)) / a)
P.S. n 代表 #.n frame,a、b 代表 changefps 的 FPS參數,一個是分子一個是分母,通常大家寫的 .avs 只有一個參數,但透過SetFPS AVS sever 會自動修正其值
所以 如果 #.2 frame 是Null 的話
GetFrame 所取的 frame數據就不會是 #.2 frame (也就是去Null frame)
但如果是一個連續 Null 的情況就不是這樣了...
作者用小小的式子就達到去Null 的作用,是看穿了 Null frame 不大會有連續相連的情況(其實就算是連續相連以NULL常發生的情況而言還是有達到去 Null frame 的作用)
unranger@2004-12-27 17:24
引用
用mkvgui取字幕会不会取不完整??
我在取c2得星界时就遇到取出得字幕压出得rmvb里有些地方没有字幕但是原来mkv里却一点不少,是不是要自己补上??
不会
丢失字符是因为demux字幕时用的字符集不对...星界好像应该用UTF-8吧..用GB2312的话遇到非简体中文字符时就会出问题
蓝色橘右京@2004-12-27 19:14
changefps和selectevery还是有区别的,帧率会不一样,可以去试试,反正整个用changefps和selectevery都不会正确,但如果是分段用selectevery就比changefps要正确!
adamhj@2004-12-27 19:58
引用
最初由 weilai 发布
對於 changefps 的 去Null frame 之說
左看右看 AVS源碼
的確看不怎麼出來有"智慧型"除Null frame的模樣
不過其實不能就此定論changefps沒有去Null frame的作用
並且因為源碼有無最佳化也是個問題(有最佳化的話就不易看不出來的說)
P.S.此時只有實做及用工具來證實才可定调
不過就NULL Frame處理原則其 FRAME_SIZE = 0
AVS: GetFrame 式子為 int((n * a + (b>>1)) / b) = int((vi.num_frames * b + (a >> 1)) / a)
P.S. n 代表 #.n frame,a、b 代表 changefps 的 FPS參數,一個是分子一個是分母,通常大家寫的 .avs 只有一個參數,但透過SetFPS AVS sever 會自動修正其值
所以 如果 #.2 frame 是Null 的話
GetFrame 所取的 frame數據就不會是 #.2 frame (也就是去Null frame)
但如果是一個連續 Null 的情況就不是這樣了...
作者用小小的式子就達到去Null 的作用,是看穿了 Null frame 不大會有連續相連的情況(其實就算是連續相連以NULL常發生的情況而言還是有達到去 Null frame 的作用)
我没看懂,不知道weilai为什么会认为null frame会被去掉
adamhj@2004-12-27 20:07
引用
最初由 蓝色橘右京 发布
changefps和selectevery还是有区别的,帧率会不一样,可以去试试,反正整个用changefps和selectevery都不会正确,但如果是分段用selectevery就比changefps要正确!
只要参数没设错最后的帧率肯定是一样的,只是可能总帧数可能会有几帧的差别(而且我们平常遇到的情况应该不会超过1帧)
weilai@2004-12-27 22:22
GetFrame 是得到 frame 資料的涵式
int((n * a + (b>>1)) / b) 是告知要得到 frame 編號的式子
a、b 是新的 FPS 參數
n 是frame 編號計數器(範圍限制在 args[1].AsFloat() 到 16777216)
P.S. 而其實內部還有一些運算轉換,所以確實的式子原理在此不多做詳解
就 MSDN 資料庫文
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csalpha98/html/3.1_procedure_types.asp
可知 NULL Frame 是做不出frame 還原資料的(FRAME_SIZE = 0、ENTRY_LENGTH = 0)
所以(假設) [1][2][3][N][5] 還原就變成
[1 Frame][2 Frame][3 Frame][][5 Frame] 相當於 [1 Frame][2 Frame][3 Frame][5 Frame]
P.S. [] 實際上是沒有的"東西",因為根本沒有資料可運算出來"東西"
而就排列而言
還原後的編號4(#.4)frame 的內容是 [5 Frame]
如此不就是去Null frame
不過以上只是個人想法,因為對影視架構也不是全盤知悉
所以以上言論不敢100%下定論
adamhj@2004-12-27 23:05
weilai你可以去看看avisource的源码,当读到null frame的时候会返回这个frame之前最近的一个可读帧,directshowsource的源码我没看,但我估计也是一样的,对avs来说,source一读进来以后就无所谓是否是null frame了,所以之后的处理都会作为普通帧(其实就是和前一帧重复的帧)来处理,而不会丢弃掉。
«1234»共4页
| TOP