Skip to content

Commit 9fc669e

Browse files
committed
Av1an: Automatic HDR args for aomenc
1 parent 5f2c7ea commit 9fc669e

File tree

4 files changed

+103
-2
lines changed

4 files changed

+103
-2
lines changed

ff-utils-winforms/Data/Codecs/Video/AomAv1.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Nmkoder.Extensions;
22
using Nmkoder.IO;
3+
using Nmkoder.Utils;
34
using System;
45
using System.Collections.Generic;
56
using System.Linq;
@@ -39,12 +40,24 @@ public CodecArgs GetArgs(Dictionary<string, string> encArgs = null, MediaFile me
3940
string denoise = encArgs.ContainsKey("grainSynthDenoise") ? (encArgs["grainSynthDenoise"].GetBool() ? "1" : "0") : "0";
4041
string tiles = CodecUtils.GetTilingArgs(mediaFile.VideoStreams.FirstOrDefault().Resolution, "--tile-rows=", "--tile-columns=");
4142
string cust = encArgs.ContainsKey("custom") ? encArgs["custom"] : "";
43+
string colors = "";
44+
45+
if(mediaFile != null && mediaFile.ColorData != null)
46+
{
47+
string prims = ColorDataUtils.GetColorPrimariesString(mediaFile.ColorData.ColorPrimaries);
48+
string transfer = ColorDataUtils.GetColorTransferString(mediaFile.ColorData.ColorTransfer);
49+
string matrixCoeffs = ColorDataUtils.GetColorMatrixCoeffsString(mediaFile.ColorData.ColorMatrixCoeffs);
50+
colors = $"{(prims != "" ? $"--color-primaries={prims}" : "")} {(transfer != "" ? $"--transfer-characteristics={transfer}" : "")} {(matrixCoeffs != "" ? $"--matrix-coefficients={matrixCoeffs}" : "")}";
51+
52+
if (mediaFile.ColorData.ColorPrimaries == 9)
53+
colors += " --deltaq-mode=5 --enable-chroma-deltaq=1";
54+
}
4255

4356
return new CodecArgs($" -e aom -v \" " +
4457
$"--end-usage=q --cpu-used={preset} --cq-level={q} " +
45-
$"--kf-min-dist=12 --kf-max-dist={g} " +
58+
$"--disable-kf --kf-min-dist=12 --kf-max-dist={g} " +
4659
$"--enable-dnl-denoising={denoise} --denoise-noise-level={grain} " +
47-
$"--enable-keyframe-filtering=0 --threads={thr} {tiles} {cust} \" --pix-format {pixFmt}");
60+
$"--enable-keyframe-filtering=0 {colors} --threads={thr} {tiles} {cust} \" --pix-format {pixFmt}");
4861
}
4962
}
5063
}

ff-utils-winforms/Data/MediaFile.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public class MediaFile
3737
public List<SubtitleStream> SubtitleStreams = new List<SubtitleStream>();
3838
public List<DataStream> DataStreams = new List<DataStream>();
3939
public List<AttachmentStream> AttachmentStreams = new List<AttachmentStream>();
40+
public VideoColorData ColorData = null;
4041
public long CreationTime;
4142
public bool Initialized = false;
4243

ff-utils-winforms/UI/Tasks/Av1an.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
using Nmkoder.Extensions;
1313
using Nmkoder.Forms;
1414
using Nmkoder.IO;
15+
using Nmkoder.Main;
1516
using Nmkoder.Media;
17+
using Nmkoder.Utils;
1618
using static Nmkoder.UI.Tasks.Av1anUi;
1719

1820
namespace Nmkoder.UI.Tasks
@@ -48,6 +50,12 @@ public static async Task RunResumeWithNewArgs(string sourceFile, string override
4850

4951
public static async Task Run(bool resume = false, string overrideTempDir = "", string overrideArgs = "")
5052
{
53+
if (TrackList.current.File.IsDirectory)
54+
{
55+
RunTask.Cancel("Av1an cannot use image sequence inputs!");
56+
return;
57+
}
58+
5159
Program.mainForm.SetWorking(true);
5260
string args = "";
5361
string inPath = "";
@@ -66,6 +74,7 @@ public static async Task Run(bool resume = false, string overrideTempDir = "", s
6674
outPath = GetOutPath();
6775
string cust = Program.mainForm.av1anCustomArgsBox.Text.Trim();
6876
string custEnc = Program.mainForm.av1anCustomEncArgsBox.Text.Trim();
77+
TrackList.current.File.ColorData = await ColorDataUtils.GetColorData(TrackList.current.File.SourcePath);
6978
CodecArgs codecArgs = CodecUtils.GetCodec(vCodec).GetArgs(GetVideoArgsFromUi(), TrackList.current.File, Data.Codecs.Pass.OneOfOne);
7079
string v = codecArgs.Arguments;
7180
string vf = await GetVideoFilterArgs(codecArgs);

ff-utils-winforms/Utils/ColorDataUtils.cs

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,82 @@ public static int GetColorRange(string s) // Defined by the "Matrix coefficients
258258
return 0; // Fallback: Unspecified
259259
}
260260

261+
#region Get string from int
262+
263+
public static string GetColorPrimariesString(int n)
264+
{
265+
switch (n)
266+
{
267+
case 1: return "bt709";
268+
case 4: return "bt470m";
269+
case 5: return "bt470bg";
270+
case 6: return "bt610";
271+
case 7: return "smpte240m";
272+
case 8: return "film";
273+
case 9: return "bt2020";
274+
case 10: return "smpte428";
275+
case 11: return "smpte431";
276+
case 12: return "smpte432";
277+
}
278+
279+
return "";
280+
}
281+
282+
public static string GetColorTransferString(int n)
283+
{
284+
switch (n)
285+
{
286+
case 1: return "bt709";
287+
case 4: return "gamma22"; // "bt470m"
288+
case 5: return "gamma28"; // "bt470bg"
289+
case 6: return "bt610"; // "smpte170m"
290+
case 7: return "smpte240m";
291+
case 8: return "linear";
292+
case 11: return "iec61966-2-4";
293+
case 12: return "bt1361";
294+
case 13: return "srgb";
295+
case 14: return "bt2020-10";
296+
case 15: return "bt2020-12";
297+
case 16: return "smpte2084";
298+
case 17: return "smpte428";
299+
case 18: return "bt2100";
300+
}
301+
302+
return "";
303+
}
304+
305+
public static string GetColorMatrixCoeffsString(int n)
306+
{
307+
switch (n)
308+
{
309+
case 1: return "bt709";
310+
case 4: return "fcc";
311+
case 5: return "bt470bg";
312+
case 6: return "bt610";
313+
case 7: return "smpte240m";
314+
case 8: return "ycgco";
315+
case 9: return "bt2020ncl";
316+
case 10: return "bt2020";
317+
}
318+
319+
return "";
320+
}
321+
322+
public static string GetColorRangeString(int n)
323+
{
324+
switch (n)
325+
{
326+
case 1: return "tv";
327+
case 2: return "pc";
328+
}
329+
330+
return "";
331+
}
332+
333+
#endregion
334+
335+
#region Get friendly name from int
336+
261337
public static string GetColorPrimariesName(int n)
262338
{
263339
switch (n)
@@ -338,5 +414,7 @@ public static string GetColorRangeName(int n)
338414

339415
return "Unknown";
340416
}
417+
418+
#endregion
341419
}
342420
}

0 commit comments

Comments
 (0)