Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: "Аскар Сафин" <safinaskar@gmail.com>
To: ffmpeg-devel@ffmpeg.org
Subject: [FFmpeg-devel] Trivial codec based on QOI and zstd compresses better than all lossless ffmpeg codecs on my data from screen
Date: Sat, 11 Jun 2022 02:37:19 +0300
Message-ID: <CAPnZJGA_WgDjdKJkmRqsJMTn6EBNp5tEb0mN2NjRB2sh8EE9fQ@mail.gmail.com> (raw)

Hi. I use Debian Linux. I always capture my screen. I do this using my
own program, which takes rgb24 frames from X server and saves them
lossless in my own format. At fps 4
(but duplicate frames are dropped). My codec is absolutely trivial
(and lossless), it is based on ideas from QOI (
https://github.com/phoboslab/qoi ) and QOV (
https://github.com/wide-video/qov ).
First I apply something like QOV encoding (with interframe coding) and
then compress every frame using zstd with level 8. Surprisingly such
trivial codec performs very well on my data.
It gives better compress ratio than all lossless ffmpeg codecs I tried
(x264, x265, vp9, av1, ffv1, ffvhuff, flv).

I write this not because I want to brag. I write this because it is
possible that you will be interested in my ideas, that you will
incorporate my ideas into your code.

ffv1 spec reads: "FFV1 is designed to support a wide range of lossless
video applications such as... screen recording..." Unfortunately, ffv1
turned out to be bad compared to my codec
on screen recording data, so it is possible ffv1 could benefit from my ideas.

Now let me show you some data. I have a test video named
"test-video-2022-05-16-17.mkv" in lossless x264 fullhd, which was
captured from my screen. Uncompressed PAM size is
208,268,339,335 bytes (208.2 G). Unfortunately I cannot share it,
because it contains a lot of my personal info. Now let me show you how
different codecs perform on this file. All data
was collected with this premises: pix_fmt is rgb24, everything is
lossless, gop is 32, everything is on aws ec2 c3.4xlarge with 16
cores, everything on Debian sid with sid's version of ffmpeg.

Codec: x264
Command line: ffmpeg -loglevel warning -i /tmp/t.mkv -pix_fmt rgb24
-c:v libx264rgb -preset veryslow -qp 0 -threads 16 -g 32 /tmp/out.mkv
Size: 2506211845 (~ 2.5 G)
Time: 1218.22

Codec: ffv1
Command line: ffmpeg -loglevel warning -i /tmp/t.mkv -c:v ffv1
-pix_fmt rgb24 -level 3 -threads 16 -g 32 -context 1 -slices 4 -coder
-2 /tmp/o.mkv
Size: 9431473324 (~9.4 G)
Time: 1125.15

Codec: my codec (single threaded!)
Command line: ffmpeg -loglevel warning -i /tmp/t.mkv -c:v pam -pix_fmt
rgb24 -f image2pipe pipe: < /dev/null | /tmp/nrdy encode 8 32
Size: 1860479127 (~1.8 G)
Time: 470.88

So, as you can see my codec beats ffv1 and x264 both by compress ratio
and speed. Moreover, my single-threaded codec beats other
multi-threads codecs by time. Are you interested?
If yes, I can share my code. Of course, under some permissive license.
Again: there is no any magic here, just something like QOV + zstd.
Also, I can specially extract some sample
from my videos, which doesn't contain personal info, and perform tests
on this sample and publish sample
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

             reply	other threads:[~2022-06-10 23:37 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-10 23:37 Аскар Сафин [this message]
2022-06-11  8:39 ` Paul B Mahol
2022-06-11 10:16   ` Аскар Сафин
2022-06-11  9:03 ` Martijn van Beurden
2022-06-11 15:24 ` Michael Niedermayer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAPnZJGA_WgDjdKJkmRqsJMTn6EBNp5tEb0mN2NjRB2sh8EE9fQ@mail.gmail.com \
    --to=safinaskar@gmail.com \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git