Skip to content

Commit 5712cab

Browse files
committed
fix: escape 带引号的情况
1 parent d73adf0 commit 5712cab

5 files changed

Lines changed: 30 additions & 13 deletions

File tree

AquaMai

MaiChartManager/Utils/Audio.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ private static MemoryStream ConvertMp3ToWavViaFfmpeg(Stream src)
103103
}
104104

105105
var conversion = FFmpeg.Conversions.New()
106-
.AddParameter("-i " + inputPath.Escape())
106+
.AddParameter("-i " + FFmpegHelper.Escape(inputPath))
107107
.AddParameter("-c:a pcm_s16le") // 转为16-bit little-endian PCM
108108
.SetOutput(outputPath)
109109
.SetOverwriteOutput(true);

MaiChartManager/Utils/AudioConvert.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public static void ConvertWavPathToMp3Stream(string wavPath, Stream mp3Stream, I
8282
Directory.CreateDirectory(StaticSettings.tempPath);
8383

8484
var conversion = FFmpeg.Conversions.New()
85-
.AddParameter($"-i " + wavPath.Escape());
85+
.AddParameter($"-i " + FFmpegHelper.Escape(wavPath));
8686

8787
if (tagData != null)
8888
{
@@ -91,15 +91,15 @@ public static void ConvertWavPathToMp3Stream(string wavPath, Stream mp3Stream, I
9191
// 把专辑封面写到临时文件,然后让ffmpeg把它嵌入mp3
9292
albumArtPath = Path.Combine(StaticSettings.tempPath, $"ConvertToMp3_{Guid.NewGuid():N}.png");
9393
File.WriteAllBytes(albumArtPath, tagData.AlbumArt);
94-
conversion.AddParameter($"-i {albumArtPath.Escape()}");
94+
conversion.AddParameter($"-i {FFmpegHelper.Escape(albumArtPath)}");
9595
} // 顺序不能换!这个必须在第一个,因为-i必须在任何其他参数之前。
96-
if (!string.IsNullOrEmpty(tagData.Title)) conversion.AddParameter($"-metadata title=" + tagData.Title.Escape());
97-
if (!string.IsNullOrEmpty(tagData.Artist)) conversion.AddParameter($"-metadata artist=" + tagData.Artist.Escape());
98-
if (!string.IsNullOrEmpty(tagData.Album)) conversion.AddParameter($"-metadata album=" + tagData.Album.Escape());
99-
if (!string.IsNullOrEmpty(tagData.Year)) conversion.AddParameter($"-metadata date=" + tagData.Year.Escape());
100-
if (!string.IsNullOrEmpty(tagData.Comment)) conversion.AddParameter($"-metadata comment=" + tagData.Comment.Escape());
101-
if (!string.IsNullOrEmpty(tagData.Genre)) conversion.AddParameter($"-metadata genre=" + tagData.Genre.Escape());
102-
if (!string.IsNullOrEmpty(tagData.Track)) conversion.AddParameter($"-metadata track=" + tagData.Track.Escape());
96+
if (!string.IsNullOrEmpty(tagData.Title)) conversion.AddParameter($"-metadata title=" + FFmpegHelper.Escape(tagData.Title));
97+
if (!string.IsNullOrEmpty(tagData.Artist)) conversion.AddParameter($"-metadata artist=" + FFmpegHelper.Escape(tagData.Artist));
98+
if (!string.IsNullOrEmpty(tagData.Album)) conversion.AddParameter($"-metadata album=" + FFmpegHelper.Escape(tagData.Album));
99+
if (!string.IsNullOrEmpty(tagData.Year)) conversion.AddParameter($"-metadata date=" + FFmpegHelper.Escape(tagData.Year));
100+
if (!string.IsNullOrEmpty(tagData.Comment)) conversion.AddParameter($"-metadata comment=" + FFmpegHelper.Escape(tagData.Comment));
101+
if (!string.IsNullOrEmpty(tagData.Genre)) conversion.AddParameter($"-metadata genre=" + FFmpegHelper.Escape(tagData.Genre));
102+
if (!string.IsNullOrEmpty(tagData.Track)) conversion.AddParameter($"-metadata track=" + FFmpegHelper.Escape(tagData.Track));
103103
}
104104

105105
conversion.AddParameter("-c:a libmp3lame -b:a 256k"); // 把wav编码为256kbps的LAME mp3
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System;
2+
3+
namespace MaiChartManager.Utils;
4+
5+
public static class FFmpegHelper
6+
{
7+
/// <summary>
8+
/// 将字符串转义后用双引号包裹,用于安全地拼接 ffmpeg 参数。
9+
/// 与 Xabe.FFmpeg 自带的 Escape() 不同,这里会正确转义内容中的反斜杠和双引号。
10+
/// </summary>
11+
public static string? Escape(string? value)
12+
{
13+
if (value == null) return value;
14+
return "\"" + value.Replace("\\", "\\\\").Replace("\"", "\\\"") + "\"";
15+
}
16+
}
17+

MaiChartManager/Utils/VideoConvert.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ private static IConversion Concatenate(string vf, params IMediaInfo[] mediaInfos
272272
var conversion = FFmpeg.Conversions.New();
273273
foreach (var inputVideo in mediaInfos)
274274
{
275-
conversion.AddParameter("-i " + inputVideo.Path.Escape() + " ");
275+
conversion.AddParameter("-i " + FFmpegHelper.Escape(inputVideo.Path) + " ");
276276
}
277277

278278
conversion.AddParameter("-filter_complex \"");
@@ -336,7 +336,7 @@ public static async Task ConvertUsmToMp4(string inputPath, string outputPath, Ac
336336

337337
// 转换为 MP4
338338
var conversion = FFmpeg.Conversions.New()
339-
.AddParameter("-i " + outputIvfFile.Escape())
339+
.AddParameter("-i " + FFmpegHelper.Escape(outputIvfFile))
340340
.AddParameter("-c:v copy")
341341
.SetOutput(outputPath);
342342

0 commit comments

Comments
 (0)