SHA256
Add Custom Extension in Advanced Config
This commit is contained in:
1 parent
bdc8b4abb0
commit
c3de49fff5
3 files changed
+35
-24
No files matched your search
+9
-18
@@ -500,12 +500,9 @@ namespace ADOFAIRenderer.Core
|
|||||||
|
|
||||||
var renderFPS = Configuration.RenderFPS;
|
var renderFPS = Configuration.RenderFPS;
|
||||||
var videoFPS = Configuration.VideoFPS;
|
var videoFPS = Configuration.VideoFPS;
|
||||||
|
|
||||||
var selectedCodec = Configuration.VideoConfig.Codec;
|
|
||||||
var ext = GetOutputExtension(selectedCodec);
|
|
||||||
|
|
||||||
var startTime = DateTime.Now;
|
var startTime = DateTime.Now;
|
||||||
var fileName = startTime.ToString("yyyy-MM-dd HH-mm-ss") + ext;
|
var fileName = startTime.ToString("yyyy-MM-dd HH-mm-ss") + $".{Configuration.AdvancedConfig.Extension}";
|
||||||
_currentOutPath = Path.Combine(MelonEnvironment.GameRootDirectory, "Render", fileName);
|
_currentOutPath = Path.Combine(MelonEnvironment.GameRootDirectory, "Render", fileName);
|
||||||
|
|
||||||
if (RenderContext.OutputPath != null) _currentOutPath = RenderContext.OutputPath;
|
if (RenderContext.OutputPath != null) _currentOutPath = RenderContext.OutputPath;
|
||||||
@@ -520,7 +517,7 @@ namespace ADOFAIRenderer.Core
|
|||||||
Width = Configuration.RenderWidth,
|
Width = Configuration.RenderWidth,
|
||||||
Height = Configuration.RenderHeight,
|
Height = Configuration.RenderHeight,
|
||||||
FPS = effectiveVideoFps,
|
FPS = effectiveVideoFps,
|
||||||
Codec = selectedCodec,
|
Codec = Configuration.VideoConfig.Codec,
|
||||||
Mode = Configuration.VideoConfig.RateControlMode,
|
Mode = Configuration.VideoConfig.RateControlMode,
|
||||||
QualityValue = Configuration.VideoConfig.QP,
|
QualityValue = Configuration.VideoConfig.QP,
|
||||||
TargetBitrate = Configuration.VideoConfig.Bitrate,
|
TargetBitrate = Configuration.VideoConfig.Bitrate,
|
||||||
@@ -832,19 +829,13 @@ namespace ADOFAIRenderer.Core
|
|||||||
Cursor.visible = true;
|
Cursor.visible = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetOutputExtension(Codec codec)
|
private static readonly Dictionary<Codec, AVCodecID> AudioCodecMatch = new()
|
||||||
{
|
{
|
||||||
return codec switch
|
[Codec.H264] = AVCodecID.AV_CODEC_ID_AAC,
|
||||||
{
|
[Codec.H265] = AVCodecID.AV_CODEC_ID_AAC,
|
||||||
Codec.AV1 or Codec.VP9 => ".webm",
|
[Codec.VP9] = AVCodecID.AV_CODEC_ID_OPUS,
|
||||||
Codec.VVC => ".mkv",
|
[Codec.AV1] = AVCodecID.AV_CODEC_ID_OPUS,
|
||||||
_ => ".mp4"
|
[Codec.VVC] = AVCodecID.AV_CODEC_ID_OPUS
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
private AVCodecID GetAudioCodecId(string ext)
|
|
||||||
{
|
|
||||||
return ext == ".mp4" ? AVCodecID.AV_CODEC_ID_AAC : AVCodecID.AV_CODEC_ID_OPUS;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using ADOFAIRenderer.Util.FFmpeg;
|
using ADOFAIRenderer.Util.FFmpeg;
|
||||||
|
|
||||||
namespace ADOFAIRenderer.Data
|
namespace ADOFAIRenderer.Data
|
||||||
{
|
{
|
||||||
|
[SuppressMessage("ReSharper", "RedundantDefaultMemberInitializer")]
|
||||||
public class RenderConfig
|
public class RenderConfig
|
||||||
{
|
{
|
||||||
public double RenderFPS { get; set; }
|
public double RenderFPS { get; set; }
|
||||||
@@ -15,14 +17,16 @@ namespace ADOFAIRenderer.Data
|
|||||||
public AdvancedConfig AdvancedConfig { get; set; } = new();
|
public AdvancedConfig AdvancedConfig { get; set; } = new();
|
||||||
|
|
||||||
public double DelayAfterEnd { get; set; }
|
public double DelayAfterEnd { get; set; }
|
||||||
public bool ShowJudgementText { get; set; }
|
public bool ShowJudgementText { get; set; } = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[SuppressMessage("ReSharper", "RedundantDefaultMemberInitializer")]
|
||||||
public class AdvancedConfig
|
public class AdvancedConfig
|
||||||
{
|
{
|
||||||
public int? RandomSeed { get; set; } = null;
|
public int? RandomSeed { get; set; } = null;
|
||||||
public bool ProcessAudio { get; set; } = true;
|
public bool ProcessAudio { get; set; } = true;
|
||||||
public bool NonTile { get; set; } = false;
|
public bool NonTile { get; set; } = false;
|
||||||
|
public string Extension { get; set; } = "mkv";
|
||||||
}
|
}
|
||||||
|
|
||||||
public class VideoEncodingConfig
|
public class VideoEncodingConfig
|
||||||
|
|||||||
@@ -123,7 +123,8 @@ namespace ADOFAIRenderer.UI
|
|||||||
{
|
{
|
||||||
ProcessAudio = config.AdvancedConfig.ProcessAudio,
|
ProcessAudio = config.AdvancedConfig.ProcessAudio,
|
||||||
RandomSeed = config.AdvancedConfig.RandomSeed,
|
RandomSeed = config.AdvancedConfig.RandomSeed,
|
||||||
NonTile = config.AdvancedConfig.NonTile
|
NonTile = config.AdvancedConfig.NonTile,
|
||||||
|
Extension = config.AdvancedConfig.Extension
|
||||||
};
|
};
|
||||||
|
|
||||||
if (_advancedConfigContainer != null && _root.Contains(_advancedConfigContainer))
|
if (_advancedConfigContainer != null && _root.Contains(_advancedConfigContainer))
|
||||||
@@ -160,7 +161,21 @@ namespace ADOFAIRenderer.UI
|
|||||||
titleRow.Add(titleLabel);
|
titleRow.Add(titleLabel);
|
||||||
_advancedConfigContainer.Add(titleRow);
|
_advancedConfigContainer.Add(titleRow);
|
||||||
|
|
||||||
// 2. 오디오 처리 로우
|
// 2. 확장자 로우
|
||||||
|
var extensionRow = CreateRow();
|
||||||
|
var extensionLabel = CreateFormLabel("확장자");
|
||||||
|
var extensionChoices = new List<string> { "mkv", "mp4", "mov", "webm", "avi" };
|
||||||
|
var currentExt = string.IsNullOrWhiteSpace(tempConfig.Extension) ? "mkv" : tempConfig.Extension.TrimStart('.').ToLower();
|
||||||
|
if (!extensionChoices.Contains(currentExt))
|
||||||
|
{
|
||||||
|
extensionChoices.Add(currentExt);
|
||||||
|
}
|
||||||
|
var extensionDropdown = new DropdownField(extensionChoices, currentExt) { name = "AdvancedExtension" };
|
||||||
|
extensionRow.Add(extensionLabel);
|
||||||
|
extensionRow.Add(extensionDropdown);
|
||||||
|
_advancedConfigContainer.Add(extensionRow);
|
||||||
|
|
||||||
|
// 3. 오디오 처리 로우
|
||||||
var processAudioRow = CreateRow();
|
var processAudioRow = CreateRow();
|
||||||
var processAudioLabel = CreateFormLabel("오디오 처리");
|
var processAudioLabel = CreateFormLabel("오디오 처리");
|
||||||
var processAudioToggle = new Toggle { name = "AdvancedProcessAudioToggle", label = "", value = tempConfig.ProcessAudio };
|
var processAudioToggle = new Toggle { name = "AdvancedProcessAudioToggle", label = "", value = tempConfig.ProcessAudio };
|
||||||
@@ -168,7 +183,7 @@ namespace ADOFAIRenderer.UI
|
|||||||
processAudioRow.Add(processAudioToggle);
|
processAudioRow.Add(processAudioToggle);
|
||||||
_advancedConfigContainer.Add(processAudioRow);
|
_advancedConfigContainer.Add(processAudioRow);
|
||||||
|
|
||||||
// 3. 논타일 모드 로우
|
// 4. 논타일 모드 로우
|
||||||
var nonTileRow = CreateRow();
|
var nonTileRow = CreateRow();
|
||||||
var nonTileLabel = CreateFormLabel("논타일 모드");
|
var nonTileLabel = CreateFormLabel("논타일 모드");
|
||||||
var nonTileToggle = new Toggle { name = "AdvancedNonTileToggle", label = "", value = tempConfig.NonTile };
|
var nonTileToggle = new Toggle { name = "AdvancedNonTileToggle", label = "", value = tempConfig.NonTile };
|
||||||
@@ -176,7 +191,7 @@ namespace ADOFAIRenderer.UI
|
|||||||
nonTileRow.Add(nonTileToggle);
|
nonTileRow.Add(nonTileToggle);
|
||||||
_advancedConfigContainer.Add(nonTileRow);
|
_advancedConfigContainer.Add(nonTileRow);
|
||||||
|
|
||||||
// 4. 랜덤 시드 로우
|
// 5. 랜덤 시드 로우
|
||||||
var randomSeedRow = CreateRow();
|
var randomSeedRow = CreateRow();
|
||||||
var randomSeedLabel = CreateFormLabel("랜덤 시드 (입력 선택)");
|
var randomSeedLabel = CreateFormLabel("랜덤 시드 (입력 선택)");
|
||||||
var randomSeedField = new TextField { name = "AdvancedRandomSeed", label = "", value = tempConfig.RandomSeed?.ToString() ?? string.Empty };
|
var randomSeedField = new TextField { name = "AdvancedRandomSeed", label = "", value = tempConfig.RandomSeed?.ToString() ?? string.Empty };
|
||||||
@@ -194,7 +209,7 @@ namespace ADOFAIRenderer.UI
|
|||||||
randomSeedRow.Add(randomSeedField);
|
randomSeedRow.Add(randomSeedField);
|
||||||
_advancedConfigContainer.Add(randomSeedRow);
|
_advancedConfigContainer.Add(randomSeedRow);
|
||||||
|
|
||||||
// 5. 제어 버튼 로우 (취소 / 저장)
|
// 6. 제어 버튼 로우 (취소 / 저장)
|
||||||
var buttonRow = CreateRow();
|
var buttonRow = CreateRow();
|
||||||
var cancelBtn = new Button { text = "취소" };
|
var cancelBtn = new Button { text = "취소" };
|
||||||
var saveBtn = new Button { text = "저장" };
|
var saveBtn = new Button { text = "저장" };
|
||||||
@@ -212,6 +227,7 @@ namespace ADOFAIRenderer.UI
|
|||||||
|
|
||||||
saveBtn.RegisterCallback<ClickEvent>(_ =>
|
saveBtn.RegisterCallback<ClickEvent>(_ =>
|
||||||
{
|
{
|
||||||
|
tempConfig.Extension = extensionDropdown.value;
|
||||||
tempConfig.ProcessAudio = processAudioToggle.value;
|
tempConfig.ProcessAudio = processAudioToggle.value;
|
||||||
tempConfig.NonTile = nonTileToggle.value;
|
tempConfig.NonTile = nonTileToggle.value;
|
||||||
if (int.TryParse(randomSeedField.value?.Trim(), out var seed))
|
if (int.TryParse(randomSeedField.value?.Trim(), out var seed))
|
||||||
|
|||||||
Reference in new issue
Block a user