diff --git a/Code/Data/AudioTrack.cs b/Code/Data/AudioTrack.cs index 356d2a8..e31fef9 100644 --- a/Code/Data/AudioTrack.cs +++ b/Code/Data/AudioTrack.cs @@ -11,8 +11,8 @@ namespace Flowframes.Data public AudioTrack(int streamNum, string titleStr, string codecStr) { streamIndex = streamNum; - title = titleStr.Trim().Replace(" ", "."); - codec = codecStr.Trim(); + title = titleStr.Trim().Replace("_", ".").Replace(" ", "."); + codec = codecStr.Trim().Replace("_", "."); } } } diff --git a/Code/Data/SubtitleTrack.cs b/Code/Data/SubtitleTrack.cs index f91f90d..7c31828 100644 --- a/Code/Data/SubtitleTrack.cs +++ b/Code/Data/SubtitleTrack.cs @@ -12,8 +12,8 @@ namespace Flowframes.Data public SubtitleTrack(int streamNum, string langStr, string encodingStr) { streamIndex = streamNum; - lang = langStr.Trim().Replace(" ", "."); - langFriendly = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(langStr.ToLower().Trim().Replace(" ", ".")); + lang = langStr.Trim().Replace("_", ".").Replace(" ", "."); + langFriendly = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(langStr.ToLower().Trim().Replace("_", ".").Replace(" ", ".")); encoding = encodingStr.Trim(); } } diff --git a/Code/Media/FfmpegAudioAndMetadata.cs b/Code/Media/FfmpegAudioAndMetadata.cs index 079679f..04a1be4 100644 --- a/Code/Media/FfmpegAudioAndMetadata.cs +++ b/Code/Media/FfmpegAudioAndMetadata.cs @@ -16,8 +16,13 @@ namespace Flowframes.Media { partial class FfmpegAudioAndMetadata : FfmpegCommands { - public static async Task ExtractAudioTracks(string inputFile, string outFolder) + #region Audio + + public static async Task ExtractAudioTracks(string inputFile, string outFolder, bool showMsg = true) { + string msg = "Extracting audio from video..."; + if (showMsg) Logger.Log(msg); + List audioTracks = await GetAudioTracks(inputFile); int counter = 1; @@ -79,6 +84,8 @@ namespace Flowframes.Media return audioTracks; } + #endregion + #region Subtitles public static async Task ExtractSubtitles(string inputFile, string outFolder, Interpolate.OutMode outMode,bool showMsg = true) @@ -147,7 +154,7 @@ namespace Flowframes.Media #endregion - public static async Task MergeAudioAndSubs(string inputFile, string tempFolder, int looptimes = -1) // https://superuser.com/a/277667 + public static async Task MergeAudioAndSubs(string inputFile, string tempFolder) // https://superuser.com/a/277667 { // Logger.Log($"[FFCmds] Merging audio from {audioPath} into {inputFile}", true); string containerExt = Path.GetExtension(inputFile); @@ -155,7 +162,6 @@ namespace Flowframes.Media string outPath = Path.Combine(tempFolder, $"muxed{containerExt}"); File.Move(inputFile, tempPath); string inName = Path.GetFileName(tempPath); - // string audioName = Path.GetFileName(audioPath); string outName = Path.GetFileName(outPath); string[] audioTracks = IOUtils.GetFilesSorted(tempFolder, false, "*_audio.*"); // Find audio files @@ -176,23 +182,20 @@ namespace Flowframes.Media string trackMapArgs = ""; string trackMetaArgs = ""; - // for (int subTrack = 0; subTrack < subTracks.Length; subTrack++) - // { - // trackInputArgs += $" -i {Path.GetFileName(subTracks[subTrack])}"; // Input filename - // trackMapArgs += $" -map {Path.GetFileNameWithoutExtension(subTracks[subTrack]).Split('_')[0].GetInt()}"; // Stream index - // trackMetaArgs += $" -metadata:s:s:{subTrack} language={Path.GetFileNameWithoutExtension(subTracks[subTrack]).Split('_')[1]}"; // Language - // } - SortedDictionary sortedTrackFiles = new SortedDictionary(trackFiles); + int inputIndex = 1; // Input index (= output stream index) - Start at 1 since 0 is the video stream + foreach (KeyValuePair track in sortedTrackFiles) { int streamIndex = track.Key; string trackFile = track.Value; trackInputArgs += $" -i {Path.GetFileName(trackFile)}"; // Input filename - trackMapArgs += $" -map {Path.GetFileNameWithoutExtension(trackFile).Split('_')[0].GetInt()}"; // Set stream index - trackMetaArgs += $" -metadata:s:{streamIndex} title={Path.GetFileNameWithoutExtension(trackFile).Split('_')[1]}"; // Language or title + trackMapArgs += $" -map {inputIndex}"; // Map input file + trackMetaArgs += $" -metadata:s:{inputIndex} title={Path.GetFileNameWithoutExtension(trackFile).Split('_')[1]}"; // Language or title + + inputIndex++; } bool allAudioCodecsSupported = true; @@ -207,8 +210,7 @@ namespace Flowframes.Media string subArgs = "-c:s " + Utils.GetSubCodecForContainer(containerExt); string audioArgs = allAudioCodecsSupported ? "-c:a copy" : Utils.GetAudioFallbackArgs(Path.GetExtension(inputFile)); - string args = $" -i {inName} -stream_loop {looptimes}" + - $"{trackInputArgs} -map 0:v {trackMapArgs} -c:v copy {audioArgs} {subArgs} {trackMetaArgs} -shortest {outName}"; + string args = $" -i {inName} {trackInputArgs} -map 0:v {trackMapArgs} -c:v copy {audioArgs} {subArgs} {trackMetaArgs} -shortest {outName}"; await RunFfmpeg(args, tempFolder, LogMode.Hidden);