diff --git a/README.md b/README.md
index 5f25ac5..9f451e9 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,7 @@
# ORI Video Encoding recommendations.
+The formatted documentation is at [https://academysoftwarefoundation.github.io/EncodingGuidelines/](https://academysoftwarefoundation.github.io/EncodingGuidelines/).
+
This repository contains a variety of test suites to help pick encoding profiles suitable for VFX/Animation media reviews.
We are trying to develop best practices, so we will suggest a good starting point, but there isn't a right answer for all cases. We also try to explain what the encoding parameters do, and in what situations you might want to choose different parameters.
This is not the site for general encoding, although you may find answers here, we will likely opt for a simple one-size fits all solution over file-size efficiency.
@@ -7,30 +9,9 @@ We welcome suggestions and improvements.
This work is being done as part of the [ASWF Open Review Initiative](https://openreviewinitiative.org/). We are grateful for the ASWF for creating the collaborative cross company environment that allows such projects to exist.
-The main wiki page for this for now is [here](https://wiki.aswf.io/pages/viewpage.action?pageId=16031068)
+The main wiki page for this for now is [here](https://wiki.aswf.io/pages/viewpage.action?pageId=16031068).
+
+
+### Acknowledgements
-1. [Acknowledgements](#Acknowledgements)
-2. [Encoding Cheat Sheet](Quickstart.html)
-3. [Encoding Overview](Encoding.html#Encoding-Overview)
-4. [Color space conversion](ColorPreservation.html#Color-space-conversion)
-5. [Media Encoding with ffmpeg](ColorPreservation.html#encodestart)
- 1. [Frame sequence specification](FfmpegInputs.html)
- 2. [RGB to YCrCb Conversion](ColorPreservation.html#yuv)
- 3. [TV vs. Full range.](ColorPreservation.html#tvfull)
- 4. [RGB encode](RGBEncoding.html)
- 5. [Useful Ffmpeg Filters.](OtherFfmpegArgs.html)
- 6. [HDR Encoding](HDR_Encoding.html)
- 7. [Adding Timecode and Editorial Workflow](EditorialWorkflow.html)
-6. [Codec Comparsions](Encoding.html#encode)
- 1. [h264](Encodeh264.html)
- 2. [Prores](EncodeProres.html)
- 3. [AV1](EncodeAv1.html)
- 4. [HEVC/H.265](EncodeHevc.html)
- 5. [MJPEG](EncodeMJPEG.html)
- 6. [VP8](EncodeVP8.html)
- 6. [VP9](EncodeVP9.html)
- 7. [DNxHD](EncodeDNXHD.html)
-7. [Metadata NCLC/NCLX](ColorPreservation.html#nclc)
- 1. [Gamut - colorprimaries](ColorPreservation.html#gamut)
- 2. [Color Range](ColorPreservation.html#range)
-8. [Web Review](ColorPreservation.html#webreview)
\ No newline at end of file
+This document is a result of feedback from many people, in particular I would like to thank Kevin Wheatley, Trevor Aylward, Mark Reid, Gates Roberg Clark, Rick Sayre, Wendy Heffner and J Schulte for their time and patience.
diff --git a/enctests/bitDepth/BitDepthComparisons.md b/enctests/bitDepth/BitDepthComparisons.md
index 2bf5f54..f0b1ba1 100755
--- a/enctests/bitDepth/BitDepthComparisons.md
+++ b/enctests/bitDepth/BitDepthComparisons.md
@@ -71,7 +71,7 @@ All the values are as expected.
### x265 HEVC
-x265 HEVC is struggling with flat color with quite a few values not generating a uniform value.
+x265 HEVC is struggling with flat color with quite a few values not generating a uniform value, unless lossless is used.
### VP9
@@ -79,11 +79,11 @@ All the values are as expected.
### libsvtav1
-Something rather odd going on here, the 10-bit encode is generating only 475 unique values rather than 1024. Looking at the values, it seems like there is some sort of rounding going on here.
+All the values are as expected.
### libaom-av1
-Is slightly better, with 866 unique values, but many of them are off by one or more. At 12-bit the results are similar.
+Is slightly better, with 866 unique values, but many of them are off by one or more. At 12-bit the results are similar. Using lossless will maintain all values (as expected).
Click [here](bitDepthResults.html) to see the full page table.
diff --git a/enctests/bitDepth/bitDepthResults.html b/enctests/bitDepth/bitDepthResults.html
index 3d2aa82..659ad3e 100755
--- a/enctests/bitDepth/bitDepthResults.html
+++ b/enctests/bitDepth/bitDepthResults.html
@@ -14,12 +14,15 @@
| h264-slower | 10 | 1024 / 1024 | [0-1023] | | | | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=yuv444p10le -frames:v 1024 -vf geq=N:512:512 -c:v h264 -preset slower -crf 15 ./colors-h264-slower.mov |
| hevc-slower-444-10 | 10 | 1024 / 1024 | [0-1000, 1002-1003, 1005-1023] | [1001, 1004] | | [1001, 1004] | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=yuv444p10le -frames:v 1024 -vf geq=N:512:512 -c:v hevc -profile:v main444-10 -preset slower -crf 10 ./colors-hevc-slower-444-10.mov |
| hevc-slower-444-12 | 12 | 4096 / 4096 | [0-4, 6, 8, 10 ... 4085, 4087, 4089, 4091-4095] | [5, 7, 9, 11 ... 4083-4084, 4086, 4088, 4090] | | [5, 7, 9, 11 ... 4083-4084, 4086, 4088, 4090] | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=yuv444p12le -frames:v 4096 -vf geq=N:2048:2048 -c:v hevc -profile:v main444-12 -preset slower -crf 2 ./colors-hevc-slower-444-12.mov |
+| hevc-slower-444-12-lossless | 12 | 4096 / 4096 | [0-4095] | | | | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=yuv444p12le -frames:v 4096 -vf geq=N:2048:2048 -c:v hevc -profile:v main444-12 -preset ultrafast -x265-params lossless=1 ./colors-hevc-slower-444-12-lossless.mov |
| vp9-slower-444-10 | 10 | 1024 / 1024 | [0-1023] | | | | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=yuv444p10le -frames:v 1024 -vf geq=N:512:512 -c:v libvpx-vp9 -quality good -crf 5 -b:v 0 ./colors-vp9-slower-444-10.mp4 |
| vp9-slower-444-12 | 12 | 4096 / 4096 | [0-4095] | | | | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=yuv444p12le -frames:v 4096 -vf geq=N:2048:2048 -c:v libvpx-vp9 -quality good -crf 5 -b:v 0 ./colors-vp9-slower-444-12.mp4 |
-| libsvtav1-420-8 | 8 | 256 / 256 | [0-255] | | | | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=yuv444p -frames:v 256 -vf geq=N:128:128 -c:v libsvtav1 -preset 9 -crf 3 ./colors-libsvtav1-420-8.mp4 |
-| libsvtav1-420-10 | 10 | 475 / 1024 | [0, 4, 8, 12 ... 1016, 1018, 1020, 1022] | | | [1-3, 5-7, 9-11, 13-15 ... 1017, 1019, 1021, 1023] | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=yuv444p10le -frames:v 1024 -vf geq=N:512:512 -c:v libsvtav1 -preset 9 -crf 3 ./colors-libsvtav1-420-10.mp4 |
-| libaom-444-10 | 10 | 866 / 1024 | [1-10, 12-14, 16-18, 20-22 ... 993, 997, 1001-1015, 1018-1023] | [0, 684-685] | [111, 115, 119, 123 ... 994, 996, 998-1000, 1016-1017] | [0, 11, 15, 19 ... 990-992, 994-996, 998-1000, 1016-1017] | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=yuv444p10le -frames:v 1024 -vf geq=N:512:512 -c:v libaom-av1 -cpu-used 4 -usage good -crf 20 -row-mt 1 ./colors-libaom-444-10.mp4 |
-| libaom-444-12 | 12 | 3805 / 4096 | [4-32, 55-70, 72-79, 88-103 ... 4065-4072, 4087, 4091, 4095] | [0-3] | [33-48, 51-54, 80-87, 113-120 ... 4011-4014, 4040-4047, 4073-4080, 4083-4086] | [0-3, 33-54, 71, 80-87 ... 4064, 4073-4086, 4088-4090, 4092-4094] | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=yuv444p12le -frames:v 4096 -vf geq=N:2048:2048 -c:v libaom-av1 -cpu-used 4 -usage good -crf 20 -row-mt 1 ./colors-libaom-444-12.mp4 |
+| libsvtav1-420-8 | 8 | 256 / 256 | [0-255] | | | | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=yuv444p -frames:v 256 -vf geq=N:128:128 -c:v libsvtav1 -preset 5 -crf 3 ./colors-libsvtav1-420-8.mp4 |
+| libsvtav1-420-10 | 10 | 1024 / 1024 | [0-1023] | | | | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=yuv444p10le -frames:v 1024 -vf geq=N:512:512 -c:v libsvtav1 -preset 3 -crf 2 ./colors-libsvtav1-420-10.mp4 |
+| libaom-444-10 | 10 | 894 / 1024 | [0-10, 12-14, 16-18, 20-22 ... 988-990, 992-994, 996-998, 1000-1023] | | [111, 115, 119, 123 ... 932, 936, 940, 999] | [11, 15, 19, 23 ... 987, 991, 995, 999] | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=yuv444p10le -frames:v 1024 -vf geq=N:512:512 -c:v libaom-av1 -cpu-used 4 -usage good -crf 15 -row-mt 1 ./colors-libaom-444-10.mp4 |
+| libaom-444-12 | 12 | 3975 / 4096 | [32-47, 55-70, 88-120, 127-151 ... 4048-4080, 4087, 4090, 4093] | [0-31, 48-54, 71-79] | [80-87, 121-126, 152-159, 193-198 ... 3968-3975, 4009-4014, 4040-4047, 4081-4086] | [0-31, 48-54, 71-87, 121-126 ... 4081-4086, 4088-4089, 4091-4092, 4094-4095] | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=yuv444p12le -frames:v 4096 -vf geq=N:2048:2048 -c:v libaom-av1 -cpu-used 4 -usage good -crf 15 -row-mt 1 ./colors-libaom-444-12.mp4 |
+| libaom-444-10-lossless | 10 | 1024 / 1024 | [0-1023] | | | | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=yuv444p10le -frames:v 1024 -vf geq=N:512:512 -c:v libaom-av1 -aom-params: lossless=1 -cpu-used 4 -usage good -crf 20 -row-mt 1 ./colors-libaom-444-10-lossless.mp4 |
+| libaom-444-12-lossless | 12 | 4096 / 4096 | [0-4095] | | | | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=yuv444p12le -frames:v 4096 -vf geq=N:2048:2048 -c:v libaom-av1 -aom-params: lossless=1 -cpu-used 4 -usage good -crf 20 -row-mt 1 ./colors-libaom-444-12-lossless.mp4 |
| hevc_videotoolbox_8_main | 8 | 256 / 256 | [0-255] | | | | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=yuv420p -frames:v 256 -vf geq=N:128:128 -c:v hevc_videotoolbox -profile:v main -q:v 100 ./colors-hevc_videotoolbox_8_main.mov |
| hevc_videotoolbox_10_main10 | 10 | 1024 / 1024 | [0-1023] | | | | ffmpeg -y -r 24 -f lavfi -i nullsrc=s=256x120,format=p010le -frames:v 1024 -vf geq=N:512:512 -c:v hevc_videotoolbox -profile:v main10 -q:v 100 ./colors-hevc_videotoolbox_10_main10.mov |
diff --git a/enctests/bitDepth/testBitDepth.py b/enctests/bitDepth/testBitDepth.py
index a692352..e776a01 100755
--- a/enctests/bitDepth/testBitDepth.py
+++ b/enctests/bitDepth/testBitDepth.py
@@ -106,6 +106,12 @@ def seqToStr(array):
'codec': 'hevc',
'otherargs': ' -profile:v main444-12 -preset slower -crf 2 ', # 444
'bits': 12
+ } ,
+ {'testname': 'hevc-slower-444-12-lossless',
+ 'pix_fmt': 'yuv444p12le',
+ 'codec': 'hevc',
+ 'otherargs': ' -profile:v main444-12 -preset ultrafast -x265-params lossless=1 ', # 444
+ 'bits': 12
} ,
{'testname': 'vp9-slower-444-10',
'pix_fmt': 'yuv444p10le',
@@ -125,28 +131,42 @@ def seqToStr(array):
'pix_fmt': 'yuv444p',
'codec': 'libsvtav1',
'ext': 'mp4',
- 'otherargs': '-preset 9 -crf 3 ', # 444
+ 'otherargs': '-preset 5 -crf 3 ', # 444
'bits': 8
},
{'testname': 'libsvtav1-420-10',
'pix_fmt': 'yuv444p10le',
'codec': 'libsvtav1',
'ext': 'mp4',
- 'otherargs': '-preset 9 -crf 3 ', # 444
+ 'otherargs': '-preset 3 -crf 2 ', # 444
'bits': 10
},
- {'testname': 'libaom-444-10',
+ {'testname': 'libaom-444-10',
'pix_fmt': 'yuv444p10le',
'codec': 'libaom-av1',
'ext': 'mp4',
- 'otherargs': ' -cpu-used 4 -usage good -crf 20 -row-mt 1 ', # 444
+ 'otherargs': ' -cpu-used 4 -usage good -crf 15 -row-mt 1 ', # 444
'bits': 10
},
{'testname': 'libaom-444-12',
'pix_fmt': 'yuv444p12le',
'codec': 'libaom-av1',
'ext': 'mp4',
- 'otherargs': ' -cpu-used 4 -usage good -crf 20 -row-mt 1 ', # 444
+ 'otherargs': ' -cpu-used 4 -usage good -crf 15 -row-mt 1 ', # 444
+ 'bits': 12
+ },
+ {'testname': 'libaom-444-10-lossless',
+ 'pix_fmt': 'yuv444p10le',
+ 'codec': 'libaom-av1',
+ 'ext': 'mp4',
+ 'otherargs': ' -aom-params: lossless=1 -cpu-used 4 -usage good -crf 20 -row-mt 1 ', # 444
+ 'bits': 10
+ },
+ {'testname': 'libaom-444-12-lossless',
+ 'pix_fmt': 'yuv444p12le',
+ 'codec': 'libaom-av1',
+ 'ext': 'mp4',
+ 'otherargs': '-aom-params: lossless=1 -cpu-used 4 -usage good -crf 20 -row-mt 1 ', # 444
'bits': 12
},
{'testname': 'hevc_videotoolbox_8_main',
@@ -265,4 +285,4 @@ def seqToStr(array):
#else:
print(test['testname'], count, " unique values, valid values:", seqToStr(validvalues), " invalid values < 1:", seqToStr(nearlymissing), " missing by 1:", seqToStr(nearlymissing1), "other", seqToStr(missing))
print("| ", test['testname'], " | ", test['bits']," | ", count, "/", test['frames'], " | ", seqToStr(validvalues), " | ", seqToStr(nearlymissing), " | ", seqToStr(nearlymissing1), " | ", seqToStr(missing), " | ",cmd," |
", file=resultfile)
-print("", file=resultfile)
\ No newline at end of file
+print("", file=resultfile)
diff --git a/index.md b/index.md
index 88b1c47..94de656 100644
--- a/index.md
+++ b/index.md
@@ -13,6 +13,10 @@ We welcome suggestions and improvements.
The main confluence page for this for now is [here](https://wiki.aswf.io/pages/viewpage.action?pageId=16031068)
+{: .highlight }
+We would like to encourage the usage of [VP9](EncodeVP9.html) and [AV1](EncodeAv1.html) to encourage the usage of patent-free codecs, for more information on this see the white-paper [Next-gen codecs for VFX Community](https://docs.google.com/document/d/1EJ7Q_HhjL0ELNdjz5AgnPrraUvy7XCo52LL08WxgjtA/edit#heading=h.9rkn78tjmq48).
+
+
## Why is this needed.
There are a lot of excellent guides out there. But few addressing the needs of the VFX community.