diff --git a/Spine/Exporters/VideoExporter.cs b/Spine/Exporters/VideoExporter.cs index c3755dd..e1bb672 100644 --- a/Spine/Exporters/VideoExporter.cs +++ b/Spine/Exporters/VideoExporter.cs @@ -55,6 +55,21 @@ namespace Spine.Exporters } protected float _fps = 24; + public float Speed + { + get => _speed; + set + { + if (_speed <= 0) + { + _logger.Warn("Omit invalid speed: {0}", value); + return; + } + _speed = value; + } + } + protected float _speed = 1f; + /// /// 是否保留最后一帧 /// @@ -92,7 +107,7 @@ namespace Spine.Exporters // 导出完整帧 for (int i = 0; i < total; i++) { - foreach (var spine in spines) spine.Update(delta); + foreach (var spine in spines) spine.Update(delta * _speed); yield return GetFrame(spines); } @@ -100,7 +115,7 @@ namespace Spine.Exporters if (hasFinal) { // XXX: 此处还是按照完整的一帧时长进行更新, 也许可以只更新准确的最后一帧时长 - foreach (var spine in spines) spine.Update(delta); + foreach (var spine in spines) spine.Update(delta * _speed); yield return GetFrame(spines); } } diff --git a/SpineViewer/Resources/Strings/en.xaml b/SpineViewer/Resources/Strings/en.xaml index c9cc4d0..4f4399d 100644 --- a/SpineViewer/Resources/Strings/en.xaml +++ b/SpineViewer/Resources/Strings/en.xaml @@ -167,6 +167,8 @@ Export duration; if less than 0, the maximum duration of all animations in all models will be used during export. FPS + Export Speed + Export speed factor; only affects the animation speed of the model, not the export duration or frame rate. Keep Last Frame When keeping the last frame, animation is smoother but frame count may be one higher diff --git a/SpineViewer/Resources/Strings/ja.xaml b/SpineViewer/Resources/Strings/ja.xaml index cce1f50..86dcaf9 100644 --- a/SpineViewer/Resources/Strings/ja.xaml +++ b/SpineViewer/Resources/Strings/ja.xaml @@ -167,6 +167,8 @@ エクスポート時間。0 未満の場合、エクスポート時にすべてのモデルのすべてのアニメーションの最大時間が使用されます。 FPS + エクスポート速度 + エクスポート速度係数。モデルの動作速度のみに影響し、エクスポート時間やフレームレートなどには影響しません。 最後のフレームを保持 最後のフレームを保持すると、アニメーションはより連続して見えますが、フレーム数が予想より1フレーム多くなる可能性があります diff --git a/SpineViewer/Resources/Strings/zh.xaml b/SpineViewer/Resources/Strings/zh.xaml index af3f2c2..2a3eab0 100644 --- a/SpineViewer/Resources/Strings/zh.xaml +++ b/SpineViewer/Resources/Strings/zh.xaml @@ -167,6 +167,8 @@ 导出时长,如果小于 0,则在导出时使用所有模型所有动画的最大时长 帧率 + 导出速度 + 导出速度因子, 仅影响模型的动作速度, 不影响导出时长和帧率等参数 保留最后一帧 当设置保留最后一帧时,动图会更为连贯,但是帧数可能比预期帧数多 1 diff --git a/SpineViewer/ViewModels/Exporters/CustomFFmpegExporterViewModel.cs b/SpineViewer/ViewModels/Exporters/CustomFFmpegExporterViewModel.cs index c31f8c2..bb90b00 100644 --- a/SpineViewer/ViewModels/Exporters/CustomFFmpegExporterViewModel.cs +++ b/SpineViewer/ViewModels/Exporters/CustomFFmpegExporterViewModel.cs @@ -64,6 +64,7 @@ namespace SpineViewer.ViewModels.Exporters { BackgroundColor = new(_backgroundColor.R, _backgroundColor.G, _backgroundColor.B, _backgroundColor.A), Fps = _fps, + Speed = _speed, KeepLast = _keepLast, Format = _format, Codec = _codec, diff --git a/SpineViewer/ViewModels/Exporters/FFmpegVideoExporterViewModel.cs b/SpineViewer/ViewModels/Exporters/FFmpegVideoExporterViewModel.cs index 37471ff..5af1e78 100644 --- a/SpineViewer/ViewModels/Exporters/FFmpegVideoExporterViewModel.cs +++ b/SpineViewer/ViewModels/Exporters/FFmpegVideoExporterViewModel.cs @@ -54,6 +54,7 @@ namespace SpineViewer.ViewModels.Exporters { BackgroundColor = new(_backgroundColor.R, _backgroundColor.G, _backgroundColor.B, _backgroundColor.A), Fps = _fps, + Speed = _speed, KeepLast = _keepLast, Format = _format, Loop = _loop, diff --git a/SpineViewer/ViewModels/Exporters/FrameSequenceExporterViewModel.cs b/SpineViewer/ViewModels/Exporters/FrameSequenceExporterViewModel.cs index fab8999..ac91c91 100644 --- a/SpineViewer/ViewModels/Exporters/FrameSequenceExporterViewModel.cs +++ b/SpineViewer/ViewModels/Exporters/FrameSequenceExporterViewModel.cs @@ -34,6 +34,7 @@ namespace SpineViewer.ViewModels.Exporters { BackgroundColor = new(_backgroundColor.R, _backgroundColor.G, _backgroundColor.B, _backgroundColor.A), Fps = _fps, + Speed = _speed, KeepLast = _keepLast }; diff --git a/SpineViewer/ViewModels/Exporters/VideoExporterViewModel.cs b/SpineViewer/ViewModels/Exporters/VideoExporterViewModel.cs index 43353ec..460ef92 100644 --- a/SpineViewer/ViewModels/Exporters/VideoExporterViewModel.cs +++ b/SpineViewer/ViewModels/Exporters/VideoExporterViewModel.cs @@ -16,6 +16,9 @@ namespace SpineViewer.ViewModels.Exporters public uint Fps { get => _fps; set => SetProperty(ref _fps, Math.Max(1, value)); } protected uint _fps = 30; + public float Speed { get => _speed; set => SetProperty(ref _speed, Math.Clamp(value, 0.001f, 1000f)); } + protected float _speed = 1f; + public bool KeepLast { get => _keepLast; set => SetProperty(ref _keepLast, value); } protected bool _keepLast = true; } diff --git a/SpineViewer/Views/ExporterDialogs/CustomFFmpegExporterDialog.xaml b/SpineViewer/Views/ExporterDialogs/CustomFFmpegExporterDialog.xaml index 66a0a53..0cf7b22 100644 --- a/SpineViewer/Views/ExporterDialogs/CustomFFmpegExporterDialog.xaml +++ b/SpineViewer/Views/ExporterDialogs/CustomFFmpegExporterDialog.xaml @@ -67,6 +67,7 @@ + @@ -122,38 +123,42 @@