Не скачивается звук через библиотеку VideoLibrary
Нужно скачать видео с ютуба и отделить от него звуковую дорожку используя язык C#. Использую библиотеку VideoLibrary смог скачать видео, однако на нём нету звук, только визуальная часть. Как отделить от видео звук я знаю, но почему звука нету при скачивании я не знаю. Ниже код если нужно
using System;
using System.IO;
using VideoLibrary;
namespace YouTubeDownloader
{
public class YouTubeDownloader
{
public static string GetURI()
{
//В будущем доделать, когда буду связывать с фронтом
string result = "https://www.youtube.com/watch?v=Cfc-4NgVWgE";
return result;
}
public static void Main(string[] args)
{
string uri = GetURI();
//Получение видео в переменную
var youtube = YouTube.Default;
var video = youtube.GetVideo(uri);
//Массив байтов хранящий видео
byte[] bytes = video.GetBytes();
//Получение расположения директории "video" внутри проекта
string videoDir = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), @"..\..")) + @"\video\";
Console.WriteLine("Скачивание начато, ожидайте..");
//Сохранение видео в файл
File.WriteAllBytes(videoDir + "video.mp4", bytes);
string file = videoDir + @"\video.mp4";
if (!File.Exists(file))
{
Console.WriteLine("Файл не обнаружен");
}
else Console.WriteLine("Скачивание завершено.");
}
}
}
Ответы (1 шт):
Автор решения: Максим Лінюк
→ Ссылка
Вот такой код в итоге получился, качает аудио в формате mp4, конвертирую в mp3 в другом файле с помощью ffmpeg. Спасибо EvgeniyZ, за развернутый ответ который привел меня к ответу
public void YouTubeDownloader(string uri)
{
Console.WriteLine("Скачивание начато, ожидайте..");
//Получаем абсолютный путь к директории "video" внутри проекта
string videoDir = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), @"..\..")) + @"\video\";
//Получаем все доступные потоки видео и аудио по URI
var youtube = YouTube.Default;
var videos = youtube.GetAllVideos(uri);
//Ищем чистый аудио поток в формате mp4
var video = videos
.Where(v => v.AdaptiveKind == AdaptiveKind.Audio && v.Format == VideoFormat.Mp4)
.OrderByDescending(v => v.AudioBitrate)
.FirstOrDefault();
//План Б по поиску потока
if (video == null)
{
Console.WriteLine("Не удалось найти подходящий поток. Используем план Б");
video = videos
.OrderByDescending(v => v.AudioBitrate)
.FirstOrDefault();
}
if (video != null)
{
//Сохранение видео в файл
File.WriteAllBytes(videoDir + "video.mp4", video.GetBytes());
string file = videoDir + @"\video.mp4";
//Проверяем создан файл или нет
if (!File.Exists(file))
{
Console.WriteLine("Файл не обнаружен");
}
else Console.WriteLine("Скачивание завершено.");
} //Обработка исключения если не найдено ни одного потока
else throw new VideoIsNull("Непредвиденная ошибка с видео");
}