Example #1
0
    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);
    }
Example #2
0
    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);
    }
Example #3
0
    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));
    }