Log in

View Full Version : xvid_encraw - Patched with AviSynth input support


Pages : 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15

Doom9
18th January 2006, 11:53
Alright, I did some more testing with a build that no longer has the frame number limit and no bugs with regards to that. I encoded two movies in two pass, the filesize matched what I wanted by a few 100 KB.. so the usual XviD accuracy. I'm now redoing one second pass with a non existing stats file to see what that results in. But I think it's safe to say that encraw does what it's supposed two in two pass mode.
With 10% done, it looks like without a stats file everything is being encoded at quantizer 2.. the projected filesize is way too big.

squid_80
18th January 2006, 12:24
It'll still meet the filesize but with all the 2nd pass RC options set to 0 doesn't it look a bit...off? Especially if there's sudden jumps from high to low motion or vice-versa.

sam1974
18th January 2006, 22:36
Is it possible that it breaks encodig after frame no. 9999. After this -1 follows and it breaks. I've tested it with different sources.

Doom9
18th January 2006, 23:09
@sam1974: I think reading up a bit would hurt: http://forum.doom9.org/showpost.php?p=767689&postcount=187

squid_80
19th January 2006, 09:06
Is it possible that it breaks encodig after frame no. 9999. After this -1 follows and it breaks. I've tested it with different sources.
I'm guessing you mean this type of output: 9997: key=0, time= 0, len= 6 | type=P, quant= 4, len= 5883
9998: key=0, time= 47, len= 10416 | type=B, quant= 7, len= 2884
9999: key=0, time= 0, len= 6 | type=P, quant= 4, len= 7538
-1: key=0, time= 47, len= 11666 | type=B, quant= 7, len= 3460
-1: key=0, time= 0, len= 6 | type=P, quant= 4, len= 8212
-1: key=0, time= 0, len= -5
Tot: enctime(ms) =9495.00, length(bytes) = 1842441
Avg: enctime(ms) = 31.44, fps = 31.81, length(bytes) = 6100The -1 reference just means it's reached the end of the input frames and is flushing any remaining output frames. It happens at frame 9999 because that's a hardcoded limit that used to exist. It has since been removed.

handtruck
19th January 2006, 23:45
I looked up and down the thread.. What happend to full quality first pass.. It's listed on the first page as part of the switches (-full_1p), but doesn't work in usage, and doesn't show up in -help.

shon3i
20th January 2006, 00:16
What i get will full quality first pass. Did i get better quality.

Kopernikus
20th January 2006, 00:21
I looked up and down the thread.. What happend to full quality first pass.. It's listed on the first page as part of the switches (-full_1p), but doesn't work in usage, and doesn't show up in -help.

Whose build do you use?

handtruck
20th January 2006, 00:39
I used the attachment on the very first post of this thread (which I believe has been updated), and I also tried the most recent link on this thread as well.

woah!
20th January 2006, 03:47
where do you get your patched versions squid_80?

the one in the first post isnt your newer one is it, or arent you releasing them just yet?

squid_80
20th January 2006, 05:00
where do you get your patched versions squid_80?

the one in the first post isnt your newer one is it, or arent you releasing them just yet?
I haven't released any yet, as soon as I implement all the options I mentioned in my post to Doom9 I'll make it available.

woah!
20th January 2006, 06:05
ah thats cool i will stop searching for it then heh..

squid_80
20th January 2006, 12:39
Ok, here's an unrefined build: ftp://squid80.no-ip.com/xvid_encraw.zip

The usage text should list the new options, unless I've left them off. Note the bitrate is in kbps, not bps. The reason I'm posting it unfinished is because I've just spent two hours figuring out why I was losing/gaining frames with the .avi output - it should be fixed now, but if you end up with the wrong number of frames please let me know and try and copy the final output screen. Also please try out the zone options, the functionality hasn't changed but the code behind them has.
Todo: implement the remaining options (rate control, zone options, custom par/dar, vbv... anything else?)
Stricter argument checking.
Support for other output formats (hoping for DaveEL to dig up his avs2matroska sources).
Sleep..

Bugs: -debug is broken, don't know why (it was like that when I got here!).
It's probably not a good idea to run more than one instance simultaneously.
Parameters can be repeated with different values on the command line if you're feeling silly - don't think I'll bother fixing this.

buzzqw
20th January 2006, 13:36
@squid_80
just to reserve you some bandwith i made a link on my site

www.64k.it/andres/xvid_encraw-build-20-01-2006.zip

if is OK i will host it until a new build come up

thanks !

BHH

buzzqw
20th January 2006, 16:53
xvid_encraw.exe -i movie.avs -type 2 -pass1 xvid.stats -bitrate 1000 -full1pass -max_bframes 2 -bquant_ratio 150 -bquant_offset 100 -framerate 25.000000 -turbo -quality 6 -vhqmode 1 -max_key_interval 250 -imin 2 -bmin 2 -pmin 2 -par 1 -qtype 0 -avi movie.avi

is not fuctional, the bug(?) is in full1pass. If i remove it the string is ok

BHH

buzzqw
20th January 2006, 17:15
even -nopacked is broken. It will encode all file, then will continue ... (ultil a ctrl+c ;) )

BHH

squid_80
20th January 2006, 18:52
Can you try again with the new download please?

buzzqw
20th January 2006, 20:31
OK !!!

both

xvid_encraw.exe -i movie.avs -type 2 -pass1 xvid.stats -bitrate 515 -full1pass -max_bframes 2 -bquant_ratio 150 -bquant_offset 100 -framerate 25.000000 -quality 6 -vhqmode 1 -noclosed_gop -max_key_interval 250 -imin 2 -bmin 2 -pmin 2 -par 1 -qtype 0 -avi movie.avi

and nopacked is OK!

i have already uploaded the new build at www.64k.it/andres/xvid_encraw-build-20-01-2006.zip

:thanks: squid_80 !

BHH

squid_80
21st January 2006, 01:22
BTW, the only thing -full1pass seems to do (going from the vfw code) is encode the whole movie at quant 2. So -bitrate, -imin -pmin etc. have no effect.

buzzqw
21st January 2006, 10:08
xvid_encraw.exe -i "movie.avs" -type 2 -pass1 xvid.stats -bitrate 515 -full1pass -max_bframes 2 -bqu
ant_ratio 150 -bquant_offset 100 -framerate 25.000000 -turbo -quality 6 -vhqmode 1 -noclosed_gop -ma
x_key_interval 250 -imin 2 -bmin 2 -pmin 2 -par 1 -qtype 0 -avi movie.avi"
xvid_encraw - raw mpeg4 bitstream encoder written by Christoph Lampert 2002-2003

Trying to retrieve width and height from input header
0: key=2, time= 0, len= 2145 | type=I, quant= 2, len= 2145
1: key=0, time= 0, len= 0
2: key=0, time= 0, len= 0
3: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
4: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
5: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
6: key=0, time= 15, len= 6 | type=P, quant= 2, len= 6
7: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
8: key=0, time= 31, len= 6 | type=P, quant= 2, len= 6
9: key=0, time= 15, len= 6 | type=P, quant= 2, len= 6
10: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
11: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
12: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
13: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
14: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
15: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
16: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
17: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
18: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
19: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
20: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
21: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
22: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
23: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
24: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
25: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
26: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
27: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
28: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
29: key=0, time= 15, len= 6 | type=P, quant= 2, len= 6
30: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
31: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
32: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
33: key=0, time= 15, len= 6 | type=P, quant= 2, len= 6
34: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
35: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
36: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
37: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
38: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
39: key=0, time= 15, len= 6 | type=P, quant= 2, len= 6
40: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
41: key=0, time= 15, len= 6 | type=P, quant= 2, len= 6
42: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
43: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
44: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
45: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
46: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
47: key=0, time= 15, len= 6 | type=P, quant= 2, len= 6
48: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
49: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
50: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
51: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
52: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
53: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
54: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
55: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
56: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
57: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
58: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
59: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
60: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
61: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
62: key=0, time= 32, len= 3463 | type=B, quant= 4, len= 764
63: key=0, time= 15, len= 764 | type=B, quant= 4, len= 764
64: key=0, time= 0, len= 6 | type=P, quant= 2, len= 2705
65: key=2, time= 15, len= 5031 | type=B, quant= 4, len= 1507
66: key=0, time= 0, len= 6 | type=I, quant= 2, len= 3530
67: key=2, time= 0, len= 4877 | type=I, quant= 2, len= 4877
68: key=2, time= 0, len= 4615 | type=I, quant= 2, len= 4615
69: key=2, time= 0, len= 4221 | type=I, quant= 2, len= 4221
70: key=2, time= 0, len= 4866 | type=I, quant= 2, len= 4866
71: key=0, time= 94, len= 5021 | type=P, quant= 2, len= 5021
72: key=0, time= 109, len= 6668 | type=B, quant= 4, len= 1825
73: key=0, time= 0, len= 6 | type=P, quant= 2, len= 4849
74: key=0, time= 109, len= 8748 | type=B, quant= 4, len= 1988
75: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6766
76: key=0, time= 62, len= 10099 | type=B, quant= 4, len= 1913
77: key=0, time= 0, len= 6 | type=P, quant= 2, len= 8192
78: key=0, time= 47, len= 9879 | type=B, quant= 4, len= 1688
79: key=0, time= 16, len= 1531 | type=B, quant= 4, len= 1531
80: key=0, time= 0, len= 6 | type=P, quant= 2, len= 8197
81: key=0, time= 63, len= 9110 | type=B, quant= 4, len= 1515
82: key=0, time= 16, len= 1411 | type=B, quant= 4, len= 1411
83: key=0, time= 0, len= 6 | type=P, quant= 2, len= 7601
84: key=0, time= 62, len= 10160 | type=B, quant= 4, len= 1515
85: key=0, time= 16, len= 1495 | type=B, quant= 4, len= 1495
86: key=0, time= 0, len= 6 | type=P, quant= 2, len= 8651
87: key=0, time= 62, len= 9014 | type=B, quant= 4, len= 1552
88: key=0, time= 0, len= 6 | type=P, quant= 2, len= 7468
89: key=0, time= 63, len= 10907 | type=B, quant= 4, len= 2165
90: key=0, time= 0, len= 6 | type=P, quant= 2, len= 8748
91: key=0, time= 79, len= 8409 | type=P, quant= 2, len= 8409
92: key=2, time= 16, len= 10202 | type=I, quant= 2, len= 10202
93: key=0, time= 63, len= 7777 | type=P, quant= 2, len= 7777
94: key=0, time= 46, len= 8951 | type=P, quant= 2, len= 8951
95: key=0, time= 47, len= 10556 | type=P, quant= 2, len= 10556
96: key=0, time= 47, len= 10345 | type=P, quant= 2, len= 10345
97: key=0, time= 63, len= 14491 | type=B, quant= 4, len= 2349
98: key=0, time= 0, len= 6 | type=P, quant= 2, len= 12148
99: key=0, time= 62, len= 11077 | type=B, quant= 4, len= 2044
100: key=0, time= 16, len= 6 | type=P, quant= 2, len= 9039
101: key=0, time= 47, len= 9762 | type=B, quant= 4, len= 1462
102: key=0, time= 0, len= 1556 | type=B, quant= 4, len= 1556
103: key=0, time= 0, len= 6 | type=P, quant= 2, len= 8306
104: key=0, time= 32, len= 9558 | type=B, quant= 4, len= 1496
105: key=0, time= 16, len= 1327 | type=B, quant= 4, len= 1327
106: key=0, time= 0, len= 6 | type=P, quant= 2, len= 8068
107: key=0, time= 31, len= 8950 | type=B, quant= 4, len= 1248
108: key=0, time= 0, len= 1321 | type=B, quant= 4, len= 1321
109: key=0, time= 0, len= 6 | type=P, quant= 2, len= 7708
110: key=0, time= 47, len= 9213 | type=B, quant= 4, len= 1294
111: key=0, time= 15, len= 1344 | type=B, quant= 4, len= 1344
112: key=0, time= 0, len= 6 | type=P, quant= 2, len= 7925
113: key=0, time= 31, len= 8991 | type=B, quant= 4, len= 1269
114: key=0, time= 16, len= 1398 | type=B, quant= 4, len= 1398
115: key=0, time= 0, len= 6 | type=P, quant= 2, len= 7728
116: key=0, time= 47, len= 9809 | type=B, quant= 4, len= 1318
117: key=0, time= 15, len= 1817 | type=B, quant= 4, len= 1817
118: key=0, time= 0, len= 6 | type=P, quant= 2, len= 8497
119: key=0, time= 62, len= 13535 | type=B, quant= 4, len= 2567
120: key=0, time= 0, len= 6 | type=P, quant= 2, len= 10974
121: key=0, time= 47, len= 9184 | type=P, quant= 2, len= 9184
122: key=0, time= 31, len= 8674 | type=P, quant= 2, len= 8674
123: key=0, time= 32, len= 8736 | type=P, quant= 2, len= 8736
124: key=0, time= 32, len= 8660 | type=P, quant= 2, len= 8660
125: key=0, time= 31, len= 7806 | type=P, quant= 2, len= 7806
126: key=0, time= 32, len= 7735 | type=P, quant= 2, len= 7735
127: key=0, time= 32, len= 8509 | type=P, quant= 2, len= 8509
128: key=0, time= 47, len= 9179 | type=P, quant= 2, len= 9179
129: key=0, time= 31, len= 10274 | type=P, quant= 2, len= 10274
130: key=0, time= 31, len= 10651 | type=P, quant= 2, len= 10651
131: key=0, time= 32, len= 11225 | type=P, quant= 2, len= 11225
132: key=0, time= 47, len= 11357 | type=P, quant= 2, len= 11357
133: key=0, time= 31, len= 9925 | type=P, quant= 2, len= 9925
134: key=2, time= 31, len= 15167 | type=B, quant= 4, len= 2965
135: key=0, time= 0, len= 6 | type=I, quant= 2, len= 12208
136: key=0, time= 78, len= 10860 | type=B, quant= 4, len= 2203
137: key=0, time= 0, len= 6 | type=P, quant= 2, len= 8663
138: key=0, time= 47, len= 9996 | type=P, quant= 2, len= 9996
139: key=0, time= 47, len= 10427 | type=P, quant= 2, len= 10427
140: key=0, time= 47, len= 10991 | type=P, quant= 2, len= 10991
141: key=0, time= 62, len= 10725 | type=P, quant= 2, len= 10725
142: key=0, time= 31, len= 9995 | type=P, quant= 2, len= 9995
143: key=0, time= 47, len= 13505 | type=B, quant= 4, len= 2435
144: key=0, time= 0, len= 6 | type=P, quant= 2, len= 11076
145: key=0, time= 46, len= 10644 | type=B, quant= 4, len= 1762
146: key=0, time= 0, len= 6 | type=P, quant= 2, len= 8888
147: key=0, time= 47, len= 11643 | type=B, quant= 4, len= 1792
148: key=0, time= 16, len= 1619 | type=B, quant= 4, len= 1619
149: key=0, time= 0, len= 6 | type=P, quant= 2, len= 9857


the first frames (black almost) is encoded at quant 2 but other at 2 or 4 (for b frames)

BHH

squid_80
21st January 2006, 10:45
the first frames (black almost) is encoded at quant 2 but other at 2 or 4 (for b frames)

BHH
....yeah, that's what I said. Bitrate and quantizer min/max don't do anything with -full1pass active. Quantizer for B-frames:
= avg(prev p quant + next p quant)*bquant_ratio + bquant_offset
= avg(2 + 2) *1.5 + 1
= 2*1.5+1
= 4.

This however worries me: 64: key=0, time= 0, len= 6 | type=P, quant= 2, len= 2705
65: key=2, time= 15, len= 5031 | type=B, quant= 4, len= 1507
66: key=0, time= 0, len= 6 | type=I, quant= 2, len= 3530
67: key=2, time= 0, len= 4877 | type=I, quant= 2, len= 4877
68: key=2, time= 0, len= 4615 | type=I, quant= 2, len= 4615A B-frame reported as a key frame and an I-frame not being reported as a key frame. Looks kinda weird but I think that's what you get with packed bitstream. The .avi file might be a bit b0rked, open it with vdub and skip through using the key buttons and see if any keyframes look messed up.

buzzqw
21st January 2006, 11:53
Ok, this time without packed frames

this is the command line

xvid_encraw.exe -i "C:\Programmi\PureBasic\Prove\movie.avs" -type 2 -pass1 xvid.stats -bitrate 515 -max_bframes 2 -bquant_ratio 150 -bquant_offset 100 -framerate 25.000000 -quality 6 -vhqmode 1 -nopacked -noclosed_gop -max_key_interval 250 -imin 2 -bmin 2 -pmin 2 -par 4 -qtype 0 -avi "C:\Programmi\PureBasic\Prove\movie.avi"

and this is the first encoded frames


C:\Programmi\PureBasic\Prove>C:\Programmi\PureBasic\Prove\exe\encoder\xvid_encraw.exe -i "C:\Progra
mmi\PureBasic\Prove\movie.avs" -type 2 -pass1 xvid.stats -bitrate 515 -max_bframes 2 -bquant_ratio 1
50 -bquant_offset 100 -framerate 25.000000 -quality 6 -vhqmode 1 -nopacked -noclosed_gop -max_key_in
terval 250 -imin 2 -bmin 2 -pmin 2 -par 4 -qtype 0 -avi "C:\Programmi\PureBasic\Prove\movie.avi"
xvid_encraw - raw mpeg4 bitstream encoder written by Christoph Lampert 2002-2003

Trying to retrieve width and height from input header
0: key=2, time= 0, len= 1677
1: key=0, time= 0, len= 0
2: key=0, time= 0, len= 0
3: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
4: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
5: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
6: key=0, time= 15, len= 6 | type=P, quant= 2, len= 6
7: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
8: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
9: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
10: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
11: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
12: key=0, time= 15, len= 6 | type=P, quant= 2, len= 6
13: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
14: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
15: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
16: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
17: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
18: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
19: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
20: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
21: key=0, time= 15, len= 6 | type=P, quant= 2, len= 6
22: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
23: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
24: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
25: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
26: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
27: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
28: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
29: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
30: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
31: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
32: key=0, time= 15, len= 6 | type=P, quant= 2, len= 6
33: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
34: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
35: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
36: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
37: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
38: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
39: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
40: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
41: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
42: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
43: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
44: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
45: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
46: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
47: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
48: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
49: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
50: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
51: key=0, time= 15, len= 6 | type=P, quant= 2, len= 6
52: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
53: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
54: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
55: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
56: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
57: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
58: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
59: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
60: key=0, time= 16, len= 6 | type=P, quant= 2, len= 6
61: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
62: key=0, time= 0, len= 2115 | type=P, quant= 2, len= 6
63: key=0, time= 0, len= 600 | type=B, quant= 4, len= 600
64: key=0, time= 0, len= 600 | type=B, quant= 4, len= 600
65: key=2, time= 0, len= 2999 | type=P, quant= 2, len= 2115
66: key=0, time= 0, len= 1184 | type=B, quant= 4, len= 1184
67: key=2, time= 16, len= 4177 | type=I, quant= 2, len= 2999
68: key=2, time= 16, len= 3557 | type=I, quant= 2, len= 4177
69: key=0, time= 15, len= 3950 | type=I, quant= 2, len= 3557
70: key=0, time= 16, len= 4714 | type=P, quant= 2, len= 3950
71: key=0, time= 16, len= 5261 | type=P, quant= 2, len= 4714
72: key=0, time= 0, len= 1893 | type=B, quant= 4, len= 1893
73: key=0, time= 32, len= 6198 | type=P, quant= 2, len= 5261
74: key=0, time= 15, len= 1482 | type=B, quant= 4, len= 1482
75: key=0, time= 15, len= 8606 | type=P, quant= 2, len= 6198
76: key=0, time= 16, len= 1953 | type=B, quant= 4, len= 1953
77: key=0, time= 16, len= 6563 | type=P, quant= 2, len= 8606
78: key=0, time= 16, len= 1307 | type=B, quant= 4, len= 1307
79: key=0, time= 0, len= 7858 | type=P, quant= 2, len= 6563
80: key=0, time= 0, len= 1414 | type=B, quant= 4, len= 1414
81: key=0, time= 0, len= 1272 | type=B, quant= 4, len= 1272
82: key=0, time= 16, len= 7627 | type=P, quant= 2, len= 7858
83: key=0, time= 0, len= 1216 | type=B, quant= 4, len= 1216
84: key=0, time= 16, len= 1168 | type=B, quant= 4, len= 1168
85: key=0, time= 15, len= 8266 | type=P, quant= 2, len= 7627
86: key=0, time= 15, len= 1301 | type=B, quant= 4, len= 1301
87: key=0, time= 0, len= 1275 | type=B, quant= 4, len= 1275
88: key=0, time= 0, len= 7126 | type=P, quant= 2, len= 8266
89: key=0, time= 16, len= 1272 | type=B, quant= 4, len= 1272
90: key=2, time= 16, len= 11673 | type=P, quant= 2, len= 7126
91: key=0, time= 15, len= 2345 | type=B, quant= 4, len= 2345
92: key=2, time= 0, len= 8483 | type=I, quant= 2, len= 11673
93: key=0, time= 0, len= 6748 | type=I, quant= 2, len= 8483
94: key=0, time= 0, len= 8067 | type=P, quant= 2, len= 6748
95: key=0, time= 15, len= 9605 | type=P, quant= 2, len= 8067
96: key=0, time= 16, len= 11307 | type=P, quant= 2, len= 9605
97: key=0, time= 31, len= 2107 | type=B, quant= 4, len= 2107
98: key=0, time= 16, len= 10798 | type=P, quant= 2, len= 11307
99: key=0, time= 16, len= 1950 | type=B, quant= 4, len= 1950
100: key=0, time= 46, len= 8874 | type=P, quant= 2, len= 10798
101: key=0, time= 16, len= 1219 | type=B, quant= 4, len= 1219
102: key=0, time= 0, len= 1157 | type=B, quant= 4, len= 1157
103: key=0, time= 47, len= 8092 | type=P, quant= 2, len= 8874
104: key=0, time= 0, len= 1167 | type=B, quant= 4, len= 1167
105: key=0, time= 0, len= 1348 | type=B, quant= 4, len= 1348
106: key=0, time= 16, len= 7644 | type=P, quant= 2, len= 8092
107: key=0, time= 15, len= 1140 | type=B, quant= 4, len= 1140
108: key=0, time= 0, len= 1141 | type=B, quant= 4, len= 1141
109: key=0, time= 15, len= 7585 | type=P, quant= 2, len= 7644
110: key=0, time= 0, len= 1152 | type=B, quant= 4, len= 1152
111: key=0, time= 16, len= 1008 | type=B, quant= 4, len= 1008
112: key=0, time= 0, len= 7306 | type=P, quant= 2, len= 7585
113: key=0, time= 16, len= 900 | type=B, quant= 4, len= 900
114: key=0, time= 16, len= 1017 | type=B, quant= 4, len= 1017
115: key=0, time= 15, len= 7645 | type=P, quant= 2, len= 7306
116: key=0, time= 0, len= 988 | type=B, quant= 4, len= 988
117: key=0, time= 16, len= 1008 | type=B, quant= 4, len= 1008
118: key=0, time= 31, len= 8684 | type=P, quant= 2, len= 7645
119: key=0, time= 16, len= 1797 | type=B, quant= 4, len= 1797
120: key=0, time= 15, len= 9793 | type=P, quant= 2, len= 8684
121: key=0, time= 0, len= 2150 | type=B, quant= 4, len= 2150
122: key=0, time= 16, len= 9496 | type=P, quant= 2, len= 9793
123: key=0, time= 15, len= 2105 | type=B, quant= 4, len= 2105
124: key=0, time= 16, len= 8932 | type=P, quant= 2, len= 9496
125: key=0, time= 16, len= 1927 | type=B, quant= 4, len= 1927
126: key=0, time= 15, len= 9062 | type=P, quant= 2, len= 8932
127: key=0, time= 0, len= 1830 | type=B, quant= 4, len= 1830
128: key=0, time= 15, len= 11486 | type=P, quant= 2, len= 9062
129: key=0, time= 16, len= 2487 | type=B, quant= 4, len= 2487
130: key=0, time= 15, len= 13209 | type=P, quant= 2, len= 11486
131: key=0, time= 16, len= 3100 | type=B, quant= 4, len= 3100
132: key=0, time= 0, len= 10700 | type=P, quant= 2, len= 13209
133: key=0, time= 16, len= 10458 | type=P, quant= 2, len= 10700
134: key=0, time= 15, len= 2690 | type=B, quant= 4, len= 2690
135: key=0, time= 16, len= 8613 | type=P, quant= 2, len= 10458
136: key=0, time= 15, len= 1913 | type=B, quant= 4, len= 1913
137: key=2, time= 0, len= 11732 | type=P, quant= 2, len= 8613
138: key=0, time= 32, len= 1976 | type=B, quant= 4, len= 1976
139: key=0, time= 15, len= 9670 | type=I, quant= 2, len= 11732
140: key=0, time= 0, len= 10419 | type=P, quant= 2, len= 9670
141: key=0, time= 32, len= 13053 | type=P, quant= 2, len= 10419
142: key=0, time= 15, len= 2471 | type=B, quant= 4, len= 2471
143: key=0, time= 0, len= 10982 | type=P, quant= 2, len= 13053
144: key=0, time= 0, len= 1906 | type=B, quant= 4, len= 1906
145: key=0, time= 15, len= 10414 | type=P, quant= 2, len= 10982
146: key=0, time= 16, len= 1450 | type=B, quant= 4, len= 1450
147: key=0, time= 15, len= 1623 | type=B, quant= 4, len= 1623
148: key=0, time= 16, len= 9577 | type=P, quant= 2, len= 10414
149: key=0, time= 0, len= 1126 | type=B, quant= 4, len= 1126
150: key=0, time= 0, len= 1229 | type=B, quant= 4, len= 1229


I big note: without packed bitstream the file size is correct, but with is not so correct (aiming at 800kb)

second pass with -nopacked -> size 988KB
-1: key=0, time= 0, len= -5 | type=P, quant= 3, len= 4234
Tot: enctime(ms) =5481.00, length(bytes) = 1002142
Avg: enctime(ms) = 17.29, fps = 57.84, length(bytes) = 3161

second pass without -> size KB 793
-1: key=0, time= 16, len= 3801 | type=P, quant= 3, len= 3801
-1: key=0, time= 0, len= -5
Tot: enctime(ms) =5655.00, length(bytes) = 802655
Avg: enctime(ms) = 17.84, fps = 56.06, length(bytes) = 2532


i know the sample is short ... i would like to know why :stupid:

thanks

BHH

squid_80
21st January 2006, 12:50
Ok, this time without packed frames

this is the command line

xvid_encraw.exe -i "C:\Programmi\PureBasic\Prove\movie.avs" -type 2 -pass1 xvid.stats -bitrate 515 -max_bframes 2 -bquant_ratio 150 -bquant_offset 100 -framerate 25.000000 -quality 6 -vhqmode 1 -nopacked -noclosed_gop -max_key_interval 250 -imin 2 -bmin 2 -pmin 2 -par 4 -qtype 0 -avi "C:\Programmi\PureBasic\Prove\movie.avi"Aargh.. "-type 2 -max_bframes 2 -bquant_ratio 150 -bquant_offset 100 -framerate 25.000000 -quality 6 -vhqmode 1 -qtype 0" are all defaults. No need to clog up the commandline with them. Also bitrate does nothing on 1st pass, it is only useful for -single or -pass2.
and this is the first encoded frames


61: key=0, time= 0, len= 6 | type=P, quant= 2, len= 6
62: key=0, time= 0, len= 2115 | type=P, quant= 2, len= 6
63: key=0, time= 0, len= 600 | type=B, quant= 4, len= 600
64: key=0, time= 0, len= 600 | type=B, quant= 4, len= 600
65: key=2, time= 0, len= 2999 | type=P, quant= 2, len= 2115
66: key=0, time= 0, len= 1184 | type=B, quant= 4, len= 1184
67: key=2, time= 16, len= 4177 | type=I, quant= 2, len= 2999
68: key=2, time= 16, len= 3557 | type=I, quant= 2, len= 4177
69: key=0, time= 15, len= 3950 | type=I, quant= 2, len= 3557
70: key=0, time= 16, len= 4714 | type=P, quant= 2, len= 3950
71: key=0, time= 16, len= 5261 | type=P, quant= 2, len= 4714
72: key=0, time= 0, len= 1893 | type=B, quant= 4, len= 1893
That makes it a bit easier to see. The stats on the left are the true order, the stats on the right are from the stored order. You can tell by matching up the sizes - b-frames are stored after the frames they reference.
I big note: without packed bitstream the file size is correct, but with is not so correct (aiming at 800kb)

second pass with -nopacked -> size 988KB
-1: key=0, time= 0, len= -5 | type=P, quant= 3, len= 4234
Tot: enctime(ms) =5481.00, length(bytes) = 1002142
Avg: enctime(ms) = 17.29, fps = 57.84, length(bytes) = 3161

second pass without -> size KB 793
-1: key=0, time= 16, len= 3801 | type=P, quant= 3, len= 3801
-1: key=0, time= 0, len= -5
Tot: enctime(ms) =5655.00, length(bytes) = 802655
Avg: enctime(ms) = 17.84, fps = 56.06, length(bytes) = 2532


i know the sample is short ... i would like to know why :stupid:

thanks

BHHPacked bitstream is not a parameter that can be changed without redoing the first pass.

JoeBG
21st January 2006, 13:17
Works great, no problems anymore.

Next I try a whole film and not only my testclips.

Is there any update from the old xvidcore.dll ?

Doom9
21st January 2006, 13:32
Is there any update from the old xvidcore.dll ?Since the API has not been changed afaik, it should be possible to replace xvidcore.dll with the latest one.. even one compiled for 2 cores.

buzzqw
21st January 2006, 14:09
two note:

i had redo both first and secon pass with nopacked, and another two round without (but not deleting stats file :o )

i am using latest xvidcore dll for 2 core

a very big :thanks: squid_80 ! for your good work !!

BHH

JoeBG
22nd January 2006, 11:27
In encodet the same video which I tried before with mencoder xvid. Mencoder xvid never fitted the size for me, but with xvid_encraw it works. Thanks to all

woah!
23rd January 2006, 10:33
i have a weird problem

my encodes come out at 29.000 frames instead of 29.970 ?

same avs encded with mencoder gives the correct 29.970fps so i dont think its a script error

crop(8,8,-8,-8)
LeakKernelDeint(order=1, sharp=true)
ColorMatrix("Rec.709->Rec.601",mmx=true,hints=false)
LanczosResize(704,400)
trim(20000, 20900)

heres the xvid info:

-type 2 -cq 3 -avi

http://images.dr3vil.com/files/default/xvid_encraw.jpg

heres the mencoder info:

-ovc xvid -xvidencopts fixed_quant=3:max_key_interval=300:packed:vhq=1:qpel:chroma_me:quant_type=mpeg:trellis:lumi_mask:bvhq=1

http://images.dr3vil.com/files/default/mencoder.jpg

also heres the info from MPC:

Video: XVID 704x400 29.00fps 968Kbps [Video 0]


cant seem to get away from 29.000fps even.

squid_80
23rd January 2006, 10:43
Yeah, I realized today that I hadn't done any tests with anything other than 25fps material so I apologize to all the NTSC people out there. On the upside it should be easy enough to change the framerate if you mux audio in later.

woah!
23rd January 2006, 22:23
true but i thought i should at least let you know there is an issue :)

otherwise it works great :)

squid_80
24th January 2006, 08:19
Well that's what testing is for...

MKV output is very close. It's working when I run it from inside the debugger, but crashes when I try it normally. :mad:
(bond: you'll be happy to hear it's native V_MPEG4/ISO/ASP in mkv.)

bond
24th January 2006, 11:38
MKV output is very close. It's working when I run it from inside the debugger, but crashes when I try it normally. :mad:
(bond: you'll be happy to hear it's native V_MPEG4/ISO/ASP in mkv.)great stuff!!!
edit: how are you going to handle packed bitstream with mkv? simply disable it?

tough when will we see real native mpeg-4 (meaning in .mp4 ;) )?

squid_80
24th January 2006, 11:45
I could borrow Mosu's bitstream parser from mkvmerge to split the packed frames. Or I could just disable simultaneous .avi and .mkv output, which is probably more sensible.

bond
24th January 2006, 12:07
how are you going to remove all the other avi specific fud when outputting native mkv: like placing the vol on every keyframe?

bond
24th January 2006, 12:34
heres the xvid info:

-type 2 -cq 3 -avi

http://images.dr3vil.com/files/default/xvid_encraw.jpgjust realised this: where does the "coremp4" come from?

squid_80
24th January 2006, 12:38
Whatever codec is grabbing the FourCC code from the avi?

bond
24th January 2006, 12:44
sure, but i am wondering cause i dont find this "coremp4" decoder anywhere?

bond
24th January 2006, 12:59
squid_80, one error: packed bitstream is enabled by default. this leads to the situation that if someone doesnt disable pb and outputs raw .m4v he will get an incorrect stream full of the dummy placeholder n-vops

a possible solution would be to allow pb only with avi output (and not with raw, mkv and a hopefully to come mp4 output), as after all pb is only a hack for avi, and/or disable pb by default (which imho would be a good thing)

dimzon
24th January 2006, 19:23
Well that's what testing is for...

MKV output is very close. It's working when I run it from inside the debugger, but crashes when I try it normally. :mad:
(bond: you'll be happy to hear it's native V_MPEG4/ISO/ASP in mkv.)
Seems like you have invalid field align for structures. Just disable this option in optimizer or use pragma pack directive...

squid_80
24th January 2006, 22:08
Actually it seems I was forgetting to set the global timecode for the cues :o Works properly now, just fine tuning.

squid_80
25th January 2006, 09:38
how are you going to remove all the other avi specific fud when outputting native mkv: like placing the vol on every keyframe?
squid_80, one error: packed bitstream is enabled by default. this leads to the situation that if someone doesnt disable pb and outputs raw .m4v he will get an incorrect stream full of the dummy placeholder n-vops

a possible solution would be to allow pb only with avi output (and not with raw, mkv and a hopefully to come mp4 output), as after all pb is only a hack for avi, and/or disable pb by default (which imho would be a good thing)
OK, before I finalize my solution I'm going to ask for advice because I'm not an expert.
I've made a quick and dirty function which searches the buffer returned by the encoder for the sequence 00 00 01 b6 (vop start code).
If the frame is the first keyframe of the sequence, store everything before this location (the vol headers) in the codec private element of the mkv and store everything after as a key frame. If it's not the first keyframe just throw the headers away and store the frame.
If it's not a keyframe check for 2 vop start codes to indicate a packed frame. If so write the first vop as a p frame and the second as a b frame.
If the total length of a vop is less than 10 it's probably a n-vop. Check if the size of the buffer returned by the encoder matches the length of the encoded frame and if not throw it away. Otherwise write it as a frame with a reference to the previous one.

I'll try and make it a bit clearer:xvid_encraw - raw mpeg4 bitstream encoder written by Christoph Lampert 2002-2003


Trying to retrieve width and height from input header
0: key=2, time= 16, len= 33779 | type=I, quant= 4, len= 33779
1: key=0, time= 0, len= 0
2: key=0, time= 79, len= 15268 | type=B, quant= 7, len= 4985
3: key=0, time= 0, len= 6 | type=P, quant= 4, len= 10289
4: key=0, time= 62, len= 15242 | type=P, quant= 4, len= 15242
5: key=2, time= 16, len= 44086 | type=I, quant= 4, len= 44086
6: key=0, time= 62, len= 15406 | type=P, quant= 4, len= 15406
7: key=2, time= 15, len= 39235 | type=I, quant= 4, len= 39235
8: key=0, time= 63, len= 11424 | type=P, quant= 4, len= 11424
9: key=0, time= 62, len= 13839 | type=P, quant= 4, len= 13839
-1: key=0, time= 63, len= 15438 | type=P, quant= 4, len= 15438
-1: key=0, time= 0, len= -5
Tot: enctime(ms) = 438.00, length(bytes) = 203723
Avg: enctime(ms) = 39.82, fps = 25.11, length(bytes) = 18520
Frame 0 has the headers before the vop start stripped off and they are stored in the codec private element. The vop is stored as a frame with no references.
Frame 1 doesn't return anything from the encoder.
Frame 2 is scanned for vop start codes and 2 are found. The first vop is stored as a frame with a reference to the last i frame, the second vop is stored as a frame with references to the last i frame and p frame.
Frame 3 has a buffer with a length smaller than 10 and different size to the corresponding encoded frame ( 6 != 10289). It's a fake n-vop so throw it away.
Frame 4 has only one start code and is a p frame. Store it with a reference to the previous I frame.
Frame 5 is an I frame. Find the vop start, throw away everything before it and store the frame with no references.

You get the idea (I hope). If anyone can spot any flaws please speak up now before I waste too much time implementing/testing.

squid_80
25th January 2006, 13:28
So either I've utterly confused everyone, or I'm gonna go with this :)

dimzon
25th January 2006, 17:18
@squid_80
please, take look @ this:
http://forum.doom9.org/showthread.php?p=774869#post774869

Doom9
25th January 2006, 17:24
if your goal is to just avoid packed bitstream except for AVI output, why not override whatever the user set? It's the solution I should've adopted in MeGUI long ago (add that to the long list of "should haves").

squid_80
25th January 2006, 18:32
The headers still need to be stripped from every I frame (there's global flags to turn this off but they're not implemented in xvidcore).

squid_80
25th January 2006, 18:51
@squid_80
please, take look @ this:
http://forum.doom9.org/showthread.php?p=774869#post774869
really, it encoder reques avs with yv12 support it means encoder are working with avs via avisynth.dll (there are no other way to get yv12 from it, AviFile32 API performs RGB24 conversion).This isn't right at all. If it were true how do x264 and xvid_encraw currently get yv12 frames using avifile? Besides, xvid supports lots of different input colorspaces but support for others just hasn't been implemented in encraw yet. It's yet another thing to be done.

Edit: No-one took a scrap of notice when I said I'd enhanced x264.exe to print the error message if opening an .avs script fails (which is pretty useful, imho).

bond
25th January 2006, 18:51
simply drop avi output and with it all the avi-centric crap ;)

dimzon
25th January 2006, 19:09
This isn't right at all. If it were true how do x264 and xvid_encraw currently get yv12 frames using avifile?
can you post code (i want take look @ it)

Doom9
25th January 2006, 19:50
simply drop avi output and with it all the avi-centric crapNot gonna happen any time soon with a millions of XviD capable standalones out there. I'm afraid XviD in AVI still makes a lot of sense.

squid_80
26th January 2006, 05:29
can you post code (i want take look @ it)
For the avisynth error handling? Well this is how I changed x264.c:

extern "C" const GUID IID_IAvisynthClipInfo // {E6D6B708-124D-11D4-86F3-DB80AFD98778}
= {0xe6d6b708, 0x124d, 0x11d4, {0x86, 0xf3, 0xdb, 0x80, 0xaf, 0xd9, 0x87, 0x78}};


struct IAvisynthClipInfo : IUnknown {
virtual int __stdcall GetError(const char** ppszMessage) = 0;
virtual bool __stdcall GetParity(int n) = 0;
virtual bool __stdcall IsFieldBased() = 0;
};

static int open_file_avis( char *psz_filename, hnd_t *p_handle, x264_param_t *p_param )
{
AVISTREAMINFO info;
PAVISTREAM p_avi = NULL;
PAVIFILE m_AVIFile;
int i;
IAvisynthClipInfo *pAvisynthClipInfo;

*p_handle = NULL;

AVIFileInit();
if( AVIFileOpen(&m_AVIFile, psz_filename, OF_READ, NULL))
{
AVIFileExit();
return -1;
}

// Check if we're using avisynth and display any script errors (taken from virtualdub)
if (FAILED(m_AVIFile->QueryInterface(IID_IAvisynthClipInfo, (void **)&pAvisynthClipInfo)))
pAvisynthClipInfo = NULL;
else {
const char *s;

if (pAvisynthClipInfo->GetError(&s)) {
printf("Avisynth open failure:\n%s\n", s);
pAvisynthClipInfo->Release();
m_AVIFile->Release();
AVIFileExit();
return -1;
}
}

if (pAvisynthClipInfo!=NULL)
pAvisynthClipInfo->Release();

if( AVIFileGetStream(m_AVIFile, &p_avi, streamtypeVIDEO, 0) )
{
AVIFileRelease(m_AVIFile);
AVIFileExit();
return -1;
}
// Close m_AVIFile now that we have the stream
AVIFileRelease(m_AVIFile);

if( AVIStreamInfo(p_avi, &info, sizeof(AVISTREAMINFO)) )
......