分页: 1 / 1

【求助】avs4x264mod管道出现timecode问题

发表于 : 2012-07-03 1:02
yabbay
这是在压10bit时候出现的问题 片源用的mkv
管道这样调用的(seek moe fast和safe一样不行)
avs4x264mod --x264-binary x264_10b --seek-mode safe --level 5.1 --crf 21.5 ......(中略)........ --tcfile-in "XXX.txt" --stats ".stats" -o "XXX.mp4" "XXX.avs"
avs这样调用timecode的
FFVideoSource("B:\XXX.mkv",timecodes = "B:\XXX.txt")
错误信息是

avs [info]: AviSynth 2.60, build:May 25 2011 [19:58:41]
avs [info]: Video colorspace: YV12
avs [info]: Video resolution: 1024x576
avs [info]: Video framerate: 24012/1001
avs [info]: Video framecount: 33390
avs4x264 [info]: "x264_10b" --level 5.1 --crf 21.5 ......(中略)........ --tcfile-in B:\XXX.txt --stats .stats -o B:\XXX
_v.mp4 --frames 33390 --timebase 1001 --input-res 1024x576 --input-csp i420
raw [info]: 1024x576p 0:0 @ 25/1 fps (cfr)
timecode [error]: automatic timebase generation failed.
Specify an appropriate timebase manually.
x264 [error]: timecode input failed
avs [error]: Error occurred while writing frame 0
(Maybe x264 closed)
请按任意键继续. . .

查看timecode确实生成了

如果去掉avs4x264mod直接压的话 x264_10b --level 5.1 --crf 21.5 ......(中略)........ --tcfile-in "XXX.txt" --stats ".stats" -o "XXX.mp4" "XXX.avs"
信息为正常
avs [info]: 1024x576p 0:0 @ 24012/1001 fps (cfr)
timecode [info]: automatic timebase generation 1/1000
x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2
x264 [info]: profile High 10, level 5.1, 4:2:0 10-bit
[0.1%] 23/33390 frames, 0.54 fps, 12.57 kb/s, eta 17:06:23

片源并不是都不行 正片虽然出现管道无法输入timecode的问题 同一部动画的OP ED则可以
这是片源的大致信息
General
Unique ID : 174707109108159013454381206904475269553 (0x836F5D83D56F9CFFA9A15ED437A4B9B1)
Complete name : B:\XXX.mkv
Format : Matroska
Format version : Version 2
File size : 348 MiB
Duration : 23mn 11s
Overall bit rate mode : Variable
Overall bit rate : 2 096 Kbps
Encoded date : UTC 2012-05-24 12:59:34
Writing application : mkvmerge v5.5.0 ('Healer') built on Apr 6 2012 21:43:24
Writing library : libebml v1.2.3 + libmatroska v1.3.0

Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High 10@L4.0
Format settings, CABAC : Yes
Format settings, ReFrames : 16 frames
Muxing mode : Header stripping
Codec ID : V_MPEG4/ISO/AVC
Nominal bit rate : 1 500 Kbps
Width : 864 pixels
Height : 480 pixels
Display aspect ratio : 16:9
Original frame rate : 23.976 fps
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 10 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.121
Writing library : x264 core 120 r2164+649+26 fcfb618 tMod [10-bit@all X86]
Encoding settings : cabac=1 / ref=16 / deblock=1:1:1 / analyse=0x3:0x133 / me=umh / subme=11 / psy=1 / fade_compensate=0.00 / psy_rd=0.40:0.00 / mixed_ref=1 / me_range=32 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=0 / chroma_qp_offset=-2 / threads=12 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / fgo=0 / bframes=10 / b_pyramid=2 / b_adapt=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=23 / scenecut=40 / intra_refresh=0 / rc=2pass / mbtree=0 / bitrate=1500 / ratetol=10.0 / qcomp=0.60 / qpmin=0 / qpmax=45 / qpstep=4 / cplxblur=20.0 / qblur=0.5 / ip_ratio=1.60 / pb_ratio=1.50 / aq=1:1.00
Language : Japanese
Default : Yes
Forced : No

Audio
ID : 2
Format : FLAC
Format/Info : Free Lossless Audio Codec
Codec ID : A_FLAC
Duration : 23mn 11s
Bit rate mode : Variable
Channel(s) : 2 channels
Sampling rate : 48.0 KHz
Bit depth : 16 bits
Writing library : libFLAC 1.2.1 (UTC 2007-09-17)
Language : Japanese
Default : Yes
Forced : No

Re: 【求助】avs4x264mod管道出现timecode问题

发表于 : 2012-07-03 1:40
06_taro
這就是為什麼我之前一直不想添加自動補齊--timebase參數的原因…

首先這個timecode其實要么是有問題的,要么是沒問題但是timebase不是1001的,從後面x264自動生成的是1/1000這種有問題的數值就能看出來

標準NTSC視頻,輸入時fps應該是24/30/60,或者它們除以1.001,標準PAL視頻則是25/50
1. 24/30/60除以1.001,這種情況輸入的視頻應該也是以1001作為fpsden,而timecodes應該也是這樣,自動添加--timebase 1001是不會有問題的
2. 24/30/60,這種情況fpsden應該為1,自動添加--timebase 1
3. PAL,同2

因此正常來說,24/30/60fps且有1.001補正的NTSC視頻,它的timebase應該是1001/120000。TIVTC的自動2pass有時候部分幀會出18/1.001這樣的fps,這時timebase也應該是1001/360000。而PAL格式的timebase則應該是1/25或者1/50。

如果
1. 輸入的視頻是/1001格式,但是你想用一個其他timebase的timecodes,譬如PAL的
2. 輸入視頻與timecodes有一個是錯誤的,譬如非標準製作的視頻,用ffms直接抽的timecodes得到的非/1001的timecodes,或者載入視頻時得到了非/1001的clip
3. 其他非正常RP
那應該在命令行裡手動增加--timebase x/x的參數,這樣avs4x264mod就會直接用這個設定值,而不會自己判定並輸出給x264

按上面你給出的信息,這個視頻用ffms載入得到的fps是24012/1001這種奇怪的數字,我比較確定是這個視頻本身的問題,而抽出來的timecodes也因此非標準的1001(也包含用各種方式抽取的降低精度了的mkv的tc的情況,因為mkv內部的timestamp精度降低了,抽出來的timecodes本來就不是標準的/1.001的)

之前avs4x264mod不會自動增加--timebase,以至於x264對於pipe raw的輸入時,如果有tcfile-in就會直接使用raw的timebase,對NTSC來說變成了詭異的數值,譬如1/18030,而這種方式確實可以得到一個能用的timebase,但是這個timebase本身是錯誤的,所以這種方式是不好的,但是對於所有pipe tools都有這樣的問題。現在自動補齊--timebase,如果全部流程都正確的話就不會出現這種現象,而是正確地使用--timebase 1001,相對地如上面所說,如果流程不正確、不標準或者特殊情況的話你需要手動設定timebase以覆蓋avs4x264mod的判定。

譬如上面這種,如果你真的確定這個timecodes是你想要的沒有問題(就算不標準),請手動添加--timebase 1/1000參數。

但是要注意,如果是上面說的mkv非標準/1.001的timecodes問題的話,我個人建議先將timecodes按標準的方式修正,否則如果你要出的視頻格式也是降低timestamp精度的mkv的話問題不大,反正timebase都是詭異了的(mmg默認參數出來的mkv都是這樣,除非一開始在mkvmerge參數裡手動添加--timecode-scale 1);如果要出的是mp4,mp4裡的fps必然會英文錯誤的timebase變成奇怪的結果,很可能導致其兼容性有問題,譬如明明能播放60000/1001fps的PSP,播不了這樣做出來導致某些幀fps在58~62間浮動,從而超出60fps限制的視頻…

關於mkv的timestamp精度,看這個就一目了然了:
► 显示剧情透露 mkv
如果是mp4的話:
► 显示剧情透露 mp4
如果把下面這個timecodes用mp4封裝,抽取出來的timecodes是完全一樣沒有任何變化的
► 显示剧情透露 vfr
而同樣的timecodes如果封裝成mkv(不加--timecode-scale 1),再抽取出來就變成了這樣
► 显示剧情透露 被mkv艹過的破鞋
修復的方法有很多種,譬如用dsmux抽mkv裡的timcodes v1:

代码: 全选

mkv2vfr "input.mkv" NUL "output_tcv1.txt"
然後用各種方法進行批量替換,fps(逗號分隔的第三列)為23和24的都替換為23.976023,fps為29和30的都替換為29.970030,fps為59和60的都替換為59.940060,fps為其他數字(譬如TIVTC自動2pass搞出來的17.xxx之類的)根據情況處理,得到的新timcodes就是標準的了。

關於avs4x264mod自動添加--timebase做法,比較具體的描述我在這裡有寫過(英文)。

和seek-mode無關,不需要設置這個參數。seek-mode僅僅在你用了--seek參數的情況下才起作用,而且絕大部分avs(沒有TDecimate(mode=3)或者FFVideoSource("input.m2ts", seekmode=-1)這種無法非線性seek的情況)都可以使用fast,不會有任何問題。x264內部對avs輸入且有--seek參數時的seek方法就和avs4x264mod的seek-mode=fast一樣,連safe mode都沒有…

fixtc v1.0 - restore timecodes v1 to accurate NTSC value

发表于 : 2012-07-03 5:07
06_taro
於是乾脆寫了個fixtc,修復tcv1的問題:
Download: fixtc-v1.0.7z
最新版见这里: http://www.nmm-hd.org/newbbs/viewtopic. ... =786#p7129

用法:
fixtc.exe "input_tcv1.txt" > "output_tcv1.txt"

E.g.
► 显示剧情透露 修復前
► 显示剧情透露 修復後
對一般的RP型mkv,用上一樓裡說的mkv2vfr先抽一個tcv1出來,然後用這個工具修一下,壓的時候用修復好的tcv1就行了…

tcv2就不寫了,計算PTS什麼的懶得搞,反正所有能抽v2的格式都可以直接抽v1,實在不行v2->v1也不麻煩…

Re: 【求助】avs4x264mod管道出现timecode问题

发表于 : 2012-07-03 8:45
yabbay
Ant N tomorrow {:cat_17}
立马ありがたくいただくといたしますですますわ {:cat_11}
剩下的应该能自己解决了 再有问题偶再反映 {:cat_7}

fixtc v1.2 - restore timecodes v1/v2 to accurate NTSC value

发表于 : 2012-07-04 0:33
06_taro
今天囧然發現mp4裡timestamp的rounding error會隨幀數增長擴散,反倒是mkv不會(誤,純屬我腦殘沒注意幀號,mp4的timestamp完全沒有問題)
於是(所以就當作是出於哈茲卡西的原因)把修復v2的功能也加進去了——

Download: fixtc-v1.2.7z

Usage:
fixtc.exe "input_timecodes.txt" > "output_timecodes.txt"

E.g.

timecodes v1:
► 显示剧情透露 修復前
► 显示剧情透露 修復後
timecodes v2:
► 显示剧情透露 修復前
► 显示剧情透露 修復後
精度上應該足夠精確了,至少處理正常用到的timecodes肯定足夠了。
我做了一個6,000,000幀的timecodes來做regression test(做出來的timecodes文件正常精度下有96.6M),在這6,000,000幀內用mkvmerge砍精度,然後再用fixtc來修復,得到的修復結果裡沒有出現任何誤差。
實際上只要視頻長度不超出42949673s(差不多是11930小時 {:cat_1} )就應該不會出精度損失…

Re: 【求助】avs4x264mod管道出现timecode问题

发表于 : 2012-07-04 10:34
yabbay
{:cat_9} gracias
偶承认能修正v2tc的话帮助很大
送taro大一张好人卡 {:cat_17}

Re: 【求助】avs4x264mod管道出现timecode问题

发表于 : 2019-04-09 15:05
玩世不恭
怎么下载这个软件呢。。下载不了。。

Re: 【求助】avs4x264mod管道出现timecode问题

发表于 : 2019-04-16 18:41
fnscar
玩世不恭 写了: 2019-04-09 15:05 怎么下载这个软件呢。。下载不了。。
https://tmod.nmm-hd.org/tctool/