diff options
-rw-r--r-- | DOCS/man/en/options.rst | 6 | ||||
-rw-r--r-- | DOCS/man/en/vo.rst | 3 | ||||
-rw-r--r-- | video/image_writer.c | 6 | ||||
-rw-r--r-- | video/image_writer.h | 1 |
4 files changed, 15 insertions, 1 deletions
diff --git a/DOCS/man/en/options.rst b/DOCS/man/en/options.rst index f8a999758e..516d485c7e 100644 --- a/DOCS/man/en/options.rst +++ b/DOCS/man/en/options.rst @@ -1791,6 +1791,12 @@ to write a screenshot. Too high compression might occupy enough CPU time to interrupt playback. The default is 7. +--screenshot-png-filter=<0-5> + Set the filter applied prior to PNG compression. 0 is none, 1 is "sub", 2 is + "up", 3 is "average", 4 is "Paeth", and 5 is "mixed". This affects the level + of compression that can be achieved. For most images, "mixed" achieves the + best compression ratio, hence it is the default. + --screenshot-template=<template> Specify the filename template used to save screenshots. The template specifies the filename without file extension, and can contain format diff --git a/DOCS/man/en/vo.rst b/DOCS/man/en/vo.rst index 251e71ce03..079e146f8a 100644 --- a/DOCS/man/en/vo.rst +++ b/DOCS/man/en/vo.rst @@ -708,6 +708,9 @@ image png-compression=<0-9> PNG compression factor (speed vs. file size tradeoff) (default: 7) + png-filter=<0-5> + Filter applied prior to PNG compression (0 = none; 1 = sub; 2 = up; + 3 = average; 4 = Paeth; 5 = mixed) (default: 5) jpeg-quality=<0-100> JPEG quality factor (default: 90) [no-]jpeg-progressive diff --git a/video/image_writer.c b/video/image_writer.c index a65024124e..1791c01a38 100644 --- a/video/image_writer.c +++ b/video/image_writer.c @@ -46,6 +46,7 @@ const struct image_writer_opts image_writer_opts_defaults = { .format = "jpg", .png_compression = 7, + .png_filter = 5, .jpeg_quality = 90, .jpeg_optimize = 100, .jpeg_smooth = 0, @@ -65,6 +66,7 @@ const struct m_sub_options image_writer_conf = { OPT_FLAG("jpeg-progressive", jpeg_progressive, 0), OPT_FLAG("jpeg-baseline", jpeg_baseline, 0), OPT_INTRANGE("png-compression", png_compression, 0, 0, 9), + OPT_INTRANGE("png-filter", png_filter, 0, 0, 5), OPT_STRING("format", format, 0), {0}, }, @@ -105,8 +107,10 @@ static int write_lavc(struct image_writer_ctx *ctx, mp_image_t *image, FILE *fp) avctx->width = image->w; avctx->height = image->h; avctx->pix_fmt = imgfmt2pixfmt(image->imgfmt); - if (ctx->writer->lavc_codec == AV_CODEC_ID_PNG) + if (ctx->writer->lavc_codec == AV_CODEC_ID_PNG) { avctx->compression_level = ctx->opts->png_compression; + avctx->prediction_method = ctx->opts->png_filter; + } if (avcodec_open2(avctx, codec, NULL) < 0) { print_open_fail: diff --git a/video/image_writer.h b/video/image_writer.h index e73b526c7e..4f5942edb5 100644 --- a/video/image_writer.h +++ b/video/image_writer.h @@ -21,6 +21,7 @@ struct mp_csp_details; struct image_writer_opts { char *format; int png_compression; + int png_filter; int jpeg_quality; int jpeg_optimize; int jpeg_smooth; |