123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- using System;
- using System.IO;
- using CueSplitter.Helpers;
- Console.WriteLine("Cue Command-line tool");
- if (args.Length != 3) Die(-1, $"Missing args.{Environment.NewLine}Usage: CueSplitter <input_audio_file> <input_cue_file> <output_dir>");
- var inputAudioFilePath = args[0];
- var inputCueFilePath = args[1];
- var outputDir = args[2];
- if (File.Exists(inputAudioFilePath) == false) Die(-2, "Input audio file not exist");
- var tag = TagLib.File.Create(inputAudioFilePath);
- var duration = tag.Properties.Duration;
- Console.WriteLine($"Audio file duration: {duration}");
- if (File.Exists(inputCueFilePath) == false) Die(-3, "Input cue file not exist");
- var cueBytes = File.ReadAllBytes(inputCueFilePath);
- var encoding = TextHelper.DetectCodePage(cueBytes);
- if (encoding == null) Die(-5, "Can not detect cue file text encoding");
- // ReSharper disable once PossibleNullReferenceException
- var cueText = encoding.GetString(cueBytes);
- var tracks = CueHelper.ParseCue(cueText, duration);
- Console.WriteLine($"Cue tracks number: {tracks.Length}");
- var numberPaddingFormat = "".PadLeft(tracks.Length.ToString().Length, '0');
- foreach (var trackModel in tracks)
- {
- var d = trackModel.Duration;
- Console.WriteLine($" {trackModel.TrackNo.ToString(numberPaddingFormat)}. {d.TotalMinutes:00}:{d.Seconds:00}.{d.Milliseconds:000} {trackModel.Title} - {trackModel.Performer}");
- }
- if (Directory.Exists(outputDir) == false) Die(-6, "Error: Output dir not exist");
- Console.WriteLine();
- Console.WriteLine("Start Extracting...");
- foreach (var track in tracks)
- {
- var outputFilePath = Path.Combine(
- outputDir,
- FilenameHelper.RemoveInvalidCharacters(
- $"{track.TrackNo.ToString(numberPaddingFormat)}. {track.Title}{Path.GetExtension(inputAudioFilePath)}"
- )
- );
- Console.WriteLine($"Output: {outputFilePath}");
- var ffArgs = FfMpegHelper.CutSegment(inputAudioFilePath, outputFilePath, track.Offset, track.Duration);
- FfMpegHelper.Launch(ffArgs).WaitForExit();
- }
- Console.WriteLine("Finished.");
- return 0;
- void Die(int exitCode, string errMessage = null)
- {
- if (errMessage != null) Console.WriteLine($"Error: {errMessage}");
- Environment.Exit(exitCode);
- }
|