Releases: master-of-zen/Av1an
latest
0.4.3
What's Changed
Full Changelog: 0.4.2...0.4.3
- Bump mio from 0.8.10 to 0.8.11 by @dependabot in #816
- Bump libgit2-sys from 0.16.1+1.7.1 to 0.16.2+1.7.2 by @dependabot in #809
- Fix new clippy lint in Rust 1.77 by @shssoichiro in #819
- append to log file by @jcj83429 in #817
- Update Windows CI job by @FreezyLemon in #820
- Fix vmaf flag check with target-quality by @luigi311 in #823
- Bump MSRV to 1.70 by @shssoichiro in #835
- Support ffmpeg 7.0 by @shssoichiro in #834
- Modify windows-build.yml to use ffmpeg 7.0 by @Uranite in #839
- Fix "Received a packet for an attachment stream" error when encoding certain files. by @0xBA5E64 in #841
- Implement pipeless scene detection for Vapoursynth inputs by @shssoichiro in #844
- Bump dependencies and remove an old file by @shssoichiro in #845
- Implement pipeless scene detection for basic video inputs by @shssoichiro in #847
- Remove vapoursynth-plugin-lsmashsource by @Extarys in #851
- Use updated av-scenechange with threaded ffmpeg decoder by @shssoichiro in #853
- Update compile docs by @Uranite in #855
- Add support for passing variables to the vspipe python environment by @Vernoxvernax in #858
- Clippy fixes and other minor cleanup by @shssoichiro in #859
- fix docker ref by @lyj0309 in #862
- Fix everything breaking the CI by @shssoichiro in #864
- Use absolute instead of canonicalize for better Windows path handling by @shssoichiro in #861
- Update NASM and VapourSynth in windows-build.yml by @Uranite in #866
- Update compiling.md by @Uranite in #867
New Contributors
0.4.2
What's Changed
- ci(Mergify): configuration update by @shssoichiro in #737
- Remove tpl by @master-of-zen in #739
- Move framerate to chunk by @master-of-zen in #742
- Action: Test target-quality is working correctly. by @luigi311 in #743
- Action: Tag latest, update versions, add docker-publish checker by @luigi311 in #741
- Fix estimated fps when using --resume flag by @shssoichiro in #736
- Routine dependency updates by @shssoichiro in #748
- Move audio size to progress bar OnceCell by @master-of-zen in #754
- simplify progress bar finish and consolidate dec_bar function by @master-of-zen in #755
- Fix target quality command syntax by @HaveAGitGat in #756
- Bump rav1e dependency by @shssoichiro in #757
- Split user facing encode args from internals by @shssoichiro in #761
- Photon noise arguments by @superyu1337 in #764
- Add additional flags, options by @woot000 in #671
- Only get frame rate from Vapoursynth once while creating queue by @shssoichiro in #774
- Fix rustc 1.71 clippy lints by @shssoichiro in #775
- CI: Update dependencies in Windows build by @FreezyLemon in #779
- Add DGDecNV and BestSource chunk method by @Simulping in #776
- Fix a variety of clippy lints by @shssoichiro in #792
- Bump proc-macro2 crate to fix compatibility with latest nightly by @shssoichiro in #791
- move ignore frame mismatch to chunk by @master-of-zen in #794
- unimportant improvements by @damian101 in #795
- Remove support for DgDecNv by @shssoichiro in #796
- Clarify preferred methods of obtaining support by @shssoichiro in #800
- Revert "Remove support for DgDecNv" by @shssoichiro in #799
- Update dependencies by @shssoichiro in #804
- Bump shlex from 1.2.0 to 1.3.0 by @dependabot in #807
- Rework docs into BookMD by @master-of-zen in #811
- Support grain tables for SVT-AV1 by @shssoichiro in #812
- Create mdbook.yml by @master-of-zen in #813
New Contributors
- @HaveAGitGat made their first contribution in #756
- @superyu1337 made their first contribution in #764
- @Simulping made their first contribution in #776
- @damian101 made their first contribution in #795
Full Changelog: 0.4.1...0.4.2
0.4.1
0.4.1
Av1an 0.4.0
What's Changed
- Update vapoursynth and other dependencies by @redzic in #540
- Rework log levels to be more useful by @shssoichiro in #546
- Do not automatically backport each PR to stable by @shssoichiro in #549
- Display chunk index instead of worker index in verbose mode by @shssoichiro in #550
- Do not state that vapoursynth is optional by @redzic in #552
- Fix ffmpeg issue in docker container by @redzic in #555
- Fix mkvmerge on network drives for windows by @redzic in #558
- Warn about slowness when using "select" chunk method by @shssoichiro in #560
- Update SVT-AV1 target quality params for v0.9.0 by @redzic in #557
- Future proof SVT-AV1 version parsing by @redzic in #562
- Update rav1e and vapoursynth by @redzic in #565
- Fix progress bar size estimate by @redzic in #566
- Update several dependencies by @shssoichiro in #568
- Compile rav1e from git in Dockerfile by @redzic in #569
- Update dependencies by @redzic in #571
- Update to ffmpeg 5.0 by @redzic in #575
- remove old appveyour.yml by @master-of-zen in #576
- Lastrosade sc only by @lastrosade in #574
- fix indicatif by @master-of-zen in #583
- Adaptive extra splits by @master-of-zen in #584
- Multiple input files by @master-of-zen in #582
- Set required for input by @redzic in #585
- Replace memory writes with mask in sse4.1 aom/vpx parsing, fix edge case by @redzic in #588
- Update dependencies by @redzic in #589
- Speed up CI, Reduce container image size by @luigi311 in #591
- Fix a memory leak in standard scene check method by @shssoichiro in #593
- Use github cache action instead of using gha. Dedupe Dockerfile by @luigi311 in #594
- Silence remaining clippy lints by @shssoichiro in #595
- Disable grain table generation if
--photon-noise 0
is set by @shssoichiro in #599 - Reduce binary size by removing regex by @redzic in #600
- Add zones support by @shssoichiro in #598
- Fix ffmpeg filter escaping by @redzic in #602
- Include whether lsmash and ffms2 were found in version info by @redzic in #606
- Fix extra splits and zones handling with split method none by @redzic in #607
- Use published ffmpeg-next by @shssoichiro in #609
- Upgrade to edition 2021 by @shssoichiro in #610
- Updated README.md by @FazlyMR in #608
- Error and retry chunk if frame count mismatches by @shssoichiro in #612
- Add compilation instructions for Windows by @redzic in #617
- Remove data streams when encoding audio by @GaveUp in #616
- docs: First pass for SVT-AV1 documentation by @hansejo in #614
- Error if scene change frame count does not match by @shssoichiro in #618
- Consolidate import style in rustfmt.toml by @redzic in #619
- Improvements to grain synth gamma handling by @shssoichiro in #622
- Zones fixes by @shssoichiro in #624
- Print a proper error message if the input file does not exist by @shssoichiro in #626
- Log video info at the start of encode by @shssoichiro in #629
- Improve selection of HDR content by @shssoichiro in #632
- Use std::available_parallelism instead of num_cpus by @shssoichiro in #633
- Don't panic if ffmpeg fails to count frames by @Y0ba in #634
- Catch panics in child threads by @Y0ba in #635
- Do not call parse_encoded_frames in first pass by @redzic in #637
- Fix x265 2-pass params by @Y0ba in #636
- Fix clippy warnings by @redzic in #639
- Change progress bar characters by @redzic in #640
- vmaf_percentile to 1, default vmaf rate to 1 by @master-of-zen in #641
- Create workflow for Windows x64 builds by @FreezyLemon in #638
- Temporarily disable docker caching via cargo-chef by @redzic in #643
- Automate Windows binary releases on changes to master by @FreezyLemon in #646
- Reenable cargo chef by @FreezyLemon in #647
- Update readme by @FreezyLemon in #649
- Readme changes by @master-of-zen in #651
- Fix compilation with latest rav1e by @shssoichiro in #652
- Migrate grain synth code to external crate and allow chroma grain synth by @shssoichiro in #653
- Update av1-grain to fix a major bug that made it not work by @shssoichiro in #654
- Allow generating photon noise tables for rav1e by @shssoichiro in #655
- Use
-c y4m
instead of deprecated-y
in vspipe by @shssoichiro in #657 - Bump ffmpeg-next to 5.1.1 by @FreezyLemon in #658
- Fix CI Windows builds by @FreezyLemon in #656
- Fix stalled pipe on Windows when using target quality by @woot000 in #596
- Fix extra_splits when fps is NaN by @redzic in #661
- Fix usage of --quiet flag by @redzic in #669
- Various dependency updates and cleanup by @shssoichiro in #679
- Fix Windows build by @FreezyLemon in #680
- Temporarily disable steady ticks on progress bars by @shssoichiro in #682
- Fix stuttering FPS and ETA on progress bar by @shssoichiro in #684
- Cleanup workspace by @shssoichiro in #685
- Improve verbose progress for several encoders by @shssoichiro in #688
- Fix way too many new clippy lints from Rust 1.66 by @shssoichiro in #693
- Fix x26* progress bar by @shssoichiro in #692
- Remove patches and bump av-scenechange by @master-of-zen in #694
- 0.4.0 by @master-of-zen in #695
New Contributors
- @FazlyMR made their first contribution in #608
- @GaveUp made their first contribution in #616
- @hansejo made their first contribution in #614
- @Y0ba made their first contribution in #634
- @FreezyLemon made their first contribution in #638
- @woot000 made their first contribution in #596
Full Changelog: 0.3.1...0.4.0-release
Av1an 0.3.1
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: 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
Av1an 0.3.0
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: 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
Av1an 0.2.0 Rust rewrite
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 🤯
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 😘 ❤️
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
VVC support, Target VMAF from Rav1e, SVT-AV1, VPX
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
andparcatStatic
must be namedvvc_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 tomin_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
x265 support and target_vmaf , Better-Faster target vmaf, New splitting option
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