This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

[Request] Implementing JPG exporting
#1
Would it be possible for you to include JPG exporting with the adequate quality options as an alternative to PNG exporting?
PNG files are often bloated in size and slower to encode, JPG encoding could bring significant speed boosts to my entire workflow and it would be very helpful.
I'm very willing to test if the feature is implemented
Thanks in advance!
Reply
#2
Got any documentation regarding how to use ffmpeg for jpeg creation?

Using
ffmpeg -h encoder=libopenjpg
I get
Encoder libopenjpeg [OpenJPEG JPEG 2000]: General capabilities: threads Threading capabilities: frame Supported pixel formats: rgb24 rgba rgb48le rgba64le gbrp gbrp9le gbrp10le gbrp12le gbrp14le gbrp16le gray ya8 gray16le ya16le gray10le gray12le gray14le yuv420p yuv422p yuva420p yuv440p yuv444p yuva422p yuv411p yuv410p yuva444p yuv420p9le yuv422p9le yuv444p9le yuva420p9le yuva422p9le yuva444p9le yuv420p10le yuv422p10le yuv444p10le yuva420p10le yuva422p10le yuva444p10le yuv420p12le yuv422p12le yuv444p12le yuv420p14le yuv422p14le yuv444p14le yuv420p16le yuv422p16le yuv444p16le yuva420p16le yuva422p16le yuva444p16le xyz12le libopenjpeg AVOptions: -format <int> E..V....... Codec Format (from 0 to 2) (default jp2) j2k 0 E..V....... jp2 2 E..V....... -profile <int> E..V....... (from 0 to 4) (default jpeg2000) jpeg2000 0 E..V....... cinema2k 3 E..V....... cinema4k 4 E..V....... -cinema_mode <int> E..V....... Digital Cinema (from 0 to 3) (default off) off 0 E..V....... 2k_24 1 E..V....... 2k_48 2 E..V....... 4k_24 3 E..V....... -prog_order <int> E..V....... Progression Order (from 0 to 4) (default lrcp) lrcp 0 E..V....... rlcp 1 E..V....... rpcl 2 E..V....... pcrl 3 E..V....... cprl 4 E..V....... -numresolution <int> E..V....... (from 0 to 33) (default 6) -irreversible <int> E..V....... (from 0 to 1) (default 0) -disto_alloc <int> E..V....... (from 0 to 1) (default 1) -fixed_quality <int> E..V....... (from 0 to 1) (default 0)
using:
ffmpeg -h encoder=jpeg2000
I get:
Encoder jpeg2000 [JPEG 2000]: General capabilities: none Threading capabilities: none Supported pixel formats: rgb24 yuv444p gray yuv420p yuv422p yuv410p yuv411p pal8 rgb48le gray16le jpeg 2000 encoder AVOptions: -format <int> E..V....... Codec Format (from 0 to 1) (default jp2) j2k 0 E..V....... jp2 1 E..V....... -tile_width <int> E..V....... Tile Width (from 1 to 1.07374e+09) (default 256) -tile_height <int> E..V....... Tile Height (from 1 to 1.07374e+09) (default 256) -pred <int> E..V....... DWT Type (from 0 to 1) (default dwt97int) dwt97int 0 E..V....... dwt53 0 E..V....... -sop <int> E..V....... SOP marker (from 0 to 1) (default 0) -eph <int> E..V....... EPH marker (from 0 to 1) (default 0) -prog <int> E..V....... Progression Order (from 0 to 4) (default lrcp) lrcp 0 E..V....... rlcp 1 E..V....... rpcl 2 E..V....... pcrl 3 E..V....... cprl 4 E..V....... -layer_rates <string> E..V....... Layer Rates
There's also jpegls, ljpeg, mjpeg.

Problem is I see no documentation what the options really do. (Last time I read up on jpeg compression was 20+ years ago,...)

Also are you use writing the pngs is the bottleneck on your processing in Hybrid ? (usually it's the filtering or decoding, when it's not the encoder)

Quote:JPG encoding could bring significant speed boosts to my entire workflow and it would be very helpful.
Out of curiousity: What is your workflow that using lossy jpeg compression it worth it?


Cu Selur
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Offline between (including) 29th of June and 5th of July => RochHarz Festival
Reply
#3
From what I gathered with other GUIs and people, mjpeg should be the encoder used in ffmpeg to output Jpeg files.
I'm not sure though as I'm not particularly familiar with ffmpeg.
My workflow currently consists of upscaling and interpolating, both of which suffer very minimal quality loss even if I'm using jpeg instead of png. Moreover, using jpegs would probably save my SSDs from torture since I could shed a few hundred gigs per job.

(13.12.2021, 18:14)Selur Wrote: Got any documentation regarding how to use ffmpeg for jpeg creation?

Using
ffmpeg -h encoder=libopenjpg
I get
Encoder libopenjpeg [OpenJPEG JPEG 2000]:     General capabilities: threads     Threading capabilities: frame     Supported pixel formats: rgb24 rgba rgb48le rgba64le gbrp gbrp9le gbrp10le gbrp12le gbrp14le gbrp16le gray ya8 gray16le ya16le gray10le gray12le gray14le yuv420p yuv422p yuva420p yuv440p yuv444p yuva422p yuv411p yuv410p yuva444p yuv420p9le yuv422p9le yuv444p9le yuva420p9le yuva422p9le yuva444p9le yuv420p10le yuv422p10le yuv444p10le yuva420p10le yuva422p10le yuva444p10le yuv420p12le yuv422p12le yuv444p12le yuv420p14le yuv422p14le yuv444p14le yuv420p16le yuv422p16le yuv444p16le yuva420p16le yuva422p16le yuva444p16le xyz12le libopenjpeg AVOptions:   -format            <int>        E..V....... Codec Format (from 0 to 2) (default jp2)      j2k             0            E..V.......      jp2             2            E..V.......   -profile           <int>        E..V....... (from 0 to 4) (default jpeg2000)      jpeg2000        0            E..V.......      cinema2k        3            E..V.......      cinema4k        4            E..V.......   -cinema_mode       <int>        E..V....... Digital Cinema (from 0 to 3) (default off)      off             0            E..V.......      2k_24           1            E..V.......      2k_48           2            E..V.......      4k_24           3            E..V.......   -prog_order        <int>        E..V....... Progression Order (from 0 to 4) (default lrcp)      lrcp            0            E..V.......      rlcp            1            E..V.......      rpcl            2            E..V.......      pcrl            3            E..V.......      cprl            4            E..V.......   -numresolution     <int>        E..V....... (from 0 to 33) (default 6)   -irreversible      <int>        E..V....... (from 0 to 1) (default 0)   -disto_alloc       <int>        E..V....... (from 0 to 1) (default 1)   -fixed_quality     <int>        E..V....... (from 0 to 1) (default 0)
using:
ffmpeg -h encoder=jpeg2000
I get:
Encoder jpeg2000 [JPEG 2000]:     General capabilities: none     Threading capabilities: none     Supported pixel formats: rgb24 yuv444p gray yuv420p yuv422p yuv410p yuv411p pal8 rgb48le gray16le jpeg 2000 encoder AVOptions:   -format            <int>        E..V....... Codec Format (from 0 to 1) (default jp2)      j2k             0            E..V.......      jp2             1            E..V.......   -tile_width        <int>        E..V....... Tile Width (from 1 to 1.07374e+09) (default 256)   -tile_height       <int>        E..V....... Tile Height (from 1 to 1.07374e+09) (default 256)   -pred              <int>        E..V....... DWT Type (from 0 to 1) (default dwt97int)      dwt97int        0            E..V.......      dwt53           0            E..V.......   -sop               <int>        E..V....... SOP marker (from 0 to 1) (default 0)   -eph               <int>        E..V....... EPH marker (from 0 to 1) (default 0)   -prog              <int>        E..V....... Progression Order (from 0 to 4) (default lrcp)      lrcp            0            E..V.......      rlcp            1            E..V.......      rpcl            2            E..V.......      pcrl            3            E..V.......      cprl            4            E..V.......   -layer_rates       <string>     E..V....... Layer Rates
There's also jpegls, ljpeg, mjpeg.

Problem is I see no documentation what the options really do. (Last time I read up on jpeg compression was 20+ years ago,...)

Also are you use writing the pngs is the bottleneck on your processing in Hybrid ? (usually it's the filtering or decoding, when it's not the encoder)

Quote:JPG encoding could bring significant speed boosts to my entire workflow and it would be very helpful.
Out of curiousity: What is your workflow that using lossy jpeg compression it worth it?


Cu Selur

Ffmpeg -i "source" "output folder/%6d.jpg"
This was one of the commands my friends that had more expertise gave me, maybe you could test it out?
Thanks!
Reply
#4
Encoder mjpeg [MJPEG (Motion JPEG)]: General capabilities: threads Threading capabilities: frame and slice Supported pixel formats: yuvj420p yuvj422p yuvj444p yuv420p yuv422p yuv444p mjpeg encoder AVOptions: -mpv_flags <flags> E..V....... Flags common for all mpegvideo-based encoders. (default 0) skip_rd E..V....... RD optimal MB level residual skipping strict_gop E..V....... Strictly enforce gop size qp_rd E..V....... Use rate distortion optimization for qp selection cbp_rd E..V....... use rate distortion optimization for CBP naq E..V....... normalize adaptive quantization mv0 E..V....... always try a mb with mv=<0,0> -luma_elim_threshold <int> E..V....... single coefficient elimination threshold for luminance (negative values also consider dc coefficient) (from INT_MIN to INT_MAX) (default 0) -chroma_elim_threshold <int> E..V....... single coefficient elimination threshold for chrominance (negative values also consider dc coefficient) (from INT_MIN to INT_MAX) (default 0) -quantizer_noise_shaping <int> E..V....... (from 0 to INT_MAX) (default 0) -error_rate <int> E..V....... Simulate errors in the bitstream to test error concealment. (from 0 to INT_MAX) (default 0) -qsquish <float> E..V....... how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function) (from 0 to 99) (default 0) -rc_qmod_amp <float> E..V....... experimental quantizer modulation (from -FLT_MAX to FLT_MAX) (default 0) -rc_qmod_freq <int> E..V....... experimental quantizer modulation (from INT_MIN to INT_MAX) (default 0) -rc_eq <string> E..V....... Set rate control equation. When computing the expression, besides the standard functions defined in the section 'Expression Evaluation', the following functions are available: bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex. -rc_init_cplx <float> E..V....... initial complexity for 1-pass encoding (from -FLT_MAX to FLT_MAX) (default 0) -rc_buf_aggressivity <float> E..V....... currently useless (from -FLT_MAX to FLT_MAX) (default 1) -border_mask <float> E..V....... increase the quantizer for macroblocks close to borders (from -FLT_MAX to FLT_MAX) (default 0) -lmin <int> E..V....... minimum Lagrange factor (VBR) (from 0 to INT_MAX) (default 236) -lmax <int> E..V....... maximum Lagrange factor (VBR) (from 0 to INT_MAX) (default 3658) -ibias <int> E..V....... intra quant bias (from INT_MIN to INT_MAX) (default 999999) -pbias <int> E..V....... inter quant bias (from INT_MIN to INT_MAX) (default 999999) -motion_est <int> E..V....... motion estimation algorithm (from 0 to 2) (default epzs) zero 0 E..V....... epzs 1 E..V....... xone 2 E..V....... -skip_threshold <int> E..V....... Frame skip threshold (from INT_MIN to INT_MAX) (default 0) -skip_factor <int> E..V....... Frame skip factor (from INT_MIN to INT_MAX) (default 0) -skip_exp <int> E..V....... Frame skip exponent (from INT_MIN to INT_MAX) (default 0) -skip_cmp <int> E..V....... Frame skip compare function (from INT_MIN to INT_MAX) (default dctmax) sad 0 E..V....... Sum of absolute differences, fast sse 1 E..V....... Sum of squared errors satd 2 E..V....... Sum of absolute Hadamard transformed differences dct 3 E..V....... Sum of absolute DCT transformed differences psnr 4 E..V....... Sum of squared quantization errors, low quality bit 5 E..V....... Number of bits needed for the block rd 6 E..V....... Rate distortion optimal, slow zero 7 E..V....... Zero vsad 8 E..V....... Sum of absolute vertical differences vsse 9 E..V....... Sum of squared vertical differences nsse 10 E..V....... Noise preserving sum of squared differences dct264 14 E..V....... dctmax 13 E..V....... chroma 256 E..V....... msad 15 E..V....... Sum of absolute differences, median predicted -sc_threshold <int> E..V....... Scene change threshold (from INT_MIN to INT_MAX) (default 0) -noise_reduction <int> E..V....... Noise reduction (from INT_MIN to INT_MAX) (default 0) -ps <int> E..V....... RTP payload size in bytes (from INT_MIN to INT_MAX) (default 0) -mepc <int> E..V....... Motion estimation bitrate penalty compensation (1.0 = 256) (from INT_MIN to INT_MAX) (default 256) -mepre <int> E..V....... pre motion estimation (from INT_MIN to INT_MAX) (default 0) -intra_penalty <int> E..V....... Penalty for intra blocks in block decision (from 0 to 1.07374e+09) (default 0) -pred <int> E..V....... Prediction method (from 1 to 3) (default left) left 1 E..V....... plane 2 E..V....... median 3 E..V....... -huffman <int> E..V....... Huffman table strategy (from 0 to 1) (default optimal) default 0 E..V....... optimal 1 E..V....... -force_duplicated_matrix <boolean> E..V....... Always write luma and chroma matrix for mjpeg, useful for rtp streaming. (default false) -mpeg_quant <int> E..V......P Deprecated, does nothing (from 0 to 0) (default 0) -a53cc <boolean> E..V......P Deprecated, does nothing (default true) -b_strategy <int> E..V......P Deprecated, does nothing (from 0 to 2) (default 0) -b_sensitivity <int> E..V......P Deprecated, does nothing (from 1 to INT_MAX) (default 40) -brd_scale <int> E..V......P Deprecated, does nothing (from 0 to 3) (default 0)
mjpeg = motion jpeg
This usually means the jpegs are written into a container like .avi/.mov/...
I don't see any 'quality'-control. May be '-q:v X' works,...
I will think about it, if someone can find some decent documentation.

Cu Selur
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Offline between (including) 29th of June and 5th of July => RochHarz Festival
Reply
#5
(13.12.2021, 18:34)Selur Wrote:
Encoder mjpeg [MJPEG (Motion JPEG)]:     General capabilities: threads     Threading capabilities: frame and slice     Supported pixel formats: yuvj420p yuvj422p yuvj444p yuv420p yuv422p yuv444p mjpeg encoder AVOptions:   -mpv_flags        <flags>      E..V....... Flags common for all mpegvideo-based encoders. (default 0)     skip_rd                      E..V....... RD optimal MB level residual skipping     strict_gop                  E..V....... Strictly enforce gop size     qp_rd                        E..V....... Use rate distortion optimization for qp selection     cbp_rd                      E..V....... use rate distortion optimization for CBP     naq                          E..V....... normalize adaptive quantization     mv0                          E..V....... always try a mb with mv=<0,0>   -luma_elim_threshold <int>        E..V....... single coefficient elimination threshold for luminance (negative values also consider dc coefficient) (from INT_MIN to INT_MAX) (default 0)   -chroma_elim_threshold <int>        E..V....... single coefficient elimination threshold for chrominance (negative values also consider dc coefficient) (from INT_MIN to INT_MAX) (default 0)   -quantizer_noise_shaping <int>        E..V....... (from 0 to INT_MAX) (default 0)   -error_rate        <int>        E..V....... Simulate errors in the bitstream to test error concealment. (from 0 to INT_MAX) (default 0)   -qsquish          <float>      E..V....... how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function) (from 0 to 99) (default 0)   -rc_qmod_amp      <float>      E..V....... experimental quantizer modulation (from -FLT_MAX to FLT_MAX) (default 0)   -rc_qmod_freq      <int>        E..V....... experimental quantizer modulation (from INT_MIN to INT_MAX) (default 0)   -rc_eq            <string>    E..V....... Set rate control equation. When computing the expression, besides the standard functions defined in the section 'Expression Evaluation', the following functions are available: bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex.   -rc_init_cplx      <float>      E..V....... initial complexity for 1-pass encoding (from -FLT_MAX to FLT_MAX) (default 0)   -rc_buf_aggressivity <float>      E..V....... currently useless (from -FLT_MAX to FLT_MAX) (default 1)   -border_mask      <float>      E..V....... increase the quantizer for macroblocks close to borders (from -FLT_MAX to FLT_MAX) (default 0)   -lmin              <int>        E..V....... minimum Lagrange factor (VBR) (from 0 to INT_MAX) (default 236)   -lmax              <int>        E..V....... maximum Lagrange factor (VBR) (from 0 to INT_MAX) (default 3658)   -ibias            <int>        E..V....... intra quant bias (from INT_MIN to INT_MAX) (default 999999)   -pbias            <int>        E..V....... inter quant bias (from INT_MIN to INT_MAX) (default 999999)   -motion_est        <int>        E..V....... motion estimation algorithm (from 0 to 2) (default epzs)     zero            0            E..V.......     epzs            1            E..V.......     xone            2            E..V.......   -skip_threshold    <int>        E..V....... Frame skip threshold (from INT_MIN to INT_MAX) (default 0)   -skip_factor      <int>        E..V....... Frame skip factor (from INT_MIN to INT_MAX) (default 0)   -skip_exp          <int>        E..V....... Frame skip exponent (from INT_MIN to INT_MAX) (default 0)   -skip_cmp          <int>        E..V....... Frame skip compare function (from INT_MIN to INT_MAX) (default dctmax)     sad            0            E..V....... Sum of absolute differences, fast     sse            1            E..V....... Sum of squared errors     satd            2            E..V....... Sum of absolute Hadamard transformed differences     dct            3            E..V....... Sum of absolute DCT transformed differences     psnr            4            E..V....... Sum of squared quantization errors, low quality     bit            5            E..V....... Number of bits needed for the block     rd              6            E..V....... Rate distortion optimal, slow     zero            7            E..V....... Zero     vsad            8            E..V....... Sum of absolute vertical differences     vsse            9            E..V....... Sum of squared vertical differences     nsse            10          E..V....... Noise preserving sum of squared differences     dct264          14          E..V.......     dctmax          13          E..V.......     chroma          256          E..V.......     msad            15          E..V....... Sum of absolute differences, median predicted   -sc_threshold      <int>        E..V....... Scene change threshold (from INT_MIN to INT_MAX) (default 0)   -noise_reduction  <int>        E..V....... Noise reduction (from INT_MIN to INT_MAX) (default 0)   -ps                <int>        E..V....... RTP payload size in bytes (from INT_MIN to INT_MAX) (default 0)   -mepc              <int>        E..V....... Motion estimation bitrate penalty compensation (1.0 = 256) (from INT_MIN to INT_MAX) (default 256)   -mepre            <int>        E..V....... pre motion estimation (from INT_MIN to INT_MAX) (default 0)   -intra_penalty    <int>        E..V....... Penalty for intra blocks in block decision (from 0 to 1.07374e+09) (default 0)   -pred              <int>        E..V....... Prediction method (from 1 to 3) (default left)     left            1            E..V.......     plane          2            E..V.......     median          3            E..V.......   -huffman          <int>        E..V....... Huffman table strategy (from 0 to 1) (default optimal)     default        0            E..V.......     optimal        1            E..V.......   -force_duplicated_matrix <boolean>    E..V....... Always write luma and chroma matrix for mjpeg, useful for rtp streaming. (default false)   -mpeg_quant        <int>        E..V......P Deprecated, does nothing (from 0 to 0) (default 0)   -a53cc            <boolean>    E..V......P Deprecated, does nothing (default true)   -b_strategy        <int>        E..V......P Deprecated, does nothing (from 0 to 2) (default 0)   -b_sensitivity    <int>        E..V......P Deprecated, does nothing (from 1 to INT_MAX) (default 40)   -brd_scale        <int>        E..V......P Deprecated, does nothing (from 0 to 3) (default 0)
mjpeg = motion jpeg
This usually means the jpegs are written into a container like .avi/.mov/...
I don't see any 'quality'-control. May be '-q:v X' works,...
I will think about it, if someone can find some decent documentation.

Cu Selur
Would it be possible for you to implement mozjpeg instead as a seperate encoder?
And also as to the mjpeg part, q:v is indeed the intended quality control for it, as for the output extension, not specifying the encoder and instead just using it to export .jpg seems to work
Reply
#6
Quote:Would it be possible for you to implement mozjpeg instead as a seperate encoder?
Assuming it has a command line interface which accepts input via pipe, I would need:
a. documentation about it
b. a way to build it for MacOS and Linux too


Cu Selur
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Offline between (including) 29th of June and 5th of July => RochHarz Festival
Reply
#7
(14.12.2021, 05:09)Selur Wrote:
Quote:Would it be possible for you to implement mozjpeg instead as a seperate encoder?
Assuming it has a command line interface which accepts input via pipe, I would need:
a. documentation about it
b. a way to build it for MacOS and Linux too


Cu Selur

So implementing jpeg encoding seems rather improbable right?
does exporting as .jpg not work? Afaik that's how most people do it
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)