Added resume from computation
This commit is contained in:
@@ -19,6 +19,23 @@ StringBuilder AV1CPUStats = new(tableHeader);
|
|||||||
StringBuilder HEVCCPUStats = new(tableHeader);
|
StringBuilder HEVCCPUStats = new(tableHeader);
|
||||||
StringBuilder H264CPUStats = new(tableHeader);
|
StringBuilder H264CPUStats = new(tableHeader);
|
||||||
|
|
||||||
|
const string Av1NvencStatsFile = "AV1_NVENC_Stats.tsv";
|
||||||
|
const string HevcNvencStatsFile = "HEVC_NVENC_Stats.tsv";
|
||||||
|
const string H264NvencStatsFile = "H264_NVENC_Stats.tsv";
|
||||||
|
const string Av1CpuStatsFile = "AV1_CPU_Stats.tsv";
|
||||||
|
const string HevcCpuStatsFile = "HEVC_CPU_Stats.tsv";
|
||||||
|
const string H264CpuStatsFile = "H264_CPU_Stats.tsv";
|
||||||
|
|
||||||
|
string GetStatsFilePath(Encoder encoder) => encoder switch {
|
||||||
|
Encoder.AV1_NVENC => Path.Combine(outputDir, Av1NvencStatsFile),
|
||||||
|
Encoder.HEVC_NVENC => Path.Combine(outputDir, HevcNvencStatsFile),
|
||||||
|
Encoder.H264_NVENC => Path.Combine(outputDir, H264NvencStatsFile),
|
||||||
|
Encoder.AV1_CPU => Path.Combine(outputDir, Av1CpuStatsFile),
|
||||||
|
Encoder.HEVC_CPU => Path.Combine(outputDir, HevcCpuStatsFile),
|
||||||
|
Encoder.H264_CPU => Path.Combine(outputDir, H264CpuStatsFile),
|
||||||
|
_ => throw new ArgumentOutOfRangeException(nameof(encoder), encoder, null)
|
||||||
|
};
|
||||||
|
|
||||||
GlobalFFOptions.Configure(options => {
|
GlobalFFOptions.Configure(options => {
|
||||||
options.BinaryFolder = ffmpegPath;
|
options.BinaryFolder = ffmpegPath;
|
||||||
options.TemporaryFilesFolder = tempPath;
|
options.TemporaryFilesFolder = tempPath;
|
||||||
@@ -27,6 +44,19 @@ GlobalFFOptions.Configure(options => {
|
|||||||
|
|
||||||
if(!File.Exists(inputFile)) return;
|
if(!File.Exists(inputFile)) return;
|
||||||
|
|
||||||
|
if (File.Exists(GetStatsFilePath(Encoder.AV1_NVENC)))
|
||||||
|
AV1GPUStats.Clear().Append(File.ReadAllText(GetStatsFilePath(Encoder.AV1_NVENC)));
|
||||||
|
if (File.Exists(GetStatsFilePath(Encoder.HEVC_NVENC)))
|
||||||
|
HEVCGPUStats.Clear().Append(File.ReadAllText(GetStatsFilePath(Encoder.HEVC_NVENC)));
|
||||||
|
if (File.Exists(GetStatsFilePath(Encoder.H264_NVENC)))
|
||||||
|
H264GPUStats.Clear().Append(File.ReadAllText(GetStatsFilePath(Encoder.H264_NVENC)));
|
||||||
|
if (File.Exists(GetStatsFilePath(Encoder.AV1_CPU)))
|
||||||
|
AV1CPUStats.Clear().Append(File.ReadAllText(GetStatsFilePath(Encoder.AV1_CPU)));
|
||||||
|
if (File.Exists(GetStatsFilePath(Encoder.HEVC_CPU)))
|
||||||
|
HEVCCPUStats.Clear().Append(File.ReadAllText(GetStatsFilePath(Encoder.HEVC_CPU)));
|
||||||
|
if (File.Exists(GetStatsFilePath(Encoder.H264_CPU)))
|
||||||
|
H264CPUStats.Clear().Append(File.ReadAllText(GetStatsFilePath(Encoder.H264_CPU)));
|
||||||
|
|
||||||
var originalFile = new FileInfo(inputFile);
|
var originalFile = new FileInfo(inputFile);
|
||||||
var mediaInfo = FFProbe.Analyse(inputFile);
|
var mediaInfo = FFProbe.Analyse(inputFile);
|
||||||
if (mediaInfo.PrimaryVideoStream == null) {
|
if (mediaInfo.PrimaryVideoStream == null) {
|
||||||
@@ -42,15 +72,31 @@ CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
|
|||||||
|
|
||||||
CancellationToken cancellationToken = cancellationTokenSource.Token;
|
CancellationToken cancellationToken = cancellationTokenSource.Token;
|
||||||
Console.WriteLine("Generating Tasks:");
|
Console.WriteLine("Generating Tasks:");
|
||||||
|
bool dataExists(int width, int height, Encoder encoder, int cq, int preset) {
|
||||||
|
StringBuilder stats = encoder switch {
|
||||||
|
Encoder.AV1_NVENC => AV1GPUStats,
|
||||||
|
Encoder.HEVC_NVENC => HEVCGPUStats,
|
||||||
|
Encoder.H264_NVENC => H264GPUStats,
|
||||||
|
Encoder.AV1_CPU => AV1CPUStats,
|
||||||
|
Encoder.HEVC_CPU => HEVCCPUStats,
|
||||||
|
Encoder.H264_CPU => H264CPUStats,
|
||||||
|
_ => throw new ArgumentOutOfRangeException(nameof(encoder), encoder, null)
|
||||||
|
};
|
||||||
|
string searchLineStart = $"{width}\t{height}\t{preset}\t{cq}\t";
|
||||||
|
return stats.ToString().Contains(searchLineStart);
|
||||||
|
}
|
||||||
|
|
||||||
for (int cq = 24; cq <= 34; cq++) {
|
for (int cq = 24; cq <= 34; cq++) {
|
||||||
for (int preset = 12; preset <= 18; preset++) {
|
for (int preset = 12; preset <= 18; preset++) {
|
||||||
//GpuTasks.Add(Encode(Encoder.AV1_NVENC, 1280, 720, cq, preset, cancellationToken));
|
//GpuTasks.Add(Encode(Encoder.AV1_NVENC, 1280, 720, cq, preset, cancellationToken));
|
||||||
//GpuTasks.Add(Encode(Encoder.AV1_NVENC, 1920, 1080, cq, preset, cancellationToken));
|
//GpuTasks.Add(Encode(Encoder.AV1_NVENC, 1920, 1080, cq, preset, cancellationToken));
|
||||||
GpuTasks.Add(Encode(Encoder.AV1_NVENC, W, H, cq, preset, cancellationToken));
|
if(!dataExists(W, H, Encoder.AV1_NVENC, cq, preset))
|
||||||
|
GpuTasks.Add(Encode(Encoder.AV1_NVENC, W, H, cq, preset, cancellationToken));
|
||||||
|
|
||||||
//GpuTasks.Add(Encode(Encoder.HEVC_NVENC, 1280, 720, cq, preset, cancellationToken));
|
//GpuTasks.Add(Encode(Encoder.HEVC_NVENC, 1280, 720, cq, preset, cancellationToken));
|
||||||
//GpuTasks.Add(Encode(Encoder.HEVC_NVENC, 1920, 1080, cq, preset, cancellationToken));
|
//GpuTasks.Add(Encode(Encoder.HEVC_NVENC, 1920, 1080, cq, preset, cancellationToken));
|
||||||
GpuTasks.Add(Encode(Encoder.HEVC_NVENC, W, H, cq, preset, cancellationToken));
|
if(!dataExists(W, H, Encoder.HEVC_NVENC, cq, preset))
|
||||||
|
GpuTasks.Add(Encode(Encoder.HEVC_NVENC, W, H, cq, preset, cancellationToken));
|
||||||
|
|
||||||
//GpuTasks.Add(Encode(Encoder.H264_NVENC, 1280, 720, cq, preset, cancellationToken));
|
//GpuTasks.Add(Encode(Encoder.H264_NVENC, 1280, 720, cq, preset, cancellationToken));
|
||||||
//GpuTasks.Add(Encode(Encoder.H264_NVENC, 1920, 1080, cq, preset, cancellationToken));
|
//GpuTasks.Add(Encode(Encoder.H264_NVENC, 1920, 1080, cq, preset, cancellationToken));
|
||||||
@@ -59,12 +105,14 @@ for (int cq = 24; cq <= 34; cq++) {
|
|||||||
for (int preset = 3; preset <= 10; preset++) {
|
for (int preset = 3; preset <= 10; preset++) {
|
||||||
//CpuTasks.Add(Encode(Encoder.AV1_CPU, 1280, 720, cq, preset, cancellationToken));
|
//CpuTasks.Add(Encode(Encoder.AV1_CPU, 1280, 720, cq, preset, cancellationToken));
|
||||||
//CpuTasks.Add(Encode(Encoder.AV1_CPU, 1920, 1080, cq, preset, cancellationToken));
|
//CpuTasks.Add(Encode(Encoder.AV1_CPU, 1920, 1080, cq, preset, cancellationToken));
|
||||||
CpuTasks.Add(Encode(Encoder.AV1_CPU, W, H, cq, preset, cancellationToken));
|
if(!dataExists(W, H, Encoder.AV1_CPU, cq, preset))
|
||||||
|
CpuTasks.Add(Encode(Encoder.AV1_CPU, W, H, cq, preset, cancellationToken));
|
||||||
}
|
}
|
||||||
for (int preset = 2; preset <= 5; preset++) {
|
for (int preset = 2; preset <= 5; preset++) {
|
||||||
//CpuTasks.Add(Encode(Encoder.HEVC_CPU, 1280, 720, cq, preset, cancellationToken));
|
//CpuTasks.Add(Encode(Encoder.HEVC_CPU, 1280, 720, cq, preset, cancellationToken));
|
||||||
//CpuTasks.Add(Encode(Encoder.HEVC_CPU, 1920, 1080, cq, preset, cancellationToken));
|
//CpuTasks.Add(Encode(Encoder.HEVC_CPU, 1920, 1080, cq, preset, cancellationToken));
|
||||||
CpuTasks.Add(Encode(Encoder.HEVC_CPU, W, H, cq, preset, cancellationToken));
|
if (!dataExists(W, H, Encoder.HEVC_CPU, cq, preset))
|
||||||
|
CpuTasks.Add(Encode(Encoder.HEVC_CPU, W, H, cq, preset, cancellationToken));
|
||||||
|
|
||||||
//CpuTasks.Add(Encode(Encoder.H264_CPU, 1280, 720, cq, preset, cancellationToken));
|
//CpuTasks.Add(Encode(Encoder.H264_CPU, 1280, 720, cq, preset, cancellationToken));
|
||||||
//CpuTasks.Add(Encode(Encoder.H264_CPU, 1920, 1080, cq, preset, cancellationToken));
|
//CpuTasks.Add(Encode(Encoder.H264_CPU, 1920, 1080, cq, preset, cancellationToken));
|
||||||
@@ -321,9 +369,15 @@ async Task<Tuple<float,float>> ComputePSNRScore(string referenceFile, string dis
|
|||||||
foreach (var line in PsnrLog) {
|
foreach (var line in PsnrLog) {
|
||||||
if (!line.Contains("mse_avg:")) continue; // Skip header and irrelevant lines
|
if (!line.Contains("mse_avg:")) continue; // Skip header and irrelevant lines
|
||||||
string[] parts = line.Split(' ');
|
string[] parts = line.Split(' ');
|
||||||
foreach (var part in parts) {
|
foreach (var part in parts) {
|
||||||
if (part.StartsWith("psnr_avg:")) psnrVals.Add(float.Parse(part.Split(':')[1]));
|
if (part.StartsWith("psnr_avg:")) {
|
||||||
if (part.StartsWith("mse_avg:")) mseVals.Add(float.Parse(part.Split(':')[1]));
|
var val = part.Split(':')[1];
|
||||||
|
psnrVals.Add(val == "inf" ? float.PositiveInfinity : float.Parse(val));
|
||||||
|
}
|
||||||
|
if (part.StartsWith("mse_avg:")) {
|
||||||
|
var val = part.Split(':')[1];
|
||||||
|
mseVals.Add(val == "inf" ? float.PositiveInfinity : float.Parse(val));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PSNR = psnrVals.Count > 0 ? psnrVals.Average() : -1;
|
PSNR = psnrVals.Count > 0 ? psnrVals.Average() : -1;
|
||||||
|
|||||||
Reference in New Issue
Block a user