From 5f14169e6bd224f81ed56e6c9be2497e438fc0ea Mon Sep 17 00:00:00 2001 From: minjaesong Date: Fri, 3 Oct 2025 14:41:23 +0900 Subject: [PATCH] encoder preset change (more quality) --- video_encoder/encoder_tav.c | 16 ++++++++-------- video_encoder/exponential_numeric_system.ods | Bin 15026 -> 15985 bytes 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/video_encoder/encoder_tav.c b/video_encoder/encoder_tav.c index cc6754d..3feec1d 100644 --- a/video_encoder/encoder_tav.c +++ b/video_encoder/encoder_tav.c @@ -183,7 +183,7 @@ static const int QLUT[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 // the values are indices to the QLUT static const int QUALITY_Y[] = {79, 47, 23, 11, 5, 2}; // 96, 48, 24, 12, 6, 3 static const int QUALITY_CO[] = {123, 108, 91, 76, 59, 29}; // 240, 180, 120, 90, 60, 30 -static const int QUALITY_CG[] = {132, 130, 127, 122, 109, 83}; // 296, 280, 256, 236, 184, 104 +static const int QUALITY_CG[] = {148, 133, 113, 99, 76, 39}; // 424, 304, 200, 144, 90, 40 static const int QUALITY_ALPHA[] = {79, 47, 23, 11, 5, 2}; // 96, 48, 24, 12, 6, 3 // psychovisual tuning parameters @@ -597,10 +597,9 @@ static void show_usage(const char *program_name) { printf(" -f, --fps N Output frames per second (enables frame rate conversion)\n"); printf(" -q, --quality N Quality level 0-5 (default: 2)\n"); printf(" -Q, --quantiser Y,Co,Cg Quantiser levels 1-255 for each channel (1: lossless, 255: potato)\n"); - printf(" -w, --wavelet N Wavelet filter: 0=5/3 reversible, 1=9/7 irreversible, 2=DD-4 (default: 1)\n"); printf(" -b, --bitrate N Target bitrate in kbps (enables bitrate control mode)\n"); printf(" -c, --channel-layout N Channel layout: 0=Y-Co-Cg, 1=Y-Co-Cg-A, 2=Y-only, 3=Y-A, 4=Co-Cg, 5=Co-Cg-A (default: 0)\n"); - printf(" --arate N MP2 audio bitrate in kbps (overrides quality-based audio rate)\n"); + printf(" -a, --arate N MP2 audio bitrate in kbps (overrides quality-based audio rate)\n"); printf(" Valid values: 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384\n"); printf(" -S, --subtitles FILE SubRip (.srt) or SAMI (.smi) subtitle file\n"); printf(" -v, --verbose Verbose output\n"); @@ -611,6 +610,7 @@ static void show_usage(const char *program_name) { printf(" --no-perceptual-tuning Disable perceptual quantisation\n"); printf(" --encode-limit N Encode only first N frames (useful for testing/analysis)\n"); printf(" --dump-frame N Dump quantised coefficients for frame N (creates .bin files)\n"); + printf(" --wavelet N Wavelet filter: 0=CDF 5/3, 1=CDF 9/7, 2=CDF 13/7, 16=DD-4, 255=Haar (default: 1)\n"); printf(" --help Show this help\n\n"); printf("Audio Rate by Quality:\n "); @@ -3159,12 +3159,12 @@ int main(int argc, char *argv[]) { {"size", required_argument, 0, 's'}, {"fps", required_argument, 0, 'f'}, {"quality", required_argument, 0, 'q'}, + {"quantizer", required_argument, 0, 'Q'}, {"quantiser", required_argument, 0, 'Q'}, - {"quantiser", required_argument, 0, 'Q'}, - {"wavelet", required_argument, 0, 'w'}, + {"wavelet", required_argument, 0, 1010}, {"channel-layout", required_argument, 0, 'c'}, {"bitrate", required_argument, 0, 'b'}, - {"arate", required_argument, 0, 1400}, + {"arate", required_argument, 0, 'a'}, {"subtitle", required_argument, 0, 'S'}, {"subtitles", required_argument, 0, 'S'}, {"verbose", no_argument, 0, 'v'}, @@ -3212,7 +3212,7 @@ int main(int argc, char *argv[]) { enc->quantiser_co = CLAMP(enc->quantiser_co, 0, 255); enc->quantiser_cg = CLAMP(enc->quantiser_cg, 0, 255); break; - case 'w': + case 1010: // --wavelet enc->wavelet_filter = CLAMP(atoi(optarg), 0, 255); break; case 'b': { @@ -3300,7 +3300,7 @@ int main(int argc, char *argv[]) { case 1009: // --dump-frame debugDumpFrameTarget = atoi(optarg); break; - case 1400: // --arate + case 'a': { int bitrate = atoi(optarg); int valid_bitrate = validate_mp2_bitrate(bitrate); diff --git a/video_encoder/exponential_numeric_system.ods b/video_encoder/exponential_numeric_system.ods index d89d1bbea42ab0e2f64a7b4a83c23ae729f6da36..e76634f549c0545ba92aee7c9d6c74993579aaa4 100644 GIT binary patch delta 10800 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%0A8NN*zw_djekyMv8L)tN z9AG}laGa4T1yj7WHVJkW_OeMPSG$n#o+;+y*3?N75~s5N&z4%_fc*>cwQPuW^M$dMj4=EEAQHy{eH?B zn7l~(-ztrOzKQDB0w0lbAje^}A@Rgx`>x>36;>lch$OOb!$G7Ywb$V)7LWH@3?E7f z#EuhP%(St*Js1V5XU4x#B~*5*Y$BwYg%=g7^L;#R#BU1*1WFRuHbkSC?fb-){cWkL zUf8dyZpdoo&7U;ipH)7=zm>;U8C5fuczAmJKV&D+TCBC7DeH97W1>vYl|4EH`k+r< z+kkU3^Eb^}M`abO#UfSbQ`9TRL}H2iEB?trRZ)M(HF2q4Rk8Js%2nk%K#;T?ZZxtT zCik3b$7pB2VlmSjLp?r2xp1*D#!xg22_iw}*o<1p7bKUPrbeaQuiF1`4dNnafm8zt zy7L}+&*cE-MNx}PA$^SYCq;=84Jp@=dMVmEit1@&brdZ~*8->r!p)fU)*GS*6(nl@ zfZRb@Qr{Xz_#eo_gAkNc{sWOkfhZazVOvHz{IM}{Q8hYBF@5wKN^YSj38vcI%$dEk z>p~Ri1*P{xJ1mW#k7Y(K{yvUH{tWZ4#|u0(G-qp1 z3)I2Kzk~jZ`1g4V?q4}*X!4L=5vuDtzmRo!A-6^UG|DYXh2cvNNuVcx{QrXe%_!=? U<$sTDNTMh$76N(vkB0Vt0P8-+h5!Hn delta 9848 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