Exemple #1
0
        public static void AddEncodingTask(EncodingAction action, string param,
                                           Preset currentPreset, List <FileSelector.FileInfo> selectPaths,
                                           string input, string output, string extra)
        {
            if (!TaskArgBuilders.ContainsKey(action))
            {
                AppContext.Status.MainStatus = $"Error: 没有找到可用的处理流程模板:{action}";
                return;
            }
            var taskArgBuilder = TaskArgBuilders[action];

            var useHdr = false;

            if (param == "HDR" || AppContext.Config.ForceHDR)
            {
                useHdr = true;
            }

            var(ext, _) = FileSelector.FileName.GetOutputExt(currentPreset.OutputFormat);

            //为每个选中的项目生成任务并推入任务队列
            foreach (var filePath in selectPaths)
            {
                var name    = filePath.Filename;
                var newTask = new EncodingTask(name, action);

                AppContext.Status.MainStatus = $"生成任务 {name}";

                var thisInput  = filePath.Path;
                var thisOutput = FileSelector.FileName.RecalcOutputPath(thisInput, output, "_neenc", ext);
                if (thisInput == input)
                {
                    thisOutput = output;
                }

                var(exeFile, exeArgs) = taskArgBuilder.Invoke(param, thisInput, thisOutput, currentPreset, useHdr, input, extra);

                newTask.RegTask(exeFile, exeArgs);
                newTask.RegInputOutput(thisInput, thisOutput);
                newTask.RunLog      += $"{exeFile} {exeArgs}\n";
                newTask.ProcessStop += async sender =>
                {
                    AppContext.Status.MainStatus = $"{name} 任务完成";
                    await Task.Delay(500);

                    TaskProvider.Schedule();
                };

                AppContext.EncodingContext.TaskQueue.Add(newTask);
            }

            //调度任务
            AppContext.Status.MainStatus = "开始任务调度";
            TaskProvider.Schedule();
        }
Exemple #2
0
        private void AddTask()
        {
            EncodingTask encodingTask = EncodingType switch
            {
                EncodingType.Filters => new EncodeWithFilters(VideoFilter, AudioFilter, OverrideBitrate, CustomBitrate * 1000),
                EncodingType.Custom => new EncodeWithCustomParams(CustomParams, CustomExtension),
                _ => throw new ArgumentOutOfRangeException(),
            };

            Tasks.Add(encodingTask);
            Reset();
        }
Exemple #3
0
 public FfmpegEncoder(EncodingTask encodingTask)
 {
     _encodingTask = encodingTask;
 }