From 2a008c91500028accef37568078a3a5941b298a0 Mon Sep 17 00:00:00 2001 From: autodotua Date: Wed, 30 Oct 2024 19:05:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BA=E8=BE=93=E5=87=BA=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=8D=95=E4=BD=8D=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=92=8CTooltip=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Panels/CodeArgumentsPanel.xaml | 180 ++++++++++++------ SimpleFFmpegGUI.WPF/Panels/FileIOPanel.xaml | 5 +- .../ViewModels/ArgumentDescriptions.cs | 30 +++ .../ViewModels/CodeArgumentDescriptions.cs | 34 ---- .../ViewModels/CodeArgumentsPanelViewModel.cs | 2 - 5 files changed, 157 insertions(+), 94 deletions(-) create mode 100644 SimpleFFmpegGUI.WPF/ViewModels/ArgumentDescriptions.cs delete mode 100644 SimpleFFmpegGUI.WPF/ViewModels/CodeArgumentDescriptions.cs diff --git a/SimpleFFmpegGUI.WPF/Panels/CodeArgumentsPanel.xaml b/SimpleFFmpegGUI.WPF/Panels/CodeArgumentsPanel.xaml index 5ac72bd..7281ffe 100644 --- a/SimpleFFmpegGUI.WPF/Panels/CodeArgumentsPanel.xaml +++ b/SimpleFFmpegGUI.WPF/Panels/CodeArgumentsPanel.xaml @@ -31,6 +31,11 @@ + + + + SelectedItem="{Binding VideoOutputStrategy}" + ToolTip="{Binding Source={x:Static vm:ArgumentDescriptions.VideoOutput}}" /> @@ -184,7 +190,8 @@ Grid.Row="2" Grid.Column="2" ItemsSource="{Binding ChannelOutputStrategies}" - SelectedItem="{Binding AudioOutputStrategy}" /> + SelectedItem="{Binding AudioOutputStrategy}" + ToolTip="{Binding Source={x:Static vm:ArgumentDescriptions.AudioOutput}}" /> + IsChecked="{Binding Format.EnableFormat}" + ToolTip="{Binding Source={x:Static vm:ArgumentDescriptions.Format}}" /> + TextSearch.TextPath="Extension" + ToolTip="{Binding Source={x:Static vm:ArgumentDescriptions.Format}}"> @@ -244,6 +253,8 @@ + + @@ -269,25 +280,28 @@ - @@ -440,8 +493,10 @@ - + + + @@ -451,38 +506,52 @@ - @@ -503,15 +572,16 @@ MaxLines="3" MinLines="3" Text="{Binding Extra, UpdateSourceTrigger=PropertyChanged}" - TextWrapping="Wrap" /> + TextWrapping="Wrap" + ToolTip="{Binding Source={x:Static vm:ArgumentDescriptions.Extra}}" /> + ToolTip="{Binding Source={x:Static vm:ArgumentDescriptions.SyncModifiedTime}}" /> + ToolTip="{Binding Source={x:Static vm:ArgumentDescriptions.DeleteInputFiles}}" /> diff --git a/SimpleFFmpegGUI.WPF/Panels/FileIOPanel.xaml b/SimpleFFmpegGUI.WPF/Panels/FileIOPanel.xaml index d6e102d..753f587 100644 --- a/SimpleFFmpegGUI.WPF/Panels/FileIOPanel.xaml +++ b/SimpleFFmpegGUI.WPF/Panels/FileIOPanel.xaml @@ -142,9 +142,8 @@ Text="{Binding To, Converter={StaticResource TimeSpanMMConverter}}" ToolTip="{StaticResource tooltip}" /> - + + diff --git a/SimpleFFmpegGUI.WPF/ViewModels/ArgumentDescriptions.cs b/SimpleFFmpegGUI.WPF/ViewModels/ArgumentDescriptions.cs new file mode 100644 index 0000000..184f57a --- /dev/null +++ b/SimpleFFmpegGUI.WPF/ViewModels/ArgumentDescriptions.cs @@ -0,0 +1,30 @@ +namespace SimpleFFmpegGUI.WPF.ViewModels +{ + public static class ArgumentDescriptions + { + + public static string AspectRatio => "视频宽度与高度的比例。可以输入宽:高或宽/高的数值。"; + public static string VideoAverageBitrate => "整个视频部分的目标比特率。平均码率可以帮助保持视频文件大小在一个合理的范围内。"; + public static string AudioAverageBitrate => "音频文件的目标比特率。平均码率可以帮助保持音频部分大小在一个合理的范围内。"; + public static string VideoCode => "视频的编码格式。压制速度方面,H264>H265≈VP9>AV1 (SVT)>AV1 (aom);同等码率的画质方面,H264 "一个用于控制视频质量的选项,特别是在使用可变比特率 (VBR) 编码时。CRF 值越小,画质越好。不同编码格式的CRF质检没有参考性。CRF 是一个相对恒定的质量模式,适用于在保证一定视觉质量的同时,让编码器自动调整输出比特率。"; + public static string FPS => "每秒显示的画面数量。较高的帧率可以使动作看起来更加流畅,但也可能导致较大的文件大小。"; + public static string MaxBitrate => "编码过程中允许达到的最大比特率。这有助于在网络带宽有限的情况下防止数据过载。当视频复杂度突然增加时,可能会短暂地达到这个上限。"; + public static string MaxBitrateBuffer => "用于控制视频码率超过最大码率的时间限制。值越大允许在遇到复杂场景时有更长时间超过视频的最大码率。"; + public static string PixelFormat => "描述了单个像素如何在数字信号中表示。常见的格式包括 YUV420p, YUV422p, YUV444p 等,它们决定了色彩采样率以及颜色深度等信息。"; + public static string Preset => "表示编码的速度与压缩效率之间的权衡。值越小,压制速度越慢,单位大小的视频片段质量越高;值越大,压制速度越快,单位大小的视频片段质量越低"; + public static string Size => "视频图像的尺寸。640:480表示640×480;640:-1表示宽度为640,高度自动调节;640:-2表示宽度为640,高度自动调节且调整到偶数;iw/2:ih/2表示视频分辨率缩放到原来的一半。"; + public static string TwoPass => "一种在编码视频时使用的策略,目的是为了更精确地控制视频的比特率,并且优化最终输出的视频质量。可以获得更好的比特率管理和视频质量,尤其是在恒定比特率(CBR)模式下。然而,这种方法的缺点是需要两次编码过程,因此会消耗更多的时间。"; + public static string AudioCode => "音频编码格式"; + public static string AudioBitrate => "音频比特率,单位为 kbps。较高的音频比特率通常意味着更好的音质,但也会导致更大的文件体积。"; + public static string SampleRate => "每秒钟对音频信号进行数字化采样的次数,单位通常是赫兹 (Hz)。常见的采样率有 44.1 kHz(用于 CD )、48 kHz(DVD和网络视频)、以及 96 kHz等。采样率越高,音频信号的频率范围就越宽,理论上能够捕捉到的声音细节也就越多,音质也就越好。"; + public static string Format => "多媒体文件的封装格式,它可以包含一个或多个音频、视频、字幕轨道以及其他元数据。常用的有mp4(简单容器)、mkv(复杂容器)。容器的主要功能是将不同类型的媒体数据整合在一起,并提供一种方式来描述这些数据是如何组织和同步的。"; + public static string VideoOutput => "重新编码表示会对视频流重新计算,转码到新的编码、码率、分辨率等。复制表示仅复制数据,不重新计算,速度很快。不导出表示最终文件中不包含画面,只包含音频。"; + public static string AudioOutput => "重新编码表示会对音频流重新计算,转码到新的编码、码率、分辨率等。复制表示仅复制数据,不重新计算。不导出表示最终文件中不包含音频,只包含画面。"; + public static string Extra => "自定义的FFmpeg输出参数,这些参数将附加在输入文件后、输出文件前。"; + public static string SyncModifiedTime => "将输出文件的修改时间设置为最后一个输入文件的修改时间。"; + public static string DeleteInputFiles => "在处理完成后删除所有输入文件(优先删除到回收站)。"; + + + } +} \ No newline at end of file diff --git a/SimpleFFmpegGUI.WPF/ViewModels/CodeArgumentDescriptions.cs b/SimpleFFmpegGUI.WPF/ViewModels/CodeArgumentDescriptions.cs deleted file mode 100644 index 1f4b114..0000000 --- a/SimpleFFmpegGUI.WPF/ViewModels/CodeArgumentDescriptions.cs +++ /dev/null @@ -1,34 +0,0 @@ -namespace SimpleFFmpegGUI.WPF.ViewModels -{ - public class CodeArgumentDescriptions - { - - public string AspectRatio => "视频宽度与高度的比例。可以输入宽:高或宽/高的数值。"; - public string AverageBitrate => "整个视频文件的目标比特率。平均码率可以帮助保持视频文件大小在一个合理的范围内,同时提供较为一致的质量。"; - public string VideoCode => "视频的编码格式。压制速度方面,H264>H265≈VP9>AV1 (SVT)>AV1 (aom);同等码率的画质方面,H264 "一个用于控制视频质量的选项,特别是在使用可变比特率 (VBR) 编码时。CRF 值越小,画质越好。不同编码格式的CRF质检没有参考性。CRF 是一个相对恒定的质量模式,适用于在保证一定视觉质量的同时,让编码器自动调整输出比特率。"; - public string FPS => "每秒显示的画面数量。较高的帧率可以使动作看起来更加流畅,但也可能导致较大的文件大小。"; - - public string MaxBitrate => "编码过程中允许达到的最大比特率。这有助于在网络带宽有限的情况下防止数据过载。当视频复杂度突然增加时,可能会短暂地达到这个上限。"; - - public string MaxBitrateBuffer => "用于控制视频码率超过最大码率的时间限制。值越大允许在遇到复杂场景时有更长时间超过视频的最大码率。"; - - public string PixelFormat => "描述了单个像素如何在数字信号中表示。常见的格式包括 YUV420p, YUV422p, YUV444p 等,它们决定了色彩采样率以及颜色深度等信息。"; - - public string Preset => "表示编码的速度与压缩效率之间的权衡。值越小,压制速度越慢,单位大小的视频片段质量越高;值越大,压制速度越快,单位大小的视频片段质量越低"; - - public string Size => "视频图像的尺寸。640:480表示640×480;640:-1表示宽度为640,高度自动调节;640:-2表示宽度为640,高度自动调节且调整到偶数;iw/2:ih/2表示视频分辨率缩放到原来的一半。"; - - public string TwoPass => "一种在编码视频时使用的策略,目的是为了更精确地控制视频的比特率,并且优化最终输出的视频质量。可以获得更好的比特率管理和视频质量,尤其是在恒定比特率(CBR)模式下。然而,这种方法的缺点是需要两次编码过程,因此会消耗更多的时间。"; - - public string AudioCode => "音频编码格式"; - public string AudioBitrate => "音频比特率,单位为 kbps。较高的音频比特率通常意味着更好的音质,但也会导致更大的文件体积。"; - public string SampleRate => "每秒钟对音频信号进行数字化采样的次数,单位通常是赫兹 (Hz)。常见的采样率有 44.1 kHz(用于 CD )、48 kHz(DVD和网络视频)、以及 96 kHz等。采样率越高,音频信号的频率范围就越宽,理论上能够捕捉到的声音细节也就越多,音质也就越好。"; - public string Format => "多媒体文件的封装格式,它可以包含一个或多个音频、视频、字幕轨道以及其他元数据。常用的有mp4(简单容器)、mkv(复杂容器)。容器的主要功能是将不同类型的媒体数据整合在一起,并提供一种方式来描述这些数据是如何组织和同步的。"; - public string VideoOutput => "重新编码表示会对视频流重新计算,转码到新的编码、码率、分辨率等。复制表示仅复制数据,不重新计算,速度很快。不导出表示最终文件中不包含画面,只包含音频。"; - public string AudioOutput => "重新编码表示会对音频流重新计算,转码到新的编码、码率、分辨率等。复制表示仅复制数据,不重新计算。不导出表示最终文件中不包含音频,只包含画面。"; - public string Extra => "自定义的FFmpeg输出参数,这些参数将附加在输入文件后、输出文件前。"; - public string SyncModifiedTime => "将输出文件的修改时间设置为最后一个输入文件的修改时间。"; - public string DeleteInputFiles => "在处理完成后删除所有输入文件(优先删除到回收站)。"; - } -} \ No newline at end of file diff --git a/SimpleFFmpegGUI.WPF/ViewModels/CodeArgumentsPanelViewModel.cs b/SimpleFFmpegGUI.WPF/ViewModels/CodeArgumentsPanelViewModel.cs index ce15237..ceae111 100644 --- a/SimpleFFmpegGUI.WPF/ViewModels/CodeArgumentsPanelViewModel.cs +++ b/SimpleFFmpegGUI.WPF/ViewModels/CodeArgumentsPanelViewModel.cs @@ -65,8 +65,6 @@ public CodeArgumentsPanelViewModel(PresetManager presetManager) public OutputArguments Arguments { get; set; } - public CodeArgumentDescriptions Descriptions { get; } = new CodeArgumentDescriptions(); - public IEnumerable AspectRatios { get; } = new[] { "16:9", "4:3", "1:1", "3:4", "16:9", "2.35" }; public AudioArgumentsViewModel Audio