no longer adjust hardware encoding parameters

This commit is contained in:
John Andrews
2022-06-28 15:13:27 +12:00
parent fcd4f4914b
commit 3fd0834850
2 changed files with 114 additions and 48 deletions

View File

@@ -78,6 +78,69 @@ public class FfmpegBuilder_VideoEncode_VideoEncodeTests: TestBase
public void FfmpegBuilder_VideoEncode_H264() => TestEncode(false, false, false);
[TestMethod]
public void FfmpegBuilder_VideoEncode_H264_10bit() => TestEncode(false, false, true);
[TestMethod]
public void FfmpegBuilder_VideoEncode_FailIfNoHardware()
{
var logger = new TestLogger();
const string ffmpeg = @"C:\utils\ffmpeg\ffmpeg.exe";
var vi = new VideoInfoHelper(ffmpeg, logger);
var vii = vi.Read(TestFile_120_mbps_4k_uhd_hevc_10bit);
var args = new NodeParameters(TestFile_50_mbps_hd_h264, logger, false, string.Empty);
args.GetToolPathActual = (string tool) => ffmpeg;
args.TempPath = @"D:\videos\temp";
args.Parameters.Add("VideoInfo", vii);
FfmpegBuilderStart ffStart = new();
ffStart.PreExecute(args);
Assert.AreEqual(1, ffStart.Execute(args));
FfmpegBuilderVideoCodec ffCodec = new();
ffCodec.VideoCodec = "h265";
ffCodec.VideoCodecParameters = "hevc_qsv";
ffCodec.PreExecute(args);
ffCodec.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
string log = logger.ToString();
Assert.AreEqual(-1, result);
}
[TestMethod]
public void FfmpegBuilder_VideoEncode_AutoUseHardware()
{
var logger = new TestLogger();
const string ffmpeg = @"C:\utils\ffmpeg\ffmpeg.exe";
var vi = new VideoInfoHelper(ffmpeg, logger);
var vii = vi.Read(TestFile_120_mbps_4k_uhd_hevc_10bit);
var args = new NodeParameters(TestFile_50_mbps_hd_h264, logger, false, string.Empty);
args.GetToolPathActual = (string tool) => ffmpeg;
args.TempPath = @"D:\videos\temp";
args.Parameters.Add("VideoInfo", vii);
FfmpegBuilderStart ffStart = new();
ffStart.PreExecute(args);
Assert.AreEqual(1, ffStart.Execute(args));
FfmpegBuilderVideoCodec ffCodec = new();
ffCodec.VideoCodec = "h265";
ffCodec.VideoCodecParameters = "h265";
ffCodec.PreExecute(args);
ffCodec.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
string log = logger.ToString();
Assert.AreEqual(1, result);
}
}
#endif

View File

@@ -106,55 +106,58 @@ namespace FileFlows.VideoNodes
return "libx264";
}
if (vidparams.ToLower().Contains("hevc_nvenc"))
{
// nvidia h265 encoding, check can
bool canProcess = CanUseHardwareEncoding.CanProcess(Args, ffmpeg, vidparams);
if (canProcess == false)
{
// change to cpu encoding
Args.Logger?.ILog("Can't encode using hevc_nvenc, falling back to CPU encoding H265 (libx265)");
return "libx265";
}
return vidparams;
}
else if (vidparams.ToLower().Contains("h264_nvenc"))
{
// nvidia h264 encoding, check can
bool canProcess = CanUseHardwareEncoding.CanProcess(Args, ffmpeg, vidparams);
if (canProcess == false)
{
// change to cpu encoding
Args.Logger?.ILog("Can't encode using h264_nvenc, falling back to CPU encoding H264 (libx264)");
return "libx264";
}
return vidparams;
}
else if (vidparams.ToLower().Contains("hevc_qsv"))
{
// nvidia h265 encoding, check can
bool canProcess = CanUseHardwareEncoding.CanProcess(Args, ffmpeg, vidparams);
if (canProcess == false)
{
// change to cpu encoding
Args.Logger?.ILog("Can't encode using hevc_qsv, falling back to CPU encoding H265 (libx265)");
return "libx265";
}
return vidparams;
}
else if (vidparams.ToLower().Contains("h264_qsv"))
{
// nvidia h264 encoding, check can
bool canProcess = CanUseHardwareEncoding.CanProcess(Args, ffmpeg, vidparams);
if (canProcess == false)
{
// change to cpu encoding
Args.Logger?.ILog("Can't encode using h264_qsv, falling back to CPU encoding H264 (libx264)");
return "libx264";
}
return vidparams;
}
return vidparams;
// no longer do this
//if (vidparams.ToLower().Contains("hevc_nvenc"))
//{
// // nvidia h265 encoding, check can
// bool canProcess = CanUseHardwareEncoding.CanProcess(Args, ffmpeg, vidparams);
// if (canProcess == false)
// {
// // change to cpu encoding
// Args.Logger?.ILog("Can't encode using hevc_nvenc, falling back to CPU encoding H265 (libx265)");
// return "libx265";
// }
// return vidparams;
//}
//else if (vidparams.ToLower().Contains("h264_nvenc"))
//{
// // nvidia h264 encoding, check can
// bool canProcess = CanUseHardwareEncoding.CanProcess(Args, ffmpeg, vidparams);
// if (canProcess == false)
// {
// // change to cpu encoding
// Args.Logger?.ILog("Can't encode using h264_nvenc, falling back to CPU encoding H264 (libx264)");
// return "libx264";
// }
// return vidparams;
//}
//else if (vidparams.ToLower().Contains("hevc_qsv"))
//{
// // nvidia h265 encoding, check can
// bool canProcess = CanUseHardwareEncoding.CanProcess(Args, ffmpeg, vidparams);
// if (canProcess == false)
// {
// // change to cpu encoding
// Args.Logger?.ILog("Can't encode using hevc_qsv, falling back to CPU encoding H265 (libx265)");
// return "libx265";
// }
// return vidparams;
//}
//else if (vidparams.ToLower().Contains("h264_qsv"))
//{
// // nvidia h264 encoding, check can
// bool canProcess = CanUseHardwareEncoding.CanProcess(Args, ffmpeg, vidparams);
// if (canProcess == false)
// {
// // change to cpu encoding
// Args.Logger?.ILog("Can't encode using h264_qsv, falling back to CPU encoding H264 (libx264)");
// return "libx264";
// }
// return vidparams;
//}
//return vidparams;
}
public bool HasNvidiaCard(string ffmpeg)