Added NVENC support to video converter tool

This commit is contained in:
Jaex 2023-05-11 15:16:00 +03:00
parent 56ac48d9da
commit 459e2ee357
4 changed files with 46 additions and 2 deletions

View file

@ -43,6 +43,10 @@ public enum ConverterVideoCodecs
x264,
[Description("H.265 / x265")]
x265,
[Description("H.264 / NVENC")]
h264_nvenc,
[Description("HEVC / NVENC")]
hevc_nvenc,
[Description("VP8")]
vp8,
[Description("VP9")]

View file

@ -93,6 +93,8 @@ private void UpdateOptions()
{
case ConverterVideoCodecs.x264:
case ConverterVideoCodecs.x265:
case ConverterVideoCodecs.h264_nvenc:
case ConverterVideoCodecs.hevc_nvenc:
case ConverterVideoCodecs.vp8:
case ConverterVideoCodecs.vp9:
case ConverterVideoCodecs.av1:
@ -110,10 +112,12 @@ private void UpdateOptions()
switch (Options.VideoCodec)
{
case ConverterVideoCodecs.x264:
case ConverterVideoCodecs.h264_nvenc:
tbVideoQuality.Minimum = FFmpegCLIManager.x264_min;
tbVideoQuality.Maximum = FFmpegCLIManager.x264_max;
break;
case ConverterVideoCodecs.x265:
case ConverterVideoCodecs.hevc_nvenc:
tbVideoQuality.Minimum = FFmpegCLIManager.x265_min;
tbVideoQuality.Maximum = FFmpegCLIManager.x265_max;
break;

View file

@ -118,6 +118,38 @@ public string GetFFmpegArgs()
args.Append($"-crf {VideoQuality.Clamp(FFmpegCLIManager.x265_min, FFmpegCLIManager.x265_max)} ");
}
break;
case ConverterVideoCodecs.h264_nvenc: // https://trac.ffmpeg.org/wiki/HWAccelIntro#NVENC
args.Append("-c:v h264_nvenc ");
args.Append("-preset p4 ");
args.Append("-tune hq ");
args.Append("-profile:v high ");
if (VideoQualityUseBitrate)
{
args.Append($"-b:v {VideoQualityBitrate}k ");
}
else
{
args.Append("-rc vbr ");
args.Append($"-cq {VideoQuality.Clamp(FFmpegCLIManager.x264_min, FFmpegCLIManager.x264_max)} ");
args.Append("-b:v 0 ");
}
break;
case ConverterVideoCodecs.hevc_nvenc: // https://trac.ffmpeg.org/wiki/HWAccelIntro#NVENC
args.Append("-c:v hevc_nvenc ");
args.Append("-preset p4 ");
args.Append("-tune hq ");
args.Append("-profile:v main ");
if (VideoQualityUseBitrate)
{
args.Append($"-b:v {VideoQualityBitrate}k ");
}
else
{
args.Append("-rc vbr ");
args.Append($"-cq {VideoQuality.Clamp(FFmpegCLIManager.x265_min, FFmpegCLIManager.x265_max)} ");
args.Append("-b:v 0 ");
}
break;
case ConverterVideoCodecs.vp8: // https://trac.ffmpeg.org/wiki/Encode/VP8
args.Append("-c:v libvpx ");
if (VideoQualityUseBitrate)
@ -184,6 +216,8 @@ public string GetFFmpegArgs()
{
case ConverterVideoCodecs.x264: // https://trac.ffmpeg.org/wiki/Encode/AAC
case ConverterVideoCodecs.x265:
case ConverterVideoCodecs.h264_nvenc:
case ConverterVideoCodecs.hevc_nvenc:
args.Append("-c:a aac ");
args.Append("-b:a 128k ");
break;
@ -218,6 +252,8 @@ public string GetFileExtension()
default:
case ConverterVideoCodecs.x264:
case ConverterVideoCodecs.x265:
case ConverterVideoCodecs.h264_nvenc:
case ConverterVideoCodecs.hevc_nvenc:
return "mp4";
case ConverterVideoCodecs.vp8:
case ConverterVideoCodecs.vp9:

View file

@ -88,9 +88,9 @@ public enum FFmpegVideoCodec
libx264,
[Description("H.265 / x265")]
libx265,
[Description("VP8 (WebM)")]
[Description("VP8")]
libvpx,
[Description("VP9 (WebM)")]
[Description("VP9")]
libvpx_vp9,
[Description("MPEG-4 / Xvid")]
libxvid,