mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-01 09:47:22 +13:00
Added NVENC support to video converter tool
This commit is contained in:
parent
56ac48d9da
commit
459e2ee357
4 changed files with 46 additions and 2 deletions
|
@ -43,6 +43,10 @@ public enum ConverterVideoCodecs
|
||||||
x264,
|
x264,
|
||||||
[Description("H.265 / x265")]
|
[Description("H.265 / x265")]
|
||||||
x265,
|
x265,
|
||||||
|
[Description("H.264 / NVENC")]
|
||||||
|
h264_nvenc,
|
||||||
|
[Description("HEVC / NVENC")]
|
||||||
|
hevc_nvenc,
|
||||||
[Description("VP8")]
|
[Description("VP8")]
|
||||||
vp8,
|
vp8,
|
||||||
[Description("VP9")]
|
[Description("VP9")]
|
||||||
|
|
|
@ -93,6 +93,8 @@ private void UpdateOptions()
|
||||||
{
|
{
|
||||||
case ConverterVideoCodecs.x264:
|
case ConverterVideoCodecs.x264:
|
||||||
case ConverterVideoCodecs.x265:
|
case ConverterVideoCodecs.x265:
|
||||||
|
case ConverterVideoCodecs.h264_nvenc:
|
||||||
|
case ConverterVideoCodecs.hevc_nvenc:
|
||||||
case ConverterVideoCodecs.vp8:
|
case ConverterVideoCodecs.vp8:
|
||||||
case ConverterVideoCodecs.vp9:
|
case ConverterVideoCodecs.vp9:
|
||||||
case ConverterVideoCodecs.av1:
|
case ConverterVideoCodecs.av1:
|
||||||
|
@ -110,10 +112,12 @@ private void UpdateOptions()
|
||||||
switch (Options.VideoCodec)
|
switch (Options.VideoCodec)
|
||||||
{
|
{
|
||||||
case ConverterVideoCodecs.x264:
|
case ConverterVideoCodecs.x264:
|
||||||
|
case ConverterVideoCodecs.h264_nvenc:
|
||||||
tbVideoQuality.Minimum = FFmpegCLIManager.x264_min;
|
tbVideoQuality.Minimum = FFmpegCLIManager.x264_min;
|
||||||
tbVideoQuality.Maximum = FFmpegCLIManager.x264_max;
|
tbVideoQuality.Maximum = FFmpegCLIManager.x264_max;
|
||||||
break;
|
break;
|
||||||
case ConverterVideoCodecs.x265:
|
case ConverterVideoCodecs.x265:
|
||||||
|
case ConverterVideoCodecs.hevc_nvenc:
|
||||||
tbVideoQuality.Minimum = FFmpegCLIManager.x265_min;
|
tbVideoQuality.Minimum = FFmpegCLIManager.x265_min;
|
||||||
tbVideoQuality.Maximum = FFmpegCLIManager.x265_max;
|
tbVideoQuality.Maximum = FFmpegCLIManager.x265_max;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -118,6 +118,38 @@ public string GetFFmpegArgs()
|
||||||
args.Append($"-crf {VideoQuality.Clamp(FFmpegCLIManager.x265_min, FFmpegCLIManager.x265_max)} ");
|
args.Append($"-crf {VideoQuality.Clamp(FFmpegCLIManager.x265_min, FFmpegCLIManager.x265_max)} ");
|
||||||
}
|
}
|
||||||
break;
|
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
|
case ConverterVideoCodecs.vp8: // https://trac.ffmpeg.org/wiki/Encode/VP8
|
||||||
args.Append("-c:v libvpx ");
|
args.Append("-c:v libvpx ");
|
||||||
if (VideoQualityUseBitrate)
|
if (VideoQualityUseBitrate)
|
||||||
|
@ -184,6 +216,8 @@ public string GetFFmpegArgs()
|
||||||
{
|
{
|
||||||
case ConverterVideoCodecs.x264: // https://trac.ffmpeg.org/wiki/Encode/AAC
|
case ConverterVideoCodecs.x264: // https://trac.ffmpeg.org/wiki/Encode/AAC
|
||||||
case ConverterVideoCodecs.x265:
|
case ConverterVideoCodecs.x265:
|
||||||
|
case ConverterVideoCodecs.h264_nvenc:
|
||||||
|
case ConverterVideoCodecs.hevc_nvenc:
|
||||||
args.Append("-c:a aac ");
|
args.Append("-c:a aac ");
|
||||||
args.Append("-b:a 128k ");
|
args.Append("-b:a 128k ");
|
||||||
break;
|
break;
|
||||||
|
@ -218,6 +252,8 @@ public string GetFileExtension()
|
||||||
default:
|
default:
|
||||||
case ConverterVideoCodecs.x264:
|
case ConverterVideoCodecs.x264:
|
||||||
case ConverterVideoCodecs.x265:
|
case ConverterVideoCodecs.x265:
|
||||||
|
case ConverterVideoCodecs.h264_nvenc:
|
||||||
|
case ConverterVideoCodecs.hevc_nvenc:
|
||||||
return "mp4";
|
return "mp4";
|
||||||
case ConverterVideoCodecs.vp8:
|
case ConverterVideoCodecs.vp8:
|
||||||
case ConverterVideoCodecs.vp9:
|
case ConverterVideoCodecs.vp9:
|
||||||
|
|
|
@ -88,9 +88,9 @@ public enum FFmpegVideoCodec
|
||||||
libx264,
|
libx264,
|
||||||
[Description("H.265 / x265")]
|
[Description("H.265 / x265")]
|
||||||
libx265,
|
libx265,
|
||||||
[Description("VP8 (WebM)")]
|
[Description("VP8")]
|
||||||
libvpx,
|
libvpx,
|
||||||
[Description("VP9 (WebM)")]
|
[Description("VP9")]
|
||||||
libvpx_vp9,
|
libvpx_vp9,
|
||||||
[Description("MPEG-4 / Xvid")]
|
[Description("MPEG-4 / Xvid")]
|
||||||
libxvid,
|
libxvid,
|
||||||
|
|
Loading…
Reference in a new issue