Настройка качества видео для извлеченного видео YouTube с помощью библиотеки libvideo .NET

#c# #.net #youtube

#c# #.net #YouTube

Вопрос:

Мне нужна помощь с кодом для загрузки видео с лучшим качеством видео 720p / 1080p, включая аудио, с использованием libvideo.Библиотека NET.

Я использовал getVideo в коде, но загруженное видео по умолчанию имеет разрешение «360p». Итак, я пробую это в коде (максимальное разрешение установлено как «1080p»).

 var videoInfos = youTube.GetAllVideos(link);
var maxResolution = videoInfos.FirstOrDefault(v => v.Resolution == 1080);
 

Но как мне использовать GetAllVideos для сохранения видео с разрешением, которое я установил в коде.

введите описание изображения здесь

https://github.com/omansak/libvideo

Комментарии:

1. Используйте getVideo (maxResolution), чтобы получить выбранное разрешение, но будьте осторожны. Использование GetAllVideos приведет к извлечению всех доступных видео, но, похоже, те, которые имеют самое высокое разрешение, не включают аудио. Я сам пытаюсь найти решение этой проблемы для своего проекта.

Ответ №1:

Я решил это таким образом. Я загружаю видео с высоким разрешением. А затем загрузите видео со звуком, извлеките аудио с помощью MediaToolkit Nuget и соедините его с FFmpeg для тегов mp3, которые я использовал TagLibSharp

 private async Task<string> Download(string Url, string Title, string Interpreter, bool AudioForVideo = false)
{
    string audioPath = "";
    try
    {
        YouTubeVideo video;
        if (AudioForVideo || !cbDownloadVideo.Checked)
        {
            video = youtube.GetVideo(Url);
        }
        else
        {
            IEnumerable<YouTubeVideo> videos = youtube.GetAllVideos(Url);
            video = videos.OrderByDescending(o => o.Resolution).ThenByDescending(o => o.Fps).First();

        }

        string fileName = video.FullName;

        if (Title != "")
        {
            fileName = $"{Title}.mp4";
        }
        if (AudioForVideo)
        {
            fileName = fileName.Replace(".mp4", "_temp.mp4");
        }
        string videoPath = Path.Combine(Settings.Default.DownloadDirectory, fileName);

        File.WriteAllBytes(videoPath, video.GetBytes());

        if (!cbDownloadVideo.Checked || AudioForVideo)
        {
            audioPath = videoPath.Replace(".mp4", ".mp3");
            MediaFile inputFile = new(videoPath);
            MediaFile outputFile = new(audioPath);
            using (Engine engine = new())
            {
                engine.GetMetadata(inputFile);
                engine.Convert(inputFile, outputFile);
            }
            File.Delete(videoPath);
            if (!AudioForVideo)
            {
                TagLib.File mFile = TagLib.File.Create(audioPath);
                mFile.Tag.Title = fileName.Replace(".mp4", "");
                mFile.Tag.Artists = new string[] { Interpreter };
                mFile.Save();
            }
        }
        else
        {
            if (video.AudioFormat == AudioFormat.Unknown)
            {
                string audioInputPath = await Download(Url, Title, Interpreter, true);
                string tempVideoPath = videoPath.Replace(".mp4", "_output.mp4");
                FFMpeg.ReplaceAudio(videoPath, audioInputPath, videoPath.Replace(".mp4", "_output.mp4"));
                File.Delete(videoPath);
                File.Move(tempVideoPath, videoPath);
                File.Delete(audioInputPath);
            }
        }
        exception = "";
    }
    catch (Exception ex)
    {
        exception = ex.Message;
    }
    return audioPath;
}