Added resume from computation
This commit is contained in:
@@ -19,6 +19,23 @@ StringBuilder AV1CPUStats = new(tableHeader);
|
||||
StringBuilder HEVCCPUStats = 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 => {
|
||||
options.BinaryFolder = ffmpegPath;
|
||||
options.TemporaryFilesFolder = tempPath;
|
||||
@@ -27,6 +44,19 @@ GlobalFFOptions.Configure(options => {
|
||||
|
||||
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 mediaInfo = FFProbe.Analyse(inputFile);
|
||||
if (mediaInfo.PrimaryVideoStream == null) {
|
||||
@@ -42,15 +72,31 @@ CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
|
||||
|
||||
CancellationToken cancellationToken = cancellationTokenSource.Token;
|
||||
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 preset = 12; preset <= 18; preset++) {
|
||||
//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, 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, 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, 1920, 1080, cq, preset, cancellationToken));
|
||||
@@ -59,12 +105,14 @@ for (int cq = 24; cq <= 34; cq++) {
|
||||
for (int preset = 3; preset <= 10; preset++) {
|
||||
//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, 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++) {
|
||||
//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, 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, 1920, 1080, cq, preset, cancellationToken));
|
||||
@@ -322,8 +370,14 @@ async Task<Tuple<float,float>> ComputePSNRScore(string referenceFile, string dis
|
||||
if (!line.Contains("mse_avg:")) continue; // Skip header and irrelevant lines
|
||||
string[] parts = line.Split(' ');
|
||||
foreach (var part in parts) {
|
||||
if (part.StartsWith("psnr_avg:")) psnrVals.Add(float.Parse(part.Split(':')[1]));
|
||||
if (part.StartsWith("mse_avg:")) mseVals.Add(float.Parse(part.Split(':')[1]));
|
||||
if (part.StartsWith("psnr_avg:")) {
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user