pigpeppa / xin26x

Video Encoder for Now and Next Decade
BSD 2-Clause "Simplified" License
88 stars 9 forks source link

[Windows] Build - and not only - issues #15

Open MarcoRavich opened 1 year ago

MarcoRavich commented 1 year ago

Hi there, since the provided exe won't run on my W11x64 system, I've asked John Edwards (aka John33, the dev behind RareWares) to build an optimized - ICL 19 - bin and here's his reply about:

Bit of a puzzle, really! The 'make-solutions.bat' file generates a VisualStudio sln file that loads into VS and compiles but the resulting executable does nothing. I'm not convinced that all the necessary code is included. I tried to link to the dll that is provided, but that doesn't appear to work either. I can't generate a usable output file even using the exe that is provided but that could be me not generating a suitable input file correctly!

...can you help to fix the problem?

Thanks in advance.

pigpeppa commented 1 year ago

Hi,

There are two ways to run xin26x

  1. Directly to run pre-built xin26x_test.exe under testbin folder.
  2. You can compile the project with cmake to generate xin26x_test.exe, but the xin26x_test.exe compiled on your system depend on xin26x.dll under testbin folder. You can put xin26x.dll and xin26x_test.exe (generated on your system) under same folder.

Currently, the core encoder of xin26x is released with dll mode.

Thanks and Regards. Peppa.

@.***

From: F.O.R.A.R.T. Date: 2023-08-30 14:08 To: pigpeppa/xin26x CC: Subscribed Subject: [pigpeppa/xin26x] [Windows] Build - and not only - issues (Issue #15) Hi there, since the provided exe won't run on my W11x64 system, I've asked John Edwards (aka John33, the dev behind RareWares) to build an optimized - ICL 19 - bin and here's his reply about: Bit of a puzzle, really! The 'make-solutions.bat' file generates a VisualStudio sln file that loads into VS and compiles but the resulting executable does nothing. I'm not convinced that all the necessary code is included. I tried to link to the dll that is provided, but that doesn't appear to work either. I can't generate a usable output file even using the exe that is provided but that could be me not generating a suitable input file correctly! ...can you help to fix the problem? Thanks in advance. — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>

MarcoRavich commented 1 year ago

Wow, thanks for the lightning-fast reply !

There are two ways to run xin26x

  1. Directly to run pre-built xin26x_test.exe under testbin folder.

My W11x64 system won't run it 'cause claims - with a popup Windows system message (not a commandline error, to be clear) - that it's not compatible (is it a x32 build ?).

BTW, is it mandatory to place the file in a folder called "testbin" ?

Thanks again.

pigpeppa commented 1 year ago

Please see my answer in red.

@.***

From: F.O.R.A.R.T. Date: 2023-08-30 14:37 To: pigpeppa/xin26x CC: Pig Peppa; Comment Subject: Re: [pigpeppa/xin26x] [Windows] Build - and not only - issues (Issue #15) Wow, thanks for the lightning-fast reply ! There are two ways to run xin26x Directly to run pre-built xin26x_test.exe under testbin folder. My W11x64 system won't run it 'cause claims - with a popup Windows system message (not a commandline error, to be clear) - that it's not compatible (is it a x32 build ?). Peppa:Currently, it only support 64bit build, i do not realse 32bit build. If you need 32bit build, I can realse 32bit in the future. BTW, is it mandatory to place the file in a folder called "testbin" ? Peppa: I do not think so, you can also put the system dll folder. Thanks again. — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

MarcoRavich commented 1 year ago

Ok, I finally encoded my 1st video.

Here's the commandline and log:

C:\testbin>xin26x_test -i test.y4m -a 0 -p 3 -T 0 -o out.y4m

STATUS: Xin26x lib build date: Aug 18 2023 21:23:17 STATUS: yuv size 1280x720 fps:30.000 frame num:500 STATUS: algorithm:0 encoder mode:3 rdoq:0 screen mode:0 STATUS: smp:0 mctf:1 sao:1 deblock:1 alf:1 STATUS: tmvp:1 mctf:1 cclm:0 dmvr:1 STATUS: sbTmvp:0 affine:0 mts:0 sign bit hidden:1 STATUS: ctuSize:64, minCuSize:8, minQtSize:8, maxBtSize:64, maxTtSize:64 STATUS: rc mode:5 target bit:1000000 STATUS: b frame num:15 ref num:3 STATUS: thread num:4 wpp:1 fpp:1 Start coding... 500 frames encoded, coding speed fps:43.2227 bitrate: 1100.84 kbps. Complete coding.

Performance is quite nice - considering that the encode has been executed on i3-4160 - but the result seems "uncorrect":

SOURCE: https://media.xiph.org/video/derf/y4m/ducks_take_off_420_720p50.y4m

OUTPUT: https://raw.githubusercontent.com/forart/HyMPS/main/out.y4m

...can you explain what's wrong with this commandline ? Thanks !

note: it would be nice to link test files for newbie users (https://media.xiph.org/video/derf/)

pigpeppa commented 1 year ago

xin26x only supports yuv420 raw yuv file. It does not support y4m file.

发自我的iPhone

------------------ Original ------------------ From: F.O.R.A.R.T. @.> Date: Thu,Aug 31,2023 6:55 PM To: pigpeppa/xin26x @.> Cc: Pig Peppa @.>, Comment @.> Subject: Re: [pigpeppa/xin26x] [Windows] Build - and not only - issues (Issue#15)

Ok, I finally encoded my 1st video.

Here's the commandline and log:

C:\testbin>xin26x_test -i test.y4m -a 0 -p 3 -T 0 -o out.y4m

STATUS: Xin26x lib build date: Aug 18 2023 21:23:17 STATUS: yuv size 1280x720 fps:30.000 frame num:500 STATUS: algorithm:0 encoder mode:3 rdoq:0 screen mode:0 STATUS: smp:0 mctf:1 sao:1 deblock:1 alf:1 STATUS: tmvp:1 mctf:1 cclm:0 dmvr:1 STATUS: sbTmvp:0 affine:0 mts:0 sign bit hidden:1 STATUS: ctuSize:64, minCuSize:8, minQtSize:8, maxBtSize:64, maxTtSize:64 STATUS: rc mode:5 target bit:1000000 STATUS: b frame num:15 ref num:3 STATUS: thread num:4 wpp:1 fpp:1 Start coding... 500 frames encoded, coding speed fps:43.2227 bitrate: 1100.84 kbps. Complete coding.

Performance is quite nice - considering that the encode has been executed on i3-4160 - but the result seems "uncorrect":

SOURCE: https://media.xiph.org/video/derf/y4m/ducks_take_off_420_720p50.y4m

OUTPUT: https://raw.githubusercontent.com/forart/HyMPS/main/out.y4m

...can you explain what's wrong with this commandline ? Thanks !

note: it would be nice to link test files for newbie users (https://media.xiph.org/video/derf/)

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

pigpeppa commented 1 year ago

You can use ffmepg to convert y4m file to yuv, or you can download yuv420 raw file. 

Btw you have to specify input resolution.

发自我的iPhone

------------------ Original ------------------ From: F.O.R.A.R.T. @.> Date: Thu,Aug 31,2023 6:55 PM To: pigpeppa/xin26x @.> Cc: Pig Peppa @.>, Comment @.> Subject: Re: [pigpeppa/xin26x] [Windows] Build - and not only - issues (Issue#15)

Ok, I finally encoded my 1st video.

Here's the commandline and log:

C:\testbin>xin26x_test -i test.y4m -a 0 -p 3 -T 0 -o out.y4m

STATUS: Xin26x lib build date: Aug 18 2023 21:23:17 STATUS: yuv size 1280x720 fps:30.000 frame num:500 STATUS: algorithm:0 encoder mode:3 rdoq:0 screen mode:0 STATUS: smp:0 mctf:1 sao:1 deblock:1 alf:1 STATUS: tmvp:1 mctf:1 cclm:0 dmvr:1 STATUS: sbTmvp:0 affine:0 mts:0 sign bit hidden:1 STATUS: ctuSize:64, minCuSize:8, minQtSize:8, maxBtSize:64, maxTtSize:64 STATUS: rc mode:5 target bit:1000000 STATUS: b frame num:15 ref num:3 STATUS: thread num:4 wpp:1 fpp:1 Start coding... 500 frames encoded, coding speed fps:43.2227 bitrate: 1100.84 kbps. Complete coding.

Performance is quite nice - considering that the encode has been executed on i3-4160 - but the result seems "uncorrect":

SOURCE: https://media.xiph.org/video/derf/y4m/ducks_take_off_420_720p50.y4m

OUTPUT: https://raw.githubusercontent.com/forart/HyMPS/main/out.y4m

...can you explain what's wrong with this commandline ? Thanks !

note: it would be nice to link test files for newbie users (https://media.xiph.org/video/derf/)

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

MarcoRavich commented 1 year ago

xin26x only supports yuv420 raw yuv file. It does not support y4m file.

Can you please point me to some suitable files - among those available at https://media.xiph.org/video/ - to perform encoding tests ?

note: it could be useful to list suitable files @ xin26x's readme.md

pigpeppa commented 1 year ago

Actully, y4m is raw yuv + resolution infomation. You can just take off resolution infomation in following command.

ffmpeg -i example.y4m test.yuv

Then you get a *.yuv file, you can feed it to Xin26x and spectify width (-w) and height (-h).

@.***

From: F.O.R.A.R.T. Date: 2023-08-31 19:13 To: pigpeppa/xin26x CC: Pig Peppa; Comment Subject: Re: [pigpeppa/xin26x] [Windows] Build - and not only - issues (Issue #15) xin26x only supports yuv420 raw yuv file. It does not support y4m file. Can you please point me to some suitable files - among those available at https://media.xiph.org/video/ - to perform encoding tests ? note: it could be useful to list suitable files @ xin26x's readme.md — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

MarcoRavich commented 1 year ago

Ok, did more encoding tests using - as suggested - that "stripped" .yuv input file so here's my feedback:

  1. encoder goes in a "deadlock" state if -b parameter is set. Example: xin26x_test -i test.yuv -a 0 -p 3 -T 0 -F 1 -W 1 --lookAhead 100 -b 1500 -o out.yuv
  2. the -q parameter doesn't affect the result the output, regardless the value set;
  3. it slows down high framerate inputs (doesn't decimate correctly);

Hope that helps.

pigpeppa commented 1 year ago

Example: xin26x_test -i test.yuv -a 0 -p 3 -T 0 -F 1 -W 1 --lookAhead 100 -b 1500 -o out.yuv

@.***

From: F.O.R.A.R.T. Date: 2023-09-01 15:10 To: pigpeppa/xin26x CC: Pig Peppa; Comment Subject: Re: [pigpeppa/xin26x] [Windows] Build - and not only - issues (Issue #15) Ok, did more encoding tests using - as suggested - that "stripped" .yuv input file so here's my feedback: encoder goes in a "deadlock" state if -b parameter is set. Example: xin26x_test -i test.yuv -a 0 -p 3 -T 0 -F 1 -W 1 --lookAhead 100 -b 1500 -o out.yuv Peppa: -b means bitrate per second, is NOT Kbitrate per sencond. so I guess you need to set 1500000 for your case. B.T.W. you have to set -w and -h for input resolution. the -q parameter has no effect on the output, regardless the value set; Peppa: Yes, -q is not supported, because qp offset effect picture PSNR under pyramid Bframes, it is only supported under debug purpose. it slows down high framerate inputs (doesn't decimate correctly); Peppa: I do not quite understand your meaning. Hope that helps. — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

pigpeppa commented 1 year ago

please see my answer in red.

@.***

From: F.O.R.A.R.T. Date: 2023-09-01 15:10 To: pigpeppa/xin26x CC: Pig Peppa; Comment Subject: Re: [pigpeppa/xin26x] [Windows] Build - and not only - issues (Issue #15) Ok, did more encoding tests using - as suggested - that "stripped" .yuv input file so here's my feedback: encoder goes in a "deadlock" state if -b parameter is set. Example: xin26x_test -i test.yuv -a 0 -p 3 -T 0 -F 1 -W 1 --lookAhead 100 -b 1500 -o out.yuv Peppa: -b means bitrate per second, is NOT Kbitrate per sencond. so I guess you need to set 1500000 for your case. B.T.W. you have to set -w and -h for input resolution. the -q parameter has no effect on the output, regardless the value set; Peppa: Yes, -q is not supported, because qp offset effect picture PSNR under pyramid Bframes, it is only supported under debug purpose. it slows down high framerate inputs (doesn't decimate correctly); Peppa: I do not quite understand your meaning. Hope that helps. — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

MarcoRavich commented 1 year ago

forart: it slows down high framerate inputs (doesn't decimate correctly); Peppa: I do not quite understand your meaning.

Here's the encoded result: https://raw.githubusercontent.com/forart/HyMPS/main/out50.yuv

(commandline used: xin26x_test -i test.yuv -a 0 -p 3 -T 0 -F 1 -W 1 -w 1280 -h 720 -f 50 -d 1 --lookAhead 100 -r 1 -b 1500000 -o out50.yuv)

As you can see, it's NOT 50fps (nor decimated 25fps), but same numeber of frames slowed down.

Thanks for your help.

pigpeppa commented 1 year ago

i have checked, it works as design. It is raw bitstream, there is no information reflect fps. If you want to play with 50 fps. There are two ways. One is manually set fps in players. The other is packet this raw bitstream to mp4, which tells player how many fps to play.

发自我的iPhone

------------------ Original ------------------ From: F.O.R.A.R.T. @.> Date: Fri,Sep 1,2023 4:32 PM To: pigpeppa/xin26x @.> Cc: Pig Peppa @.>, Comment @.> Subject: Re: [pigpeppa/xin26x] [Windows] Build - and not only - issues (Issue#15)

forart: it slows down high framerate inputs (doesn't decimate correctly); Peppa: I do not quite understand your meaning.

Here's the encoded result: https://raw.githubusercontent.com/forart/HyMPS/main/out50.yuv

As you can see, it's NOT 50fps (nor decimated 25fps), but same numeber of frames slowed down.

Thanks for your help.

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

MarcoRavich commented 1 year ago

It works inside MKV container (muxed using MKVToolNix) too: https://raw.githubusercontent.com/forart/HyMPS/main/outHQ.mkv

So here's last 2 questions:

  1. Is this the best bitrate-based HEVC commandline to achieve both speed and quality ? Any suggestion to squeeze more ? xin26x_test -i test.yuv -a 0 -p 6 -T 0 -wpp 1 -fpp 1 -w 1280 -h 720 -f 50 -d 1 --lookAhead 100 -r 1 -b 1750000 -o out.yuv
  2. Can xin26x be used by piping ffmpeg/ffplay into it to get rid of ffmpeg -i example.y4m test.yuv ?

Thanks again.

note: I've added xin26x under HyMPS \ VIDEO \ Tools - Encoders

pigpeppa commented 1 year ago

Please see my answer in red.

@.***

From: F.O.R.A.R.T. Date: 2023-09-02 17:42 To: pigpeppa/xin26x CC: Pig Peppa; Comment Subject: Re: [pigpeppa/xin26x] [Windows] Build - and not only - issues (Issue #15) OK, it works inside MKV container (muxed using MKVToolNix) too. So here's last 2 questions: Is this the best bitrate-based HEVC commandline to achieve both speed and quality ? Any suggestion to squeeze more ? xin26x_test -i test.yuv -a 0 -p 6 -T 0 -wpp 1 -fpp 1 -w 1280 -h 720 -f 50 -d 1 --lookAhead 100 -r 1 -b 1750000 -o out.yuv Peppa:-p 0, 1, 2, 3, 4, 5, 6 big number means better qulity and lower fps. I suguest you do not set --lookAhead because it will be set internally. Can xin26x be used by piping ffmpeg/ffplay into it to get rid of ffmpeg -i example.y4m test.yuv ? Peppa:Maybe it will be support in the future. But it is not the function of xin26x, for users, since I released xin26x dll, this parase function (y4m -> yuv) can be added in the outside of xin26x. Thanks again. — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>