private bool GetInfoFromJson() { Log.Logger.Information("Reading media info from sidecar : {FileName}", SidecarFileInfo.Name); // Decompress the tool data FfProbeInfoJson = StringCompression.Decompress(SidecarJson.FfProbeInfoData); MkvMergeInfoJson = StringCompression.Decompress(SidecarJson.MkvMergeInfoData); MediaInfoXml = StringCompression.Decompress(SidecarJson.MediaInfoData); // Deserialize the tool data if (!MediaInfoTool.GetMediaInfoFromXml(MediaInfoXml, out MediaInfo mediaInfoInfo) || !MkvMergeTool.GetMkvInfoFromJson(MkvMergeInfoJson, out MediaInfo mkvMergeInfo) || !FfProbeTool.GetFfProbeInfoFromJson(FfProbeInfoJson, out MediaInfo ffProbeInfo)) { Log.Logger.Error("Failed to de-serialize tool data : {FileName}", SidecarFileInfo.Name); return(false); } // Assign mediainfo data FfProbeInfo = ffProbeInfo; MkvMergeInfo = mkvMergeInfo; MediaInfoInfo = mediaInfoInfo; // Assign state State = SidecarJson.State; return(true); }
private bool GetToolInfo() { Log.Logger.Information("Reading media info from tools : {FileName}", MediaFileInfo.Name); // Read the tool data text if (!Tools.MediaInfo.GetMediaInfoXml(MediaFileInfo.FullName, out MediaInfoXml) || !Tools.MkvMerge.GetMkvInfoJson(MediaFileInfo.FullName, out MkvMergeInfoJson) || !Tools.FfProbe.GetFfProbeInfoJson(MediaFileInfo.FullName, out FfProbeInfoJson)) { Log.Logger.Error("Failed to read media info : {FileName}", MediaFileInfo.Name); return(false); } // Deserialize the tool data if (!MediaInfoTool.GetMediaInfoFromXml(MediaInfoXml, out MediaInfo mediaInfoInfo) || !MkvMergeTool.GetMkvInfoFromJson(MkvMergeInfoJson, out MediaInfo mkvMergeInfo) || !FfProbeTool.GetFfProbeInfoFromJson(FfProbeInfoJson, out MediaInfo ffProbeInfo)) { Log.Logger.Error("Failed to de-serialize tool data : {FileName}", MediaFileInfo.Name); return(false); } // Assign the mediainfo data MediaInfoInfo = mediaInfoInfo; MkvMergeInfo = mkvMergeInfo; FfProbeInfo = ffProbeInfo; // Print info MediaInfoInfo.WriteLine("MediaInfo"); MkvMergeInfo.WriteLine("MkvMerge"); FfProbeInfo.WriteLine("FfProbe"); return(true); }
public static bool ReMuxToMkv(string inputName, MediaInfo keep, out string outputName) { if (inputName == null) { throw new ArgumentNullException(nameof(inputName)); } if (keep == null) { throw new ArgumentNullException(nameof(keep)); } // This only works on MKV files and MkvMerge MediaInfo types Debug.Assert(keep.Parser == MediaTool.ToolType.MkvMerge); Debug.Assert(MkvMergeTool.IsMkvFile(inputName)); // Match the logic in ConvertToMKV() // Test if (Program.Options.TestNoModify) { outputName = inputName; return(true); } // Create a temp filename based on the input name outputName = Path.ChangeExtension(inputName, ".mkv"); string tempName = Path.ChangeExtension(inputName, ".tmp"); // Remux keeping specific tracks Log.Logger.Information("ReMux using MkvMerge : {FileName}", inputName); if (!Tools.MkvMerge.ReMuxToMkv(inputName, keep, tempName)) { Log.Logger.Error("ReMux using MkvMerge failed : {FileName}", inputName); FileEx.DeleteFile(tempName); return(false); } // Rename the temp file to the output file if (!FileEx.RenameFile(tempName, outputName)) { return(false); } // If the input and output names are not the same, delete the input return(inputName.Equals(outputName, StringComparison.OrdinalIgnoreCase) || FileEx.DeleteFile(inputName)); }