private IObservable <Unit> DownloadVideo(object?info)
        {
            return(Observable.Start(() =>
            {
                try
                {
                    if (info is not IList {
                        Count: > 0
                    } list)
                    {
                        return;
                    }

                    foreach (var item in list)
                    {
                        if (item is not LiveRecordViewModel {
                            Rid: not null and not @""
                        } liveRecord)
                        {
                            continue;
                        }

                        var root = Path.Combine(Config.MainDir, $@"{RoomId}", Constants.LiveRecordPath);
                        var task = new LiveRecordDownloadTaskViewModel(_logger, _apiClient, liveRecord, root, Config.DownloadThreads);
                        _taskList.AddTaskAsync(task, TaskQueueKeyConstants.LiveRecordKey).Forget();
                    }
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, @"下载回放出错");
                }
            }));
        }
        private void CreateCutVideoTask()
        {
            try
            {
                if (string.IsNullOrWhiteSpace(CutInput) || string.IsNullOrWhiteSpace(CutOutput))
                {
                    return;
                }
                var args = string.Format(Constants.FFmpegSplitTo, CutStartTime, CutEndTime, CutInput, CutOutput);
                var task = new FFmpegTaskViewModel(args);
                _taskList.AddTaskAsync(task, Path.GetPathRoot(CutOutput) ?? string.Empty).NoWarning();

                NewOutputFile();
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, @"创建剪辑任务时发生错误");
            }
        }