Improve quality again

This commit is contained in:
dec05eba
2024-08-20 15:23:49 +02:00
parent aee79749bd
commit faf6ba69a0

View File

@@ -467,16 +467,16 @@ static AVCodecContext *create_video_codec_context(AVPixelFormat pix_fmt,
if(codec_context->codec_id == AV_CODEC_ID_AV1 || codec_context->codec_id == AV_CODEC_ID_H264 || codec_context->codec_id == AV_CODEC_ID_HEVC) { if(codec_context->codec_id == AV_CODEC_ID_AV1 || codec_context->codec_id == AV_CODEC_ID_H264 || codec_context->codec_id == AV_CODEC_ID_HEVC) {
switch(video_quality) { switch(video_quality) {
case VideoQuality::MEDIUM: case VideoQuality::MEDIUM:
codec_context->global_quality = 180 * quality_multiply; codec_context->global_quality = 160 * quality_multiply;
break; break;
case VideoQuality::HIGH: case VideoQuality::HIGH:
codec_context->global_quality = 140 * quality_multiply; codec_context->global_quality = 130 * quality_multiply;
break; break;
case VideoQuality::VERY_HIGH: case VideoQuality::VERY_HIGH:
codec_context->global_quality = 120 * quality_multiply; codec_context->global_quality = 110 * quality_multiply;
break; break;
case VideoQuality::ULTRA: case VideoQuality::ULTRA:
codec_context->global_quality = 100 * quality_multiply; codec_context->global_quality = 90 * quality_multiply;
break; break;
} }
} else if(codec_context->codec_id == AV_CODEC_ID_VP8) { } else if(codec_context->codec_id == AV_CODEC_ID_VP8) {
@@ -746,16 +746,16 @@ static void open_video_software(AVCodecContext *codec_context, VideoQuality vide
if(codec_context->codec_id == AV_CODEC_ID_AV1) { if(codec_context->codec_id == AV_CODEC_ID_AV1) {
switch(video_quality) { switch(video_quality) {
case VideoQuality::MEDIUM: case VideoQuality::MEDIUM:
av_dict_set_int(&options, "qp", 37 * qp_multiply, 0); av_dict_set_int(&options, "qp", 35 * qp_multiply, 0);
break; break;
case VideoQuality::HIGH: case VideoQuality::HIGH:
av_dict_set_int(&options, "qp", 32 * qp_multiply, 0); av_dict_set_int(&options, "qp", 30 * qp_multiply, 0);
break; break;
case VideoQuality::VERY_HIGH: case VideoQuality::VERY_HIGH:
av_dict_set_int(&options, "qp", 28 * qp_multiply, 0); av_dict_set_int(&options, "qp", 25 * qp_multiply, 0);
break; break;
case VideoQuality::ULTRA: case VideoQuality::ULTRA:
av_dict_set_int(&options, "qp", 24 * qp_multiply, 0); av_dict_set_int(&options, "qp", 22 * qp_multiply, 0);
break; break;
} }
} else if(codec_context->codec_id == AV_CODEC_ID_H264) { } else if(codec_context->codec_id == AV_CODEC_ID_H264) {
@@ -767,25 +767,25 @@ static void open_video_software(AVCodecContext *codec_context, VideoQuality vide
av_dict_set_int(&options, "qp", 30 * qp_multiply, 0); av_dict_set_int(&options, "qp", 30 * qp_multiply, 0);
break; break;
case VideoQuality::VERY_HIGH: case VideoQuality::VERY_HIGH:
av_dict_set_int(&options, "qp", 26 * qp_multiply, 0); av_dict_set_int(&options, "qp", 23 * qp_multiply, 0);
break; break;
case VideoQuality::ULTRA: case VideoQuality::ULTRA:
av_dict_set_int(&options, "qp", 22 * qp_multiply, 0); av_dict_set_int(&options, "qp", 20 * qp_multiply, 0);
break; break;
} }
} else { } else {
switch(video_quality) { switch(video_quality) {
case VideoQuality::MEDIUM: case VideoQuality::MEDIUM:
av_dict_set_int(&options, "qp", 37 * qp_multiply, 0); av_dict_set_int(&options, "qp", 35 * qp_multiply, 0);
break; break;
case VideoQuality::HIGH: case VideoQuality::HIGH:
av_dict_set_int(&options, "qp", 32 * qp_multiply, 0); av_dict_set_int(&options, "qp", 30 * qp_multiply, 0);
break; break;
case VideoQuality::VERY_HIGH: case VideoQuality::VERY_HIGH:
av_dict_set_int(&options, "qp", 28 * qp_multiply, 0); av_dict_set_int(&options, "qp", 25 * qp_multiply, 0);
break; break;
case VideoQuality::ULTRA: case VideoQuality::ULTRA:
av_dict_set_int(&options, "qp", 24 * qp_multiply, 0); av_dict_set_int(&options, "qp", 22 * qp_multiply, 0);
break; break;
} }
} }
@@ -837,16 +837,16 @@ static void open_video_hardware(AVCodecContext *codec_context, VideoQuality vide
if(codec_context->codec_id == AV_CODEC_ID_AV1) { if(codec_context->codec_id == AV_CODEC_ID_AV1) {
switch(video_quality) { switch(video_quality) {
case VideoQuality::MEDIUM: case VideoQuality::MEDIUM:
av_dict_set_int(&options, "qp", 37 * qp_multiply, 0); av_dict_set_int(&options, "qp", 35 * qp_multiply, 0);
break; break;
case VideoQuality::HIGH: case VideoQuality::HIGH:
av_dict_set_int(&options, "qp", 32 * qp_multiply, 0); av_dict_set_int(&options, "qp", 30 * qp_multiply, 0);
break; break;
case VideoQuality::VERY_HIGH: case VideoQuality::VERY_HIGH:
av_dict_set_int(&options, "qp", 28 * qp_multiply, 0); av_dict_set_int(&options, "qp", 25 * qp_multiply, 0);
break; break;
case VideoQuality::ULTRA: case VideoQuality::ULTRA:
av_dict_set_int(&options, "qp", 24 * qp_multiply, 0); av_dict_set_int(&options, "qp", 22 * qp_multiply, 0);
break; break;
} }
} else if(codec_context->codec_id == AV_CODEC_ID_H264) { } else if(codec_context->codec_id == AV_CODEC_ID_H264) {
@@ -858,40 +858,40 @@ static void open_video_hardware(AVCodecContext *codec_context, VideoQuality vide
av_dict_set_int(&options, "qp", 30 * qp_multiply, 0); av_dict_set_int(&options, "qp", 30 * qp_multiply, 0);
break; break;
case VideoQuality::VERY_HIGH: case VideoQuality::VERY_HIGH:
av_dict_set_int(&options, "qp", 26 * qp_multiply, 0); av_dict_set_int(&options, "qp", 23 * qp_multiply, 0);
break; break;
case VideoQuality::ULTRA: case VideoQuality::ULTRA:
av_dict_set_int(&options, "qp", 22 * qp_multiply, 0); av_dict_set_int(&options, "qp", 20 * qp_multiply, 0);
break; break;
} }
} else if(codec_context->codec_id == AV_CODEC_ID_HEVC) { } else if(codec_context->codec_id == AV_CODEC_ID_HEVC) {
switch(video_quality) { switch(video_quality) {
case VideoQuality::MEDIUM: case VideoQuality::MEDIUM:
av_dict_set_int(&options, "qp", 37 * qp_multiply, 0); av_dict_set_int(&options, "qp", 35 * qp_multiply, 0);
break; break;
case VideoQuality::HIGH: case VideoQuality::HIGH:
av_dict_set_int(&options, "qp", 32 * qp_multiply, 0); av_dict_set_int(&options, "qp", 30 * qp_multiply, 0);
break; break;
case VideoQuality::VERY_HIGH: case VideoQuality::VERY_HIGH:
av_dict_set_int(&options, "qp", 28 * qp_multiply, 0); av_dict_set_int(&options, "qp", 25 * qp_multiply, 0);
break; break;
case VideoQuality::ULTRA: case VideoQuality::ULTRA:
av_dict_set_int(&options, "qp", 24 * qp_multiply, 0); av_dict_set_int(&options, "qp", 22 * qp_multiply, 0);
break; break;
} }
} else if(codec_context->codec_id == AV_CODEC_ID_VP8 || codec_context->codec_id == AV_CODEC_ID_VP9) { } else if(codec_context->codec_id == AV_CODEC_ID_VP8 || codec_context->codec_id == AV_CODEC_ID_VP9) {
switch(video_quality) { switch(video_quality) {
case VideoQuality::MEDIUM: case VideoQuality::MEDIUM:
av_dict_set_int(&options, "qp", 37 * qp_multiply, 0); av_dict_set_int(&options, "qp", 35 * qp_multiply, 0);
break; break;
case VideoQuality::HIGH: case VideoQuality::HIGH:
av_dict_set_int(&options, "qp", 32 * qp_multiply, 0); av_dict_set_int(&options, "qp", 30 * qp_multiply, 0);
break; break;
case VideoQuality::VERY_HIGH: case VideoQuality::VERY_HIGH:
av_dict_set_int(&options, "qp", 28 * qp_multiply, 0); av_dict_set_int(&options, "qp", 25 * qp_multiply, 0);
break; break;
case VideoQuality::ULTRA: case VideoQuality::ULTRA:
av_dict_set_int(&options, "qp", 24 * qp_multiply, 0); av_dict_set_int(&options, "qp", 22 * qp_multiply, 0);
break; break;
} }
} }
@@ -968,40 +968,40 @@ static void open_video_hardware(AVCodecContext *codec_context, VideoQuality vide
av_dict_set_int(&options, "qp", 30 * qp_multiply, 0); av_dict_set_int(&options, "qp", 30 * qp_multiply, 0);
break; break;
case VideoQuality::VERY_HIGH: case VideoQuality::VERY_HIGH:
av_dict_set_int(&options, "qp", 26 * qp_multiply, 0); av_dict_set_int(&options, "qp", 23 * qp_multiply, 0);
break; break;
case VideoQuality::ULTRA: case VideoQuality::ULTRA:
av_dict_set_int(&options, "qp", 22 * qp_multiply, 0); av_dict_set_int(&options, "qp", 20 * qp_multiply, 0);
break; break;
} }
} else if(codec_context->codec_id == AV_CODEC_ID_HEVC) { } else if(codec_context->codec_id == AV_CODEC_ID_HEVC) {
switch(video_quality) { switch(video_quality) {
case VideoQuality::MEDIUM: case VideoQuality::MEDIUM:
av_dict_set_int(&options, "qp", 37 * qp_multiply, 0); av_dict_set_int(&options, "qp", 35 * qp_multiply, 0);
break; break;
case VideoQuality::HIGH: case VideoQuality::HIGH:
av_dict_set_int(&options, "qp", 32 * qp_multiply, 0); av_dict_set_int(&options, "qp", 30 * qp_multiply, 0);
break; break;
case VideoQuality::VERY_HIGH: case VideoQuality::VERY_HIGH:
av_dict_set_int(&options, "qp", 28 * qp_multiply, 0); av_dict_set_int(&options, "qp", 25 * qp_multiply, 0);
break; break;
case VideoQuality::ULTRA: case VideoQuality::ULTRA:
av_dict_set_int(&options, "qp", 24 * qp_multiply, 0); av_dict_set_int(&options, "qp", 22 * qp_multiply, 0);
break; break;
} }
} else if(codec_context->codec_id == AV_CODEC_ID_VP8 || codec_context->codec_id == AV_CODEC_ID_VP9) { } else if(codec_context->codec_id == AV_CODEC_ID_VP8 || codec_context->codec_id == AV_CODEC_ID_VP9) {
switch(video_quality) { switch(video_quality) {
case VideoQuality::MEDIUM: case VideoQuality::MEDIUM:
av_dict_set_int(&options, "qp", 37 * qp_multiply, 0); av_dict_set_int(&options, "qp", 35 * qp_multiply, 0);
break; break;
case VideoQuality::HIGH: case VideoQuality::HIGH:
av_dict_set_int(&options, "qp", 32 * qp_multiply, 0); av_dict_set_int(&options, "qp", 30 * qp_multiply, 0);
break; break;
case VideoQuality::VERY_HIGH: case VideoQuality::VERY_HIGH:
av_dict_set_int(&options, "qp", 28 * qp_multiply, 0); av_dict_set_int(&options, "qp", 25 * qp_multiply, 0);
break; break;
case VideoQuality::ULTRA: case VideoQuality::ULTRA:
av_dict_set_int(&options, "qp", 24 * qp_multiply, 0); av_dict_set_int(&options, "qp", 22 * qp_multiply, 0);
break; break;
} }
} }