Cross-platform command-line AV1 / VP9 / HEVC / H264 encoding framework with per scene quality encoding

Overview


Av1an

A cross-platform framework to streamline encoding

alt text

Discord server

Easy, Fast, Efficient and Feature Rich

An easy way to start using AV1 / HEVC / H264 / VP9 / VP8 encoding. AOM, RAV1E, SVT-AV1, SVT-VP9, VPX, x265, x264 are supported.

Example with default parameters:

av1an -i input

With your own parameters:

av1an -i input -v " --cpu-used=3 --end-usage=q --cq-level=30 --threads=8 " -w 10
--target-quality 95 -a "-c:a libopus -ac 2 -b:a 192k" -log my_log -o output

Usage

-i  --input             Input file(s), or Vapoursynth (.py,.vpy) script
                        (relative or absolute path)

-o  --output-file       Name/Path for output file (Default: (input file name)_(encoder).mkv)
                        Output is `mkv` by default
                        Ouput extension can be set to: `mkv`, `webm`, `mp4`

-e  --encoder           Encoder to use
                        [default: aom] [possible values: aom, rav1e, vpx, svt-av1, x264, x265]

-v  --video-params      Encoder settings flags (If not set, will be used default parameters.)
                        Must be inside ' ' or " "

-p  --passes            Set number of passes for encoding
                        (Default: AOMENC: 2, rav1e: 1, SVT-AV1: 1, SVT-VP9: 1,
                        VPX: 2, x265: 1, x264: 1)

-w  --workers           Override number of workers.

-r  --resume            Resumes encoding.

--keep                  Doesn't delete temporary folders after encode has finished.

-q  --quiet             Do not print a progress bar to the terminal.

-l  --logging           Path to .log file(By default created in temp folder)

--temp                  Set path for the temporary folder. [default: .hash]

-c  --concat            Concatenation method to use for splits Default: ffmpeg
                        [possible values: ffmpeg, mkvmerge, ivf]

FFmpeg options

-a  --audio-params      FFmpeg audio settings (Default: copy audio from source to output)
                        Example: -a '-c:a libopus -b:a  64k'

-f  --ffmpeg            FFmpeg options video options.
                        Applied to each encoding segment individually.
                        (Warning: Cropping doesn't work with Target VMAF mode
                        without specifying it in --vmaf-filter)
                        Example:
                        --ff " -vf scale=320:240 "

--pix-format            Setting custom pixel/bit format for piping
                        (Default: 'yuv420p10le')

Segmenting

--split-method          Method used for generating splits.(Default: av-scenedetect)
                        Options: `av-scenedetect`, `none`
                        `none` -  skips scenedetection.

-m  --chunk-method      Determine the method in which chunks are made for encoding.
                        By default the best method is selected automatically.
                        [possible values: segment, select, ffms2, lsmash, hybrid]

-s  --scenes            File to save/read scenes.

-x  --extra-split       Size of chunk after which it will be split [default: 240]

--min-scene-len         Specifies the minimum number of frames in each split.

Target Quality

--target-quality        Quality value to target.
                        VMAF used as substructure for algorithms.
                        When using this mode, you must use quantizer/quality modes of enocoder.

--target-quality-method Type of algorithm for use.
                        Options: per_shot

--min-q, --max-q        Min,Max Q values limits
                        If not set by the user, the default for encoder range will be used.

--vmaf                  Calculate VMAF after encoding is done and make a plot.

--vmaf-path             Custom path to libvmaf models.
                        example: --vmaf-path "vmaf_v0.6.1.pkl"
                        Recommended to place both files in encoding folder
                        (`vmaf_v0.6.1.pkl` and `vmaf_v0.6.1.pkl.model`)
                        (Required if VMAF calculation doesn't work by default)

--vmaf-res              Resolution for VMAF calculation.
                        [default: 1920x1080]

--probes                Number of probes for target quality. [default: 4]

--probe-slow            Use probided video encoding parameters for vmaf probes.

--vmaf-filter           Filter used for VMAF calculation. The passed format is filter_complex.
                        So if crop filter used ` -ff " -vf crop=200:1000:0:0 "`
                        `--vmaf-filter` must be : ` --vmaf-filter "crop=200:1000:0:0"`

--probing-rate          Setting rate for VMAF probes. Using every N frame used in probe.
                        [default: 4]

--vmaf-threads          Limit number of threads that are used for VMAF calculation

Main Features

Splitting video by scenes for parallel encoding because AV1 encoders are currently not very good at multithreading and encoding is limited to a very limited number of threads.

  • Vapoursynth script input support.
  • Speed up video encoding.
  • Target Quality mode. Targeting end result reference visual quality. VMAF used as a substructure
  • Resuming encoding without loss of encoded progress.
  • Simple and clean console look.
  • Automatic detection of the number of workers the host can handle.
  • Both video and audio transcoding.

Install

Docker

Av1an can be run in a Docker container with the following command if you are in the current directory Linux

docker run --privileged -v "$(pwd):/videos" --user $(id -u):$(id -g) -it --rm masterofzen/av1an:latest -i S01E01.mkv {options}

Windows

docker run --privileged -v "${PWD}:/videos" -it --rm masterofzen/av1an:latest -i S01E01.mkv {options}

Docker can also be built by using

docker build -t "av1an" .

To specify a different directory to use you would replace $(pwd) with the directory

docker run --privileged -v "/c/Users/masterofzen/Videos":/videos --user $(id -u):$(id -g) -it --rm masterofzen/av1an:latest -i S01E01.mkv {options}

The --user flag is required on linux to avoid permission issues with the docker container not being able to write to the location, if you get permission issues ensure your user has access to the folder that you are using to encode.

Docker tags

The docker image has the following tags

Tag Description
latest Contains the latest stable av1an version release
master Contains the latest av1an commit to the master branch
sha-##### Contains the commit of the hash that is referenced
#.## Stable av1an version release

Support the developer

Bitcoin - 1GTRkvV4KdSaRyFDYTpZckPKQCoWbWkJV1

Comments
  • Use a different method for ffmpeg frame count

    Use a different method for ffmpeg frame count

    This method uses ffprobe to count the number of packets (which is identical to the number of frames, but faster) in a video stream. This works with more video formats, including with --enable-keyframe-filtering=2 in aomenc. Performance should be similar or better than ffmpeg -copy.

    Fixes #367

    opened by shssoichiro 26
  • Video chunks are assigned index in wrong order leading to out-of-order video parts

    Video chunks are assigned index in wrong order leading to out-of-order video parts

    Using the newest git master (06fb8c9eddd1ca9c86b16dac7bde1ef33e15de31) using ffmpeg to concat (the default) leads to a wrong order in the video. This of course leads to video async. Tested multiple source files, problem always appears, even with small files (~30s). Not a big difference, seems to be only 1 or 2 chunks at a time; I think one of the first gets sorted to the end.

    Using mkvmerge fixed it for the small files at least, restarting my 3h encode now to test if this fixed it aswell.

    opened by mxsrm 23
  • Chunk: 1Fatal: Specify stream dimensions with --width (-w)  and --height (-h)

    Chunk: 1Fatal: Specify stream dimensions with --width (-w) and --height (-h)

    I cannot get any type of encode to work, because it either gives an error like "specify stream dimensions", or it suddenly stops the encode some point before finishing. I tried adding the --width and --height arguments through the -v parameter, and even though the behavior is different, there is still an issue where it stops encoding.

    Command: av1an -i input.mkv -enc aom -v "--cpu-used=3 --end-usage=q --cq-level=3 --width 1920 --height 1080" --target_quality 95 --min_q 20 --max_q 60 -o output.mkv

    However, the command also fails with just av1an -i input.mkv

    It seems like the first pass works, but there's always some type of issue for me with the second pass.

    Here's the command line output for the above command:

    100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████▊| 722/723 [00:05<00:00, 136.21frames/s]
    Queue: 6 Workers: 6 Passes: 2
    Params: --cpu-used=3 --end-usage=q --cq-level=3 --width 1920 --height 1080
      0%|                                                                                                                         | 0/723 [00:00<?, ?fr/s]:: Encoder encountered an error: 1
    :: Chunk: 5Fatal: Specify stream dimensions with --width (-w)  and --height (-h)
    :: Chunk #5 crashed with:
    :: Exception: <class 'Exception'>
     Error in processing pipe
    :: Restarting chunk
    
    :: Encoder encountered an error: 1
    :: Chunk: 0Fatal: Specify stream dimensions with --width (-w)  and --height (-h)
    :: Chunk #0 crashed with:
    :: Exception: <class 'Exception'>
     Error in processing pipe
    :: Restarting chunk
    
    :: Encoder encountered an error: 1
    :: Chunk: 2Fatal: Specify stream dimensions with --width (-w)  and --height (-h)
    :: Chunk #2 crashed with:
    :: Exception: <class 'Exception'>
     Error in processing pipe
    :: Restarting chunk
    
    :: Encoder encountered an error: 1
    :: Chunk: 4Fatal: Specify stream dimensions with --width (-w)  and --height (-h)
    :: Chunk #4 crashed with:
    :: Exception: <class 'Exception'>
     Error in processing pipe
    :: Restarting chunk
    
    :: Encoder encountered an error: 1
    :: Chunk: 5Fatal: Specify stream dimensions with --width (-w)  and --height (-h)
    :: Chunk #5 crashed with:
    :: Exception: <class 'Exception'>
     Error in processing pipe
    :: Restarting chunk
    
    :: Encoder encountered an error: 1
    :: Chunk: 5Fatal: Specify stream dimensions with --width (-w)  and --height (-h)
    :: Chunk #5 crashed with:
    :: Exception: <class 'Exception'>
     Error in processing pipe
    :: Restarting chunk
    
    ::FATAL::
    ::Chunk #5 failed more than 3 times, shutting down thread
    
    
    :: Encoder encountered an error: 1
    :: Chunk: 1Fatal: Specify stream dimensions with --width (-w)  and --height (-h)
    :: Chunk #1 crashed with:
    :: Exception: <class 'Exception'>
     Error in processing pipe
    :: Restarting chunk
    
    :: Encoder encountered an error: 1
    :: Chunk: 1
    Error: option width requires argument.
    Usage: aomenc <options> -o dst_filename src_filename
    Use --help to see the full list of options.
    :: Chunk #1 crashed with:
    :: Exception: <class 'Exception'>
     Error in processing encoding pipe
    :: Restarting chunk
    

    In another issue I read that it might work if you first encode a lossless version (with x264 crf 0) of the input and use that as the input to av1an, but I experience the same behavior either way.

    opened by redzic 22
  • Cannot transcode media, YUV2MPEG error

    Cannot transcode media, YUV2MPEG error

    Error:

    ERROR [av1an_core::broker] [chunk 153] encoder crashed 3 times, shutting down worker
    ERROR [av1an_core::broker] [chunk 153] encoder crashed: exit status: 1
    stdout:
    
    stderr:
            Error parsing header; not a YUV2MPEG2 file?
            Fatal: Unsupported Y4M stream.
    
    
    source pipe stderr:
    
    ffmpeg pipe stderr:
    

    Command:

    $ av1an -i 'file.mkv' -e vpx -w 12 -a " -c:a copy -map 0" -v " --cq-level=30 --end-usage=cq --threads=1 " -o 'out.mkv'
    

    ffprobe:

    ffprobe version 4.4 Copyright (c) 2007-2021 the FFmpeg developers
      built with gcc 10 (Debian 10.2.1-6)
      configuration: --disable-decoder=amrnb --disable-decoder=libopenjpeg --disable-gnutls --disable-liblensfun --disable-libopencv --disable-podpages --disable-sndio --disable-stripping --enable-avfilter --enable-avresample --enable-gcrypt --enable-gpl --enable-ladspa --enable-libaom --enable-libaribb24 --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libdavs2 --enable-libdc1394 --enable-libfdk-aac --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libkvazaar --enable-libmp3lame --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libwebp --enable-libx265 --enable-libxavs2 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-nonfree --enable-openal --enable-opencl --enable-opengl --enable-openssl --enable-postproc --enable-pthreads --enable-shared --enable-version3 --enable-vulkan --incdir=/usr/include/x86_64-linux-gnu --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --toolchain=hardened --enable-frei0r --enable-chromaprint --enable-libx264 --enable-vaapi --enable-libmfx --enable-libvmaf --enable-libsvtav1 --enable-libilbc --disable-altivec --shlibdir=/usr/lib/x86_64-linux-gnu
      libavutil      56. 70.100 / 56. 70.100
      libavcodec     58.134.100 / 58.134.100
      libavformat    58. 76.100 / 58. 76.100
      libavdevice    58. 13.100 / 58. 13.100
      libavfilter     7.110.100 /  7.110.100
      libavresample   4.  0.  0 /  4.  0.  0
      libswscale      5.  9.100 /  5.  9.100
      libswresample   3.  9.100 /  3.  9.100
      libpostproc    55.  9.100 / 55.  9.100
    [matroska,webm @ 0x556b153dcf80] Could not find codec parameters for stream 5 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size
    Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
    [matroska,webm @ 0x556b153dcf80] Could not find codec parameters for stream 6 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size
    Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
    [matroska,webm @ 0x556b153dcf80] Could not find codec parameters for stream 7 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size
    Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
    [matroska,webm @ 0x556b153dcf80] Could not find codec parameters for stream 8 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size
    Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
    [matroska,webm @ 0x556b153dcf80] Could not find codec parameters for stream 9 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size
    Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
    Input #0, matroska,webm, from 'file.mkv':
      Metadata:
        title           : legitmedia
        encoder         : libebml v1.3.4 + libmatroska v1.4.5
        creation_time   : 2016-09-13T20:43:41.000000Z
      Duration: 00:47:12.70, start: 0.000000, bitrate: 80277 kb/s
      Stream #0:0(eng): Video: h264 (High), yuv420p(progressive), 3840x2160 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
        Metadata:
          title           : legitmedia
          BPS             : 74132620
          BPS-eng         : 74132620
          DURATION        : 00:47:12.663000000
          DURATION-eng    : 00:47:12.663000000
          NUMBER_OF_FRAMES: 67916
          NUMBER_OF_FRAMES-eng: 67916
          NUMBER_OF_BYTES : 26249091355
          NUMBER_OF_BYTES-eng: 26249091355
          _STATISTICS_WRITING_APP: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_DATE_UTC: 2016-09-13 20:43:41
          _STATISTICS_WRITING_DATE_UTC-eng: 2016-09-13 20:43:41
          _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
          _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      Stream #0:1(eng): Audio: dts (DTS-HD MA), 48000 Hz, 5.1(side), s16p (default)
        Metadata:
          title           : DTS-HD MA 5.1 @ 1825 kbps - Blu-ray
          BPS             : 1824571
          BPS-eng         : 1824571
          DURATION        : 00:47:12.672000000
          DURATION-eng    : 00:47:12.672000000
          NUMBER_OF_FRAMES: 265563
          NUMBER_OF_FRAMES-eng: 265563
          NUMBER_OF_BYTES : 646051724
          NUMBER_OF_BYTES-eng: 646051724
          _STATISTICS_WRITING_APP: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_DATE_UTC: 2016-09-13 20:43:41
          _STATISTICS_WRITING_DATE_UTC-eng: 2016-09-13 20:43:41
          _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
          _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      Stream #0:2(rus): Audio: dts (DTS-HD MA), 48000 Hz, 5.1(side), s16p
        Metadata:
          title           : DTS-HD MA 5.1 @ 1773 kbps - MVO, LostFilm
          BPS             : 1772944
          BPS-eng         : 1772944
          DURATION        : 00:47:12.704000000
          DURATION-eng    : 00:47:12.704000000
          NUMBER_OF_FRAMES: 265566
          NUMBER_OF_FRAMES-eng: 265566
          NUMBER_OF_BYTES : 627778212
          NUMBER_OF_BYTES-eng: 627778212
          _STATISTICS_WRITING_APP: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_DATE_UTC: 2016-09-13 20:43:41
          _STATISTICS_WRITING_DATE_UTC-eng: 2016-09-13 20:43:41
          _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
          _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      Stream #0:3(rus): Audio: dts (DTS-HD MA), 48000 Hz, 5.1(side), s16p
        Metadata:
          title           : DTS-HD MA 5.1 @ 1780 kbps - DVO, KvK
          BPS             : 1779988
          BPS-eng         : 1779988
          DURATION        : 00:47:12.704000000
          DURATION-eng    : 00:47:12.704000000
          NUMBER_OF_FRAMES: 265566
          NUMBER_OF_FRAMES-eng: 265566
          NUMBER_OF_BYTES : 630272620
          NUMBER_OF_BYTES-eng: 630272620
          _STATISTICS_WRITING_APP: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_DATE_UTC: 2016-09-13 20:43:41
          _STATISTICS_WRITING_DATE_UTC-eng: 2016-09-13 20:43:41
          _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
          _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      Stream #0:4(rus): Audio: ac3, 48000 Hz, 5.1(side), fltp, 640 kb/s
        Metadata:
          title           : AC3 5.1 @ 640 kbps - AVO
          BPS             : 640000
          BPS-eng         : 640000
          DURATION        : 00:47:12.704000000
          DURATION-eng    : 00:47:12.704000000
          NUMBER_OF_FRAMES: 88522
          NUMBER_OF_FRAMES-eng: 88522
          NUMBER_OF_BYTES : 226616320
          NUMBER_OF_BYTES-eng: 226616320
          _STATISTICS_WRITING_APP: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_DATE_UTC: 2016-09-13 20:43:41
          _STATISTICS_WRITING_DATE_UTC-eng: 2016-09-13 20:43:41
          _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
          _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      Stream #0:5(eng): Subtitle: hdmv_pgs_subtitle
        Metadata:
          BPS             : 14092
          BPS-eng         : 14092
          DURATION        : 00:40:05.779000000
          DURATION-eng    : 00:40:05.779000000
          NUMBER_OF_FRAMES: 840
          NUMBER_OF_FRAMES-eng: 840
          NUMBER_OF_BYTES : 4237925
          NUMBER_OF_BYTES-eng: 4237925
          _STATISTICS_WRITING_APP: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_DATE_UTC: 2016-09-13 20:43:41
          _STATISTICS_WRITING_DATE_UTC-eng: 2016-09-13 20:43:41
          _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
          _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      Stream #0:6(ara): Subtitle: hdmv_pgs_subtitle
        Metadata:
          BPS             : 10312
          BPS-eng         : 10312
          DURATION        : 00:40:05.779000000
          DURATION-eng    : 00:40:05.779000000
          NUMBER_OF_FRAMES: 844
          NUMBER_OF_FRAMES-eng: 844
          NUMBER_OF_BYTES : 3101154
          NUMBER_OF_BYTES-eng: 3101154
          _STATISTICS_WRITING_APP: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_DATE_UTC: 2016-09-13 20:43:41
          _STATISTICS_WRITING_DATE_UTC-eng: 2016-09-13 20:43:41
          _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
          _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      Stream #0:7(fre): Subtitle: hdmv_pgs_subtitle
        Metadata:
          BPS             : 9763
          BPS-eng         : 9763
          DURATION        : 00:42:56.700000000
          DURATION-eng    : 00:42:56.700000000
          NUMBER_OF_FRAMES: 832
          NUMBER_OF_FRAMES-eng: 832
          NUMBER_OF_BYTES : 3144579
          NUMBER_OF_BYTES-eng: 3144579
          _STATISTICS_WRITING_APP: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_DATE_UTC: 2016-09-13 20:43:41
          _STATISTICS_WRITING_DATE_UTC-eng: 2016-09-13 20:43:41
          _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
          _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      Stream #0:8(ger): Subtitle: hdmv_pgs_subtitle
        Metadata:
          BPS             : 14714
          BPS-eng         : 14714
          DURATION        : 00:40:05.779000000
          DURATION-eng    : 00:40:05.779000000
          NUMBER_OF_FRAMES: 840
          NUMBER_OF_FRAMES-eng: 840
          NUMBER_OF_BYTES : 4425038
          NUMBER_OF_BYTES-eng: 4425038
          _STATISTICS_WRITING_APP: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_DATE_UTC: 2016-09-13 20:43:41
          _STATISTICS_WRITING_DATE_UTC-eng: 2016-09-13 20:43:41
          _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
          _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      Stream #0:9(tur): Subtitle: hdmv_pgs_subtitle
        Metadata:
          BPS             : 12933
          BPS-eng         : 12933
          DURATION        : 00:40:05.779000000
          DURATION-eng    : 00:40:05.779000000
          NUMBER_OF_FRAMES: 840
          NUMBER_OF_FRAMES-eng: 840
          NUMBER_OF_BYTES : 3889521
          NUMBER_OF_BYTES-eng: 3889521
          _STATISTICS_WRITING_APP: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_DATE_UTC: 2016-09-13 20:43:41
          _STATISTICS_WRITING_DATE_UTC-eng: 2016-09-13 20:43:41
          _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
          _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      Stream #0:10(eng): Subtitle: hdmv_pgs_subtitle, 1920x1080
        Metadata:
          BPS             : 24480
          BPS-eng         : 24480
          DURATION        : 00:47:08.284000000
          DURATION-eng    : 00:47:08.284000000
          NUMBER_OF_FRAMES: 1666
          NUMBER_OF_FRAMES-eng: 1666
          NUMBER_OF_BYTES : 8654724
          NUMBER_OF_BYTES-eng: 8654724
          _STATISTICS_WRITING_APP: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_DATE_UTC: 2016-09-13 20:43:41
          _STATISTICS_WRITING_DATE_UTC-eng: 2016-09-13 20:43:41
          _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
          _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      Stream #0:11(fre): Subtitle: hdmv_pgs_subtitle, 1920x1080
        Metadata:
          BPS             : 17526
          BPS-eng         : 17526
          DURATION        : 00:47:08.284000000
          DURATION-eng    : 00:47:08.284000000
          NUMBER_OF_FRAMES: 1636
          NUMBER_OF_FRAMES-eng: 1636
          NUMBER_OF_BYTES : 6196121
          NUMBER_OF_BYTES-eng: 6196121
          _STATISTICS_WRITING_APP: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_DATE_UTC: 2016-09-13 20:43:41
          _STATISTICS_WRITING_DATE_UTC-eng: 2016-09-13 20:43:41
          _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
          _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      Stream #0:12(ger): Subtitle: hdmv_pgs_subtitle, 1920x1080
        Metadata:
          BPS             : 25353
          BPS-eng         : 25353
          DURATION        : 00:47:08.284000000
          DURATION-eng    : 00:47:08.284000000
          NUMBER_OF_FRAMES: 1676
          NUMBER_OF_FRAMES-eng: 1676
          NUMBER_OF_BYTES : 8963348
          NUMBER_OF_BYTES-eng: 8963348
          _STATISTICS_WRITING_APP: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.0 ('Knurl') 64bit
          _STATISTICS_WRITING_DATE_UTC: 2016-09-13 20:43:41
          _STATISTICS_WRITING_DATE_UTC-eng: 2016-09-13 20:43:41
          _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
          _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
    

    Version:

    $ av1an -V
    av1an 0.3.1-unstable (rev 154a914) (release)
    
    * Compiler
      rustc 1.59.0 (LLVM 13.0)
    
    * Target Triple
      x86_64-unknown-linux-gnu
    
    * Date Info
       Build Date:  2022-03-31
      Commit Date:  2022-03-29
    
    opened by gidoBOSSftw5731 21
  • Frames go missing

    Frames go missing

    Hi,

    I have noticed that some frames vanish in the encoding process. The source file and the split files had the exact same frame count, as tested with ffmpeg
    After the encode a little over 50 frames had vanished, also causing a 2 second audio desync towards the end In which step do these frames go missing, because aomenc never dropped frames for me, and obviously the splitting did neither. Could you please examine the situation?

    Thank you

    opened by utack 18
  • Encoding failed (using default settings)

    Encoding failed (using default settings)

    I'm trying a very simple execution to get familiar with this tool, but it fails to produce a valid output. This is on Windows, running in PowerShell, using Python 3.8.2.

    python C:\av1an\av1an.py -i .\ToS-4k-1920.mov -s scenes.csv -o defaults.mkv

    100%|███████████████████████████████████████████████████████████████████████| 17620/17620 [01:43<00:00, 170.12frames/s]
    Queue: 119 Workers: 8 Passes: 2
    Params: --threads=4 --cpu-used=6 --end-usage=q --cq-level=40
      0%|                                                                                        | 0/17620 [00:00<?, ?fr/s]Encoding failed, check validity of your encoding settings/commands and start again
    Encoding failed, check validity of your encoding settings/commands and start again
    Encoding failed, check validity of your encoding settings/commands and start again
    Encoding failed, check validity of your encoding settings/commands and start again
    Encoding failed, check validity of your encoding settings/commands and start again
      3%|██                                                                          | 466/17620 [02:41<7:22:17,  1.55s/fr]
    

    After blowing up like this, it does continue to encode (I have 8 aomenc processes running).

    What info can I provide to help investigate these errors?

    opened by dprestegard 16
  • Fix x265 2-pass params

    Fix x265 2-pass params

    opened by Y0ba 15
  • --cpu-used doesn't change file quality, but does change encoding time

    --cpu-used doesn't change file quality, but does change encoding time

    How I encoded the files (I'm using fish as my shell):

    for c in (seq 0 8)
        mkdir "$c-8"
        av1an -i dota2-10.y4m -o "$c-8/$c-8.mkv" --vmaf -fmt yuv420p -v "--cpu-used=$c --end-usage=q --cq-level=20 --threa
    ds=4" -w 8 -log "$c-8/$c-8.log"
    end
    

    --cpu-used 8 and --cpu-used 0 are the same file, they only differ in the header, only in 42 bytes, but one takes 3 hours to encode, the other only 5 minutes.

    I encoded first 10 seconds of "DOTA2" from https://media.xiph.org/video/derf/

    ~ $ av1an --version
    Av1an version: 5.5-3
    ~ $ pikaur -Qo aomenc
    /usr/bin/aomenc is owned by aom 2.0.1-1
    

    I installed av1an from https://aur.archlinux.org/packages/python-av1an/

    opened by TheHardew 14
  • Surprisingly slow behaviour for x265

    Surprisingly slow behaviour for x265

    If I use x265 via ffmpeg on the same present and qp, I can easily get 120fps transcodes, but with av1an, even with 11 workers, I only get 30 or so. I suspect this is due to overly-aggressive scene splitting (I end up with 136 scenes for about 180 minutes of footage). Is there a way I can determine what causes this?

    opened by kozross 14
  • Lastrosade sc only

    Lastrosade sc only

    This pull request adds the --sc-only boolean argument which forces av1an to stop after scene detection as per #573

    Right now it simply deletes the temporary directory after the run

    What would be optimal would be to not create any temp dir if both:

    1. The input is a vpy script.
    2. -s is specified.
    opened by lastrosade 13
  • Target VMAF produces results with much lower vmaf score than expected

    Target VMAF produces results with much lower vmaf score than expected

    av1an --force -i "$TargetFileWithoutExt.nut" -enc aom -v " --cpu-used=3 --end-usage=q --cq-level=35 --tile-columns=1 --tile-rows=0 -b 10 --lag-in-frames=28 --enable-chroma-deltaq=1 --threads=4 --enable-keyframe-filtering=0 --enable-cdef=0 --enable-fwd-kf=1 --enable-palette=0 --tune=ssim --enable-qm=1 " --vmaf_target 94 --vmaf_steps 5 --min_q 15 --max_q 45 --vmaf_path "../vmaf_v0.6.1.pkl" -w 16 -p 2 -s "$TargetFileWithoutExt.csv" --output_file "$TargetFileWithoutExt.ENC.mkv" -log "$TargetFileWithoutExt.log" --temp "$TargetFileWithoutExt.tmp" -fmt yuv420p10le --n_threads 6 --vmaf_res "1280x720" --vmaf_plots --extra_split 220

    Using this command targeting a vmaf score of 92, av1an successfully finds the cq values to use as we can see in the logs:

    11:31:03 Chunk: 00050, Fr: 220
    Q: [30, 37, 45]
    Vmaf: [94.68, 91.76, 87.32]
    Target Q: 36 Vmaf: 92.032
    
    11:31:06 Chunk: 00067, Fr: 220
    Q: [30, 40, 45]
    Vmaf: [95.79, 91.81, 88.4]
    Target Q: 39 Vmaf: 92.017
    
    11:31:07 Chunk: 00056, Fr: 220
    Q: [30, 34, 45]
    Vmaf: [93.84, 92.07, 85.06]
    Target Q: 34 Vmaf: 91.928
    

    But the resulting encoded chunks vastly undershoot the targeted vmaf score with a mean score of 86

        {
          "frameNum":14300,
          "metrics":{
            "adm2":0.96441,
            "motion2":2.1258,
            "vif_scale0":0.78262,
            "vif_scale1":0.90263,
            "vif_scale2":0.93679,
            "vif_scale3":0.95617,
            "vmaf":85.95289
          }
        },
        {
          "frameNum":14301,
          "metrics":{
            "adm2":0.96877,
            "motion2":2.08694,
            "vif_scale0":0.79244,
            "vif_scale1":0.91761,
            "vif_scale2":0.9495400000000001,
            "vif_scale3":0.96648,
            "vmaf":88.21199
          }
        }
    

    vid

    opened by lastrosade 13
  • Bump tokio from 1.21.2 to 1.23.1

    Bump tokio from 1.21.2 to 1.23.1

    Bumps tokio from 1.21.2 to 1.23.1.

    Release notes

    Sourced from tokio's releases.

    Tokio v1.23.1

    This release forward ports changes from 1.18.4.

    Fixed

    • net: fix Windows named pipe server builder to maintain option when toggling pipe mode (#5336).

    #5336: tokio-rs/tokio#5336

    Tokio v1.23.0

    Fixed

    • net: fix Windows named pipe connect (#5208)
    • io: support vectored writes for ChildStdin (#5216)
    • io: fix async fn ready() false positive for OS-specific events (#5231)

    Changed

    • runtime: yield_now defers task until after driver poll (#5223)
    • runtime: reduce amount of codegen needed per spawned task (#5213)
    • windows: replace winapi dependency with windows-sys (#5204)

    #5208: tokio-rs/tokio#5208 #5216: tokio-rs/tokio#5216 #5213: tokio-rs/tokio#5213 #5204: tokio-rs/tokio#5204 #5223: tokio-rs/tokio#5223 #5231: tokio-rs/tokio#5231

    Tokio v1.22.0

    Added

    • runtime: add Handle::runtime_flavor (#5138)
    • sync: add Mutex::blocking_lock_owned (#5130)
    • sync: add Semaphore::MAX_PERMITS (#5144)
    • sync: add merge() to semaphore permits (#4948)
    • sync: add mpsc::WeakUnboundedSender (#5189)

    Added (unstable)

    • process: add Command::process_group (#5114)
    • runtime: export metrics about the blocking thread pool (#5161)
    • task: add task::id() and task::try_id() (#5171)

    Fixed

    • macros: don't take ownership of futures in macros (#5087)
    • runtime: fix Stacked Borrows violation in LocalOwnedTasks (#5099)
    • runtime: mitigate ABA with 32-bit queue indices when possible (#5042)
    • task: wake local tasks to the local queue when woken by the same thread (#5095)
    • time: panic in release mode when mark_pending called illegally (#5093)
    • runtime: fix typo in expect message (#5169)

    ... (truncated)

    Commits
    • 1a997ff chore: prepare Tokio v1.23.1 release
    • a8fe333 Merge branch 'tokio-1.20.x' into tokio-1.23.x
    • ba81945 chore: prepare Tokio 1.20.3 release
    • 763bdc9 ci: run WASI tasks using latest Rust
    • 9f98535 Merge remote-tracking branch 'origin/tokio-1.18.x' into fix-named-pipes-1.20
    • 9241c3e chore: prepare Tokio v1.18.4 release
    • 699573d net: fix named pipes server configuration builder
    • 3ce5a26 chore: prepare Tokio v1.23 release (#5270)
    • 644cb82 rt: fix *_closed false positives (#5231)
    • a1316cd io: impl std::io::BufRead on SyncIoBridge\<T> (#5265)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Av1an output skips sections, has still frame at the end of the Video and desynced audio

    Av1an output skips sections, has still frame at the end of the Video and desynced audio

    Hi! I've deinterlaced some partially interlaced DVD footage using ffmpeg -i video.mkv -map_metadata 0 -map 0 -c:v ffv1 -vf "fieldmatch=order=tff:combmatch=full, bwdif=deint=interlaced" video_deint.mkv To only deinterlace the parts of the video that actually need it. The resulting video File is in this way properly deinterlaced and plays fine.

    I then try to use av1an to convert it to av1 (using rav1e) and x265 to compare the results: av1an --temp /media/user/ramdisk/av1antmp -i video_deint.mkv -w 6 --chunk-method hybrid -e rav1e --target-quality 93 --vmaf -o video_av1_deint.mkv and av1an --temp /media/user/ramdisk/av1antmp -i video_deint.mkv -w 6 --chunk-method hybrid -e x265 -c mkvmerge --target-quality 93 --vmaf -o video_deint_265.mkv

    Av1an completes without warning nor error in both cases. The resulting video file though has a lot of missing sections and the sound desyncs because of it. This is visualized in the attached vmaf svg graphs: video_av1_deint video_deint_265

    This also happens to other video files I've treated this way.

    I'd be happy to send you a link to the video.mkv and video_deint.mkv in question via mail on request (it's just the studios intros), but I'm weary of sharing it here publicly for copyright reasons.

    I'm using a 3 day old build of rav1e and ffmpeg, av1an is current from cargo, all else is current ubuntu 22.04

    opened by OParczyk 5
  • [Question] How to resize video while keeping target-quality when using SVT-AV1 codec

    [Question] How to resize video while keeping target-quality when using SVT-AV1 codec

    So I have been trying to resize a video to 1052x1920 while using SVT-AV1 codec and SVTENC encoder and having a target-quality set. I've been having a hard time of doing so. Each time I get an error. Could I get some help with them command or does target-quality not work when changing the file resolution? docker run --privileged -v "$(pwd):/videos" --user $(id -u):$(id -g) -it --rm masterofzen/av1an:latest -i 181.mp4 -e svt-av1 -v " --rc 0 --crf 22 --preset 6 --lookahead 120 --keyint 300 " --target-quality 94 --vmaf-threads 8 --vmaf --probes 5 --ffmpeg " -vf scale=1052:1920 " -a " -c:a libopus -b:a 192k -ac 2 -map 0:a " -c mkvmerge --min-q 15 --max-q 45 -w 4 -o 181-SVT-AV1-2.mkv

    The errors I have been getting look like this: Scene detection [00:00:04] [############################################################################################################################################################################################] 100% 415/415 (94.62 fps, eta 0s) Queue: 2 Workers: 2 Passes: 1 Params: --rc 0 --crf 22 --preset 6 --lookahead 120 --keyint 300 ⠄ [00:01:06] [-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------] 0% 0/415 (0.00 fps, eta 0s) thread '' panicked at 'VMAF calculation failed: Command: "ffmpeg" "-loglevel" "error" "-hide_banner" "-y" "-thread_queue_size" "1024" "-hide_banner" "-r" "60" "-i" ".9a1ae79/split/v_3000000.ivf" "-r" "60" "-i" "-" "-filter_complex" "[0:v]scale=1920x1080:flags=bicubic:force_original_aspect_ratio=decrease,setpts=PTS-STARTPTS[distorted];[1:v]select=not(mod(n\,4)),setpts=0.2500PTS,scale=1920x1080:flags=bicubic:force_original_aspect_ratio=decrease,setpts=PTS-STARTPTS[ref];[distorted][ref]libvmaf=log_fmt='json':eof_action=endall:log_path=.9a1ae79/split/00000.json:n_threads=8" "-f" "null" "-" Output: Output { status: ExitStatus(ExitStatus(256)), stdout: "", stderr: "[Parsed_libvmaf_6 @ 0x6d83e40] Width and height of input videos must be same.\n[Parsed_libvmaf_6 @ 0x6d83e40] Failed to configure input pad on Parsed_libvmaf_6\nError reinitializing filters!\nFailed to inject frame into filter network: Invalid argument\nError while processing the decoded data for stream #1:0\n" }', av1an-core/src/vmaf.rs:264:3 ⠤ [00:01:09] [-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------] 0% 0/415 (0.00 fps, eta 0s) thread '' panicked at 'VMAF calculation failed: Command: "ffmpeg" "-loglevel" "error" "-hide_banner" "-y" "-thread_queue_size" "1024" "-hide_banner" "-r" "60" "-i" ".9a1ae79/split/v_3000001.ivf" "-r" "60" "-i" "-" "-filter_complex" "[0:v]scale=1920x1080:flags=bicubic:force_original_aspect_ratio=decrease,setpts=PTS-STARTPTS[distorted];[1:v]select=not(mod(n\,4)),setpts=0.2500PTS,scale=1920x1080:flags=bicubic:force_original_aspect_ratio=decrease,setpts=PTS-STARTPTS[ref];[distorted][ref]libvmaf=log_fmt='json':eof_action=endall:log_path=.9a1ae79/split/00001.json:n_threads=8" "-f" "null" "-" Output: Output { status: ExitStatus(ExitStatus(256)), stdout: "", stderr: "[Parsed_libvmaf_6 @ 0x6cd2180] Width and height of input videos must be same.\n[Parsed_libvmaf_6 @ 0x6cd2180] Failed to configure input pad on Parsed_libvmaf_6\nError reinitializing filters!\nFailed to inject frame into filter network: Invalid argument\nError while processing the decoded data for stream #1:0\n" }', av1an-core/src/vmaf.rs:264:3 ⠠ [00:01:09] [-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------] 0% 0/415 (0.00 fps, eta 0s) thread 'main' panicked at 'called Result::unwrap() on an Err value: Any { .. }', av1an-core/src/lib.rs:1697:21

    If I remove target-quality and all of the vmaf options this error no longer comes up. Is this expected behavior? I assume so, but I've seen other commands online where target-quality was seemingly able to work with scale.

    opened by SandyRodgers-2017 4
  • interpolate_target_q assumes a sample will always be available

    interpolate_target_q assumes a sample will always be available

    thread '<unnamed>' panicked at 'called `Option::unwrap()` on a `None` value', av1an-core/src/target_quality.rs:340:6
    

    This corresponds to the last unwrap in the following code fragment:

    pub fn interpolate_target_q(scores: Vec<(f64, u32)>, target: f64) -> Result<f64, Error> {
      let mut sorted = scores;
      sorted.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap());
    
      let keys = sorted
        .iter()
        .map(|(x, y)| Key::new(*x, f64::from(*y), Interpolation::Linear))
        .collect();
    
      let spline = Spline::from_vec(keys);
    
      Ok(spline.sample(target).unwrap())
    }
    

    The problem is that the call to spline.sample() is not guaranteed to return a value. In particular, since the requested interpolation method is Interpolation::Linear, the only way the sample could be None is if search_lower_cp() returned None before the sampling was actually attempted.

    I'm not sure if it makes sense for sample_with_key() to fall back to i = 0 if search_lower_cp() returned None (for one thing, there may not be a keys[0], for another, the math might turn out wrong). It might be better to have interpolate_target_q return an Option, but its only call site is interpolated_target_q which doesn't have much room for "value not available" as it bubbles the result directly to its only caller, per_shot_target_quality() which is quite definitive and only returns an error in case of an encoder crash and not any other type of situation.

    I suspect in this case scores was empty, for unknown reasons? In that case, the calculation of interpolated target might need to extend the evaluated fragment until it isn't?

    opened by mqudsi 0
  • New release?

    New release?

    Hey, as current master now supports ffmpeg 5 and as the last release was almost a year ago, I'd kindly request a new release. This would allow us to drop on more dependency on ffmpeg 4.4 in Arch.

    opened by svenstaro 0
Releases(latest)
  • latest(Dec 23, 2022)

  • 0.4.0-release(Dec 19, 2022)

    What's Changed

    • Update vapoursynth and other dependencies by @redzic in https://github.com/master-of-zen/Av1an/pull/540
    • Rework log levels to be more useful by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/546
    • Do not automatically backport each PR to stable by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/549
    • Display chunk index instead of worker index in verbose mode by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/550
    • Do not state that vapoursynth is optional by @redzic in https://github.com/master-of-zen/Av1an/pull/552
    • Fix ffmpeg issue in docker container by @redzic in https://github.com/master-of-zen/Av1an/pull/555
    • Fix mkvmerge on network drives for windows by @redzic in https://github.com/master-of-zen/Av1an/pull/558
    • Warn about slowness when using "select" chunk method by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/560
    • Update SVT-AV1 target quality params for v0.9.0 by @redzic in https://github.com/master-of-zen/Av1an/pull/557
    • Future proof SVT-AV1 version parsing by @redzic in https://github.com/master-of-zen/Av1an/pull/562
    • Update rav1e and vapoursynth by @redzic in https://github.com/master-of-zen/Av1an/pull/565
    • Fix progress bar size estimate by @redzic in https://github.com/master-of-zen/Av1an/pull/566
    • Update several dependencies by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/568
    • Compile rav1e from git in Dockerfile by @redzic in https://github.com/master-of-zen/Av1an/pull/569
    • Update dependencies by @redzic in https://github.com/master-of-zen/Av1an/pull/571
    • Update to ffmpeg 5.0 by @redzic in https://github.com/master-of-zen/Av1an/pull/575
    • remove old appveyour.yml by @master-of-zen in https://github.com/master-of-zen/Av1an/pull/576
    • Lastrosade sc only by @lastrosade in https://github.com/master-of-zen/Av1an/pull/574
    • fix indicatif by @master-of-zen in https://github.com/master-of-zen/Av1an/pull/583
    • Adaptive extra splits by @master-of-zen in https://github.com/master-of-zen/Av1an/pull/584
    • Multiple input files by @master-of-zen in https://github.com/master-of-zen/Av1an/pull/582
    • Set required for input by @redzic in https://github.com/master-of-zen/Av1an/pull/585
    • Replace memory writes with mask in sse4.1 aom/vpx parsing, fix edge case by @redzic in https://github.com/master-of-zen/Av1an/pull/588
    • Update dependencies by @redzic in https://github.com/master-of-zen/Av1an/pull/589
    • Speed up CI, Reduce container image size by @luigi311 in https://github.com/master-of-zen/Av1an/pull/591
    • Fix a memory leak in standard scene check method by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/593
    • Use github cache action instead of using gha. Dedupe Dockerfile by @luigi311 in https://github.com/master-of-zen/Av1an/pull/594
    • Silence remaining clippy lints by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/595
    • Disable grain table generation if --photon-noise 0 is set by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/599
    • Reduce binary size by removing regex by @redzic in https://github.com/master-of-zen/Av1an/pull/600
    • Add zones support by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/598
    • Fix ffmpeg filter escaping by @redzic in https://github.com/master-of-zen/Av1an/pull/602
    • Include whether lsmash and ffms2 were found in version info by @redzic in https://github.com/master-of-zen/Av1an/pull/606
    • Fix extra splits and zones handling with split method none by @redzic in https://github.com/master-of-zen/Av1an/pull/607
    • Use published ffmpeg-next by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/609
    • Upgrade to edition 2021 by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/610
    • Updated README.md by @FazlyMR in https://github.com/master-of-zen/Av1an/pull/608
    • Error and retry chunk if frame count mismatches by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/612
    • Add compilation instructions for Windows by @redzic in https://github.com/master-of-zen/Av1an/pull/617
    • Remove data streams when encoding audio by @GaveUp in https://github.com/master-of-zen/Av1an/pull/616
    • docs: First pass for SVT-AV1 documentation by @hansejo in https://github.com/master-of-zen/Av1an/pull/614
    • Error if scene change frame count does not match by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/618
    • Consolidate import style in rustfmt.toml by @redzic in https://github.com/master-of-zen/Av1an/pull/619
    • Improvements to grain synth gamma handling by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/622
    • Zones fixes by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/624
    • Print a proper error message if the input file does not exist by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/626
    • Log video info at the start of encode by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/629
    • Improve selection of HDR content by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/632
    • Use std::available_parallelism instead of num_cpus by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/633
    • Don't panic if ffmpeg fails to count frames by @Y0ba in https://github.com/master-of-zen/Av1an/pull/634
    • Catch panics in child threads by @Y0ba in https://github.com/master-of-zen/Av1an/pull/635
    • Do not call parse_encoded_frames in first pass by @redzic in https://github.com/master-of-zen/Av1an/pull/637
    • Fix x265 2-pass params by @Y0ba in https://github.com/master-of-zen/Av1an/pull/636
    • Fix clippy warnings by @redzic in https://github.com/master-of-zen/Av1an/pull/639
    • Change progress bar characters by @redzic in https://github.com/master-of-zen/Av1an/pull/640
    • vmaf_percentile to 1, default vmaf rate to 1 by @master-of-zen in https://github.com/master-of-zen/Av1an/pull/641
    • Create workflow for Windows x64 builds by @FreezyLemon in https://github.com/master-of-zen/Av1an/pull/638
    • Temporarily disable docker caching via cargo-chef by @redzic in https://github.com/master-of-zen/Av1an/pull/643
    • Automate Windows binary releases on changes to master by @FreezyLemon in https://github.com/master-of-zen/Av1an/pull/646
    • Reenable cargo chef by @FreezyLemon in https://github.com/master-of-zen/Av1an/pull/647
    • Update readme by @FreezyLemon in https://github.com/master-of-zen/Av1an/pull/649
    • Readme changes by @master-of-zen in https://github.com/master-of-zen/Av1an/pull/651
    • Fix compilation with latest rav1e by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/652
    • Migrate grain synth code to external crate and allow chroma grain synth by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/653
    • Update av1-grain to fix a major bug that made it not work by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/654
    • Allow generating photon noise tables for rav1e by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/655
    • Use -c y4m instead of deprecated -y in vspipe by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/657
    • Bump ffmpeg-next to 5.1.1 by @FreezyLemon in https://github.com/master-of-zen/Av1an/pull/658
    • Fix CI Windows builds by @FreezyLemon in https://github.com/master-of-zen/Av1an/pull/656
    • Fix stalled pipe on Windows when using target quality by @woot000 in https://github.com/master-of-zen/Av1an/pull/596
    • Fix extra_splits when fps is NaN by @redzic in https://github.com/master-of-zen/Av1an/pull/661
    • Fix usage of --quiet flag by @redzic in https://github.com/master-of-zen/Av1an/pull/669
    • Various dependency updates and cleanup by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/679
    • Fix Windows build by @FreezyLemon in https://github.com/master-of-zen/Av1an/pull/680
    • Temporarily disable steady ticks on progress bars by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/682
    • Fix stuttering FPS and ETA on progress bar by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/684
    • Cleanup workspace by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/685
    • Improve verbose progress for several encoders by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/688
    • Fix way too many new clippy lints from Rust 1.66 by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/693
    • Fix x26* progress bar by @shssoichiro in https://github.com/master-of-zen/Av1an/pull/692
    • Remove patches and bump av-scenechange by @master-of-zen in https://github.com/master-of-zen/Av1an/pull/694
    • 0.4.0 by @master-of-zen in https://github.com/master-of-zen/Av1an/pull/695

    New Contributors

    • @FazlyMR made their first contribution in https://github.com/master-of-zen/Av1an/pull/608
    • @GaveUp made their first contribution in https://github.com/master-of-zen/Av1an/pull/616
    • @hansejo made their first contribution in https://github.com/master-of-zen/Av1an/pull/614
    • @Y0ba made their first contribution in https://github.com/master-of-zen/Av1an/pull/634
    • @FreezyLemon made their first contribution in https://github.com/master-of-zen/Av1an/pull/638
    • @woot000 made their first contribution in https://github.com/master-of-zen/Av1an/pull/596

    Full Changelog: https://github.com/master-of-zen/Av1an/compare/0.3.1...0.4.0-release

    Source code(tar.gz)
    Source code(zip)
    av1an.exe(3.57 MB)
  • 0.3.1(Jan 17, 2022)

    Changes

    • Fix mkvmerge concatenation when resuming, and mkvmerge on Windows
    • Display possible vspipe errors when ffmpeg pipe is present
    • Add warning if rate control mode was not specified (for aomenc)

    Full Changelog: https://github.com/master-of-zen/Av1an/compare/0.3.0...0.3.1

    Windows binary

    The provided binary in this release is dynamically linked to both the vapoursynth and ffmpeg libraries. Make sure the latest version of vapoursynth is installed, and that the ffmpeg DLLs are available. The ffmpeg DLLs can be downloaded from here: https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-4.4.1-full_build-shared.7z. Extract the files, and place the DLLs (which are in the bin directory once extracted) in the same directory as the downloaded av1an.exe

    Source code(tar.gz)
    Source code(zip)
    av1an.exe(4.30 MB)
  • 0.3.0(Jan 5, 2022)

    Changes

    • Add option to generate film grain tables for aomenc
    • Allow setting thread affinity for each worker
    • Remove overhead at the start and in-between scene detection and encoding
    • Better CLI interface
    • Automatic tiling for default settings
    • Always copy subtitles and all audio tracks
    • Improve logging (especially with --verbose)
    • Implement SSE4.1/SSSE3 SIMD-accelerated frame parsing for aomenc/vpxenc
    • Fix ffmpeg concat with spaces or quotes on all platforms
    • Fix mkvmerge for Windows
    • Automatically add cq-level arg if it is not present
    • Automatically set one-pass mode if --rt was specified
    • Add more info to --help
    • Remove max/min kf distance for aomenc and vpx

    Full Changelog: https://github.com/master-of-zen/Av1an/compare/0.2.0...0.3.0

    Windows binary

    The provided binary in this release is dynamically linked to both the vapoursynth and ffmpeg libraries. Make sure the latest version of vapoursynth is installed, and that the ffmpeg DLLs are available. The ffmpeg DLLs can be downloaded from here: https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-full-shared.7z. Extract the files, and place the DLLs (which are in the bin directory once extracted) in the same directory as the downloaded av1an.exe

    Source code(tar.gz)
    Source code(zip)
    av1an.exe(4.25 MB)
  • 0.2.0(Nov 1, 2021)

    Rust rewrite

    The first and most important change is that Av1an was completely rewritten in Rust, which improved the stability, performance, and maintainability of the project, which allows us to leverage tools and features that would simply not be possible with Python. Imagine not having syntax\typing errors on runtime :exploding_head:

    Scene detection methods

    Now, Av1an uses parts of the Rav1e encoder for scene change detection.

    To sum it up

    Lots of QOL improvements all around: faster encoding, static versions of av1an, faster target-quality, better and faster scene-detection, lower RAM usage, easier build process, etc.

    There is just too much to cover :D

    How is that possible?

    The development, growth, and success of Av1an couldn't be possible without contributors that care and develop Av1an :kissing_heart: :heart: Those people are in descending order, but not significance:

    @BlueSwordM @redzic @shssoichiro @luigi311 @n9Mtq4 @mxsrm @ishitatsuyuki @natis1 @Nestorfish @nathanielcwm

    Note

    Av1an now requires Vapoursynth Release Page

    Source code(tar.gz)
    Source code(zip)
    av1an.zip(17.34 MB)
  • 1.12(Jul 24, 2020)

    VVC support

    NOTE: VVC is not yet finalized, and at the stage of test model so it can crash/don't work/behave strangely.

    • Added experimental VVC support
    • Temp YUV files created at the start of encoding for the segment, and removed after.
    • Concatenation to VVC bitstream is done by parcatStatic from VVC repository.

    Usage

    The encoding requires compiled encoder, bitstream concatenator, config_file from the VVC repository.

    • EncoderAppStatic and parcatStatic must be named vvc_encoder, vvc_concat, and placed in the directory from where they can be reachable, the same directory or somewhere in PATH. Place the chosen config file for the encoder in encoding folder.

    • Encoder set to VVC by -enc vvc

    • Config file passed to Av1an by --vvc_conf CONFIG_FILE

    • Required video encoding parameters: -wdt X - video width -hgt X - video height -fr X - framerate -q X - quantizer Example: -v " -wdt 640 -hgt 360 -fr 23.98 -q 30 "

    • After encode is done output file with extension .h266 will created It can be decoded to .yuv with VVC compliled decoder : DecoderAppStatic -d 8 -b encoded.h266 -o output.yuv Keep in mind that encoding time is excessive

    Target VMAF for Rav1e, SVT-AV1, VPX

    • min_cq max_cq changed to min_q ,max_q
    • Default min_q max_q are set based on encoder.
    • Encoders must be in mode that requires setting quantizer. (--crf, --cq-level, --quantizer etc)

    Examples:

    Changed default passes for encoders

    svt_av1: 1 
    rav1e:   1
    aom:    2
    vpx:     2
    x265:    1 
    vvc:    1
    

    Also, default encoding settings changed accordingly

    Source code(tar.gz)
    Source code(zip)
  • 1.11(Jul 22, 2020)

    There has been ~300 commits after the last release. Lots of changes, let's keep it short.

    x265 + Target_VMAF

    • Added x265
    • Added target_vmaf support for x265 Usage: -enc x265 for encoder, --vmaf_target NUM as usual

    Better target_vmaf

    • Instead of default mean for VMAF, 25 percentile is used instead. Making the worst parts of a scene weight more in the calculation, resulting in better results and more consistent quality.
    • Added early skips if extreme Q values beyond the range are more than enough or not enough to reach target VMAF. example: In log file with --vmaf_target 90:

    Dynamic search for target Q value for the target_vmaf

    OLD evenly spaced probes(blue x probe):

    NEW dynamic search(green pentagon probe):

    5 probes now enough to cover over extreme ranges

    New splitting method: aom_keyframes

    Usage: --split_method aom_keyframes

    aom_keyframes use the first pass of aomenc for determining where keyframes will be placed by the encoder, and using this information for splitting, resulting in 0 loss of encoding efficiency by segmenting for this encoder.

    Better error handling

    Encoder error will now be printed to the terminal

    Tons of refactoring and optimizations

    • Reducing complexity
    • Moving all the functions out of av1an.py to Av1an module
    • Overall better project organization
    Source code(tar.gz)
    Source code(zip)
  • 1.10(May 19, 2020)

    Target VMAF

    The "Target VMAF" feature has a really simple goal, instead of guessing what the CQ value of your encoder will give you in regards to the resulting quality, we set the VMAF score we want to achieve and let the algorithm get the closest CQ value that will result in that score, for each split segment. Which simultaneously achieve 3 things, if compared to usual, single value CQ encode.

    1. Ensure that complex scenes receive more bit rate to achieve target quality.
    2. Increase quantizer value for simple scenes, and not going lower than target quality, and save bit rate.
    3. Yields a lower total bit rate.

    From my testing, result size can be 50-80% of compared to usual encode, with great visual quality.

    VMAF plotting

    Plot contains VMAF score for each individual frame. Plotting after encode will be performed if flag --vmaf set, or --vmaf_target is used. The plot legend display Mean Average, Lower 1, 25, 75 percentile, which in combination with plot should be insightful enough for judging the quality of the encode instead of a single vmaf value for the whole video.

    Example

    This is a plot of the encode that was using Target VMAF 96 (don't mind nan in mean, it's fixed at time of this post, but i don't want to reencode:) )

    The 1 percentile you can see on this plot shows the likely VMAF score of complex scenes, which usually involves a lot of movement, changes in perspective, zooming in and out and change in video context on every frame.

    Usage

    To try simply run your default constant quality encoding with --vmaf_target N, where N is VMAF score you try to achieve, i suggest something in 90-96 area.

    --vmaf_target sets the VMAF score that Av1an will aim for. --min_cq - sets the lower boundary for the VMAF probes and limit the minimum cq value at which the video can be encoded. Default is 25. --max_cq sets the upper boundary for the VMAF probes and limit the maximum cq value at which the video can be encoded. Default is 50. --vmaf_steps - sets the number of probes that are used to get the best CQ value for the target VMAF. Default value is 4. If min-cq, max_cq are changed that distance between them increase - make sure to set steps that there is a probe for every ~5 CQ of distance

    For more information about previous target VMAF refer to 1.8 release. This is evolution upon that method.

    Also need to mention that Target VMAF currently only for reference AV1 encoder

    Vmaf Plotting as separate package

    VMAF plotting is available as separate package, and only needs VMAF's or ffmpeg's libvmaf result xml file to work. GITHUB_REPO

    Extra splits

    -xs, --extra_splits will add cuts for every N frames on splits that are longer than N, and spread cuts evenly, intelligently. This option help split big scenes or files that are long single scene, like camera recording, into splits that paralleled better.

    For example:

    --extra_splits 400 For a split that goes from frame 14000 to 14900, the distance between cuts is 900, 900/400= 2.25 which rounds to 2. Av1an will try to find 2 key frames that are closer to frame 14300 and 14600 and place the splits there. Another split from 0 to 500, Av1an will find key frame closer to 250 and place cut there. Splits that have less than 400 frames are not affected.

    Source code(tar.gz)
    Source code(zip)
  • 1.9(May 13, 2020)

    (Click on video to watch all new features together) This is quality of life update, most changes under the hood and just make Av1an run better :)

    Dynamic progress bar

    It show progress for all workers and works with AOM and Rav1e, SVT-AV1 will be working with old chunk update frame count.

    Config files

    On first use of -cfg file current encoder, encoding parameters, audio, and FFmpeg settings will be save, and this file can be reused by -cfg file without need of typing same settings again.

    Batch encode

    Multiple files can be encoded by passing them separated by space, -i file1 file2 they will be encoded with same settings. Pyscenedetect will run on each one individually, so keep in mind to not set -s scene_file. And keep in mind that using --resume will try to resume first file in queue.

    AUR

    Av1an now available for installation by Arch Linux AUR

    Source code(tar.gz)
    Source code(zip)
  • 1.8(Apr 24, 2020)

    This is a big update. I want to thank all the collaborators that worked on features, or helped with development. I really appreciate everyone's engagement with this project

    Pip package

    • PIP package allows super easy installation on all platforms, by single command.
    • Usage is simple as av1an -i file all_params..., package automatically available system wide.
    • Only extra requirements for work is to have encoder of choice, and FFmpeg installed.

    Vmaf plotting

    If --vmaf is specified (and vmaf configured correctly on system) at end of encode will be plotted Vmaf for each segment of a video, where Y is vmaf, and X is frames and drawn median line.

    Target Vmaf mode

    !This feature is experimental. It certainly will be changed and improved in the future. Desired results are not guaranteed, use with caution;) Best works with 720/1080 videos. Feedback and suggestions will be appreciated:+1:

    By making couple of few fps encoding probes at fastest cpu-used, it's possible to interpolate cq values to Vmaf relations and with certain error predict what Vmaf score full encode will have. Example of interpolation based on 4 probes. Orange dot is chosen cq value extracted from plot to get targeted Vmaf. Red crosses are probe results. In folder of encoding this plot will be generated for each segment.

    Result with same video as in previous vmaf plot :

    --tg_vmaf N - for using Target Vmaf mode specify , where N is desired vmaf number, most stable results in range 90-95 Vmaf.

    --vmaf_steps N - number of evenly spaced probes that is used to interpolate vmaf to cq change. N bigger than 3. Optimal is 4-6 probes. Default: 4.

    --vmaf_error N - decrease initial Vmaf values for interpolation. Increasing number will result in lower CQ and bigger final vmaf score, use to correct whole vmaf plot. For start If target vmaf undershoot increase value by undershoot amount. Default: 0.

    --min_cq, --max_cq - minimum and maximum CQ values used in interpolation.Use to limit CQ values range. Default: 20, 63.

    Added VP9, VP8 support

    Added support for vpx

    Source code(tar.gz)
    Source code(zip)
  • 1.7.1(Apr 6, 2020)

    Vmaf

    • !Requires FFmpeg with libvmaf enabled
    • Added --vmaf option. Show vmaf for each encoded segment.
    • Added --vmaf_path for custom vmaf models path.

    Refactoring

    • Changed all lookup, now faster and better.

    Instant resume

    • All data about total frame count and chunks are stored in done.txt file and encode can be resumed instantly.

    Specify temp folder

    • Added --temp option to specify custom temporally folder to use.
    Source code(tar.gz)
    Source code(zip)
  • 1.7(Mar 18, 2020)

    Boosting

    Decreasing CQ value of encoded scene depending on brightness value of scene. (AOM only) Intended to improve encoding quality of dark scenes.

    How it works

    For each scene geometrical mean of brightness is calculated from average brightness of every frame. If brightness of scene is lower than 128, CQ will be decreased, lower values of brightness will receive bigger CQ decrease. CQ change range relates to 0-128 brightness range, meaning that the lowest value CQ will be at 0 brightness, half of that value at 64, etc.. For example (encoding cq = 40) :

    Usage

    • Enable with --boost
    • Option -br will set maximum CQ change from original. Default: 15
    • Option -bl will set hard cap on how low CQ can be set by boosting. Default: 10

    Example

    If this option --boost -br 30 -bl 15 set with --cq-level=30 will mean that we set boost CQ range to 30, and hard limit for boost at 15 . In this example all scenes with brightness 64 and lower will have minimum value of cq (15)

    Source code(tar.gz)
    Source code(zip)
  • 1.6.1(Mar 17, 2020)

    • Better logging
    • Added --keep option. Not deleting temporally folders after encode is finished
    • Fix for Windows terminal overflow
    • Files with spaces are fine now :)
    Source code(tar.gz)
    Source code(zip)
  • 1.6(Mar 2, 2020)

    This is a small update, preparing for 1.7 ;)

    Example of Av1an with Threadripper 3970X

    ~9-12 Fps 1080p AOM encoding with cpu-used 3

    Finished personal encodes:

    The End of Evangelion (1997) 1080p

    1920x1080 23.98 fps 01:26:47 bitrate: 1880 kb/s
    Av1an: -w 32 -v ' --end-usage=vbr --target-bitrate=2000 --aq-mode=2 --threads=4 
    --arnr-maxframes=15 --enable-fwd-kf=1 --lag-in-frames=25 --cpu-used=3 ' 
    Finished in 15690.8s (4:03:32)
    Size: 1.14 GB
    

    link mb in AV1 DISCORD :)

    Fractalicious8 4K

    3840x1920 30 fps 04:49.28 12665 kb/s
    Av1an: -w 16 -v "--end-usage=q --cq-level=30 --cpu-used=3 --threads=16 "
    Queue: 80 Workers: 16 Passes: 2
    Finished in 8767.3s (2:26 min)
    

    Original Encode

    Fractalicious8 1080p

    1920x960 30 fps 04:49.28 3720 kb
    Av1an: -ff ' -vf scale=1920:-1:flag' -v  ' --end-usage=q --cq-level=30 
    --cpu-used=3 --threads=16
    Queue: 80 Workers: 24 Passes: 2
    Finished in  1538.5s or (0:25 min)
    

    Original Encode

    Reworked logging

    Example of logging file

    • New logging file contain all info about encode, started and finished chunks, their frame counters and individual speed
    • If no logging set, logging file will be created in .temp/

    Testing

    Started work on making automated tests for Av1an

    Troubleshooting and weird errors

    • A lot of fixes for ffmpeg usage
    • General code improvements
    Source code(tar.gz)
    Source code(zip)
    Av1an_1.6_windows.zip(70.24 MB)
  • 1.5(Feb 18, 2020)

    Major Changes

    Progress is shown in frames

    • Click on image for video.
    • Bar updates after every finished chunk by the amount of frames from the source clip
    • Total size of bar is source number of frames

    FFprobe deprecated

    FFprobe not longer needed for Av1an, all FFprobe calls replaced with FFmpeg.

    ~25 times faster frame count checking

    Redone frame count checking. Speed comparison for frame count check: FFprobe: 4.99s FFprobe with autothreads: 1.039 FFmpeg: 0.209s

    Minor changes

    • General code improvements
    • Console look
    • Bugs of fixes
    Source code(tar.gz)
    Source code(zip)
    Av1an_1.5_windows.zip(70.26 MB)
  • 1.4(Feb 14, 2020)

    Major Changes

    Resuming encoding without loss of finished chunks.

    • Click on image for video.

    • Only finished chunks are saved.

    • .temp folder must be presented and not changed from when encoding was stopped.

    • All stages before encoding must be passed for resuming.(scenes split, audio processed)

    • Resuming skips scene detection, video split, audio processing.

    Checking encoded clips for errors in frame count.

    • Click on image for video. Changed frame rate so encoded clips pop warnings.

    There has been reports that some files with some encoders at different setting drop frames at time of encoding (works on my machine), so this measure were included to warn about possible problems as soon as possible. If the amount of frames need to change (changing frame rate, etc..) use --no_check option which disables frame checking completely, also can save you second or two on your 80 hours encodes :)

    Improved console look

    Best one yet :)

    Minor Improvements

    • Better audio checking and extraction.
    • Fixed bug with ffmpeg concat not working.
    • Added option to skip split completely and encode whole file with single encoder -s 0. (boring)
    • Faster and better default settings for Aom, Rav1e + enabled multi threading and cut number of workers.
    • Overall better error handling.
    • Logging now works on Windows.

    Great appreciations to 🥇 @nicomem 🥇

    For a lot of changes, pull's and improvements

    Source code(tar.gz)
    Source code(zip)
    Av1an_1.4_windows.upd.Rav1e.Aom.zip(92.23 MB)
  • 1.3(Feb 6, 2020)

    • PySceneDetect integrated, less complexity, faster.
    • Autobuilds for Windows Executable at Appveyor.
    • Windows builds only require FFmpeg, FFprobe, Encoder in main folder with executable.
    • At current moment Working Encoders for Windows are AOM (Full), Rav1e ( 1-pass, 2 pass is bugged), SVT-AV1 don't want to work with pipes at all :(
    • Attached files are ready to use and contain latest Rav1e and Aom
    Source code(tar.gz)
    Source code(zip)
    Av1an_1.3_windows.zip(88.68 MB)
  • 1.2(Feb 5, 2020)

    • Major fix for AOM/SVT-AV1 droping encoded frames on some sources.
    • Now supporting all FFmpeg options with -ff
    • Now supporting all PySceneDetect options with -sc
    • and some more
    Source code(tar.gz)
    Source code(zip)
  • 1.1(Feb 1, 2020)

    • Fully redone video splitting. FFmpeg segment used instead of scenedetect pymkv
    • Reusing scenedetect results with different runs for same video. Look -s for instructions
    • Removed dependence on python-pymkv
    • Cleaner console look, less lines, better presenting of useful information
    • Fixed printing of large amount of output to Windows console
    • Better error handling
    Source code(tar.gz)
    Source code(zip)
  • 1.0(Jan 27, 2020)

    • Spliting Video by Scenes

    • 8/10 bit encoding

    • AOMENC encoding 1,2 pass.

    • SVT-AV1 encoding 1,2 pass.

    • Rav1e encoding 1 pass only.

    • Avif AOMENC encoding.

    • Avif Rav1e encoding.

    Source code(tar.gz)
    Source code(zip)
Real-time video and audio streams over the network, with Streamlit.

streamlit-webrtc Example You can try out the sample app using the following commands.

Yuichiro Tachibana (Tsuchiya) 648 Jan 01, 2023
Tautulli - A Python based monitoring and tracking tool for Plex Media Server.

Tautulli A python based web application for monitoring, analytics and notifications for Plex Media Server. This project is based on code from Headphon

Tautulli 4.7k Jan 07, 2023
An easy to use GUI based video to image sequence converter (and vice versa).

Vdo & Img Conversion Tools This is a quick conversion tool made with python that can save you a lot of time. With this tool you can extract image sequ

Akash Bora 3 Sep 18, 2022
Telegram Video Chat Video Streaming bot 🇱🇰

🧪 Get SESSION_NAME from below: Pyrogram 🎭 Preview ✨ Features Music & Video stream support MultiChat support Playlist & Queue support Skip, Pause, Re

DOOZY YEZ 5 Jun 26, 2022
FLIR/DJI IR Camera Data Parser, Python Version

FLIR/DJI IR Camera Data Parser, Python Version Parser infrared camera data as NumPy data. Usage Clone this respository and cd thermal_parser. Run pip

14 Dec 23, 2022
Convert Video Files To Text And Audio

Video-To-Text Convert Video Files To Text And Audio Convert To Audio 1: open dvtt folder in cmd 2: run this command in cmd = main.py Audio Convert To

Delta Inc. 2 Dec 05, 2021
A project that uses optical flow and machine learning to detect aimhacking in video clips.

waldo-anticheat A project that aims to use optical flow and machine learning to visually detect cheating or hacking in video clips from fps games. Che

RicanSamurai 542 Dec 03, 2022
This program is to make a video based on Deep Dream

This program is to make a video based on Deep Dream. The program is modified from DeepDreamAnim and DeepDreamVideo with additional functions for bleding two frames based on the optical flows. It also

Aertist 23 Jan 22, 2022
Your self hosted Youtube media server

The Tube Archivist Your self hosted Youtube media server Core functionality Subscribe to your favourite Youtube channels Download Videos using yt-dlp

Simon 2.1k Dec 31, 2022
Create a Video Membership app using FastAPI & NoSQL

Video Membership Create a Video Membership app using FastAPI & NoSQL. In this series, we're going to explore building a membership application using F

Coding For Entrepreneurs 69 Dec 25, 2022
720p FPGA Media Player (RISC-V + Motion JPEG + SD + HDMI on an Artix 7)

FPGA Media Player This project is a FPGA based media player which is capable of playing Motion JPEG encoded video over HDMI or VGA on commonly availab

179 Dec 02, 2022
Simple VLC-based media player that can play multiple videos at the same time

Screenshots About Simple VLC-based media player that can play multiple videos at the same time. You can play as many videos as you like, the only limi

161 Jan 05, 2023
A simple Python Youtube Wachtime for YTbebot

Simple bot that was development in python 3.7, that automatically watch youtube videos. It can be used to give more views in your channel helping in the spread and increase the followers because your

Rian eka wiratma 1 Dec 05, 2021
Komposition - The video editor built for screencasters

Komposition The video editor built for screencasters Tutorial Video | Introduction | Installation Documentation See the documentation and user guide.

Oskar Wickström 428 Jan 08, 2023
pygamevideo module helps developer to embed videos into their Pygame display

pygamevideo module helps developer to embed videos into their Pygame display. Audio playback doesn't use pygame.mixer.

Kadir Aksoy 10 Dec 28, 2022
Add a "flame" effect on each hand's index onto a video stream.

Add a "flame" effect on each hand's index onto a video stream. recording.webm.mov This script is just a quick hack, it's a bit of glue between mediapi

Paul Willot 7 Sep 15, 2022
Search a video semantically with AI.

Which Frame? Search a video semantically with AI. For example, try a natural language search query like "a person with sunglasses". You can also searc

David Chuan-En Lin 1 Nov 06, 2021
This is an example of building a video Question-Answer system using Jina.

example-video-search This is an example of building a video Question-Answer system using Jina. The index data is subtitle files of YouTube videos. Aft

Jina AI 9 Oct 18, 2022
Add the dislike count back to my YouTube videos via a comment containing that information.

YouTube Dislikes Forrest Knight Python Version 3.0+ Only use if you know what the code actually does. I'm not responsible for your use of this code in

Forrest Knight 155 Dec 19, 2022