web-dev-qa-db-fra.com

C # Télécharger le son d'une vidéo sur youtube

Je peux télécharger une vidéo à partir de YouTube mais je ne veux que le son. Comment puis je faire ça?

Code que j'ai pour télécharger la vidéo (à l'aide de VideoLibrary):

        YouTube youtube = YouTube.Default;
        Video vid = youtube.GetVideo(txt_youtubeurl.Text);
        System.IO.File.WriteAllBytes(source + vid.FullName, vid.GetBytes());
7
Josh C

Installez le NuGet packages: MediaToolkit et VideoLibrary, cela vous permettra de faire la conversion par extension de fichier.

var source = @"<your destination folder>";
var youtube = YouTube.Default;
var vid = youtube.GetVideo("<video url>");
File.WriteAllBytes(source + vid.FullName, vid.GetBytes());

var inputFile = new MediaFile { Filename = source + vid.FullName };
var outputFile = new MediaFile { Filename = $"{source + vid.FullName}.mp3" };

using (var engine = new Engine())
{
    engine.GetMetadata(inputFile);

    engine.Convert(inputFile, outputFile);
}
17

Le code ci-dessus fonctionne à merveille. Vous n'avez pas besoin de télécharger la vidéo. J'ai créé cette procédure. Ainsi, lorsque des débutants comme moi le voient, il est plus facile à utiliser ... Voir la note ci-dessus sur les besoins en paquets de pépites.

exemple d'url: https://www.youtube.com/watch?v=lzm5llVmR2E exemple, chemin nécessite uniquement un chemin pour enregistrer le fichier dans . il suffit d'ajouter le nom du fichier mp3 à enregistrer.

J'espère que cela aide quelqu'un que j'ai testé ce code;

private void SaveMP3(string SaveToFolder, string VideoURL, string MP3Name)
    {
        var source = @SaveToFolder;
        var youtube = YouTube.Default;
        var vid = youtube.GetVideo(VideoURL);
        File.WriteAllBytes(source + vid.FullName, vid.GetBytes());

        var inputFile = new MediaFile { Filename = source + vid.FullName };
        var outputFile = new MediaFile { Filename = $"{MP3Name}.mp3" };

        using (var engine = new Engine())
        {
            engine.GetMetadata(inputFile);

            engine.Convert(inputFile, outputFile);
        }
    }
0
user2180706

Ok a trouvé une meilleure solution pour que le code ci-dessus ne normalise pas l'audio en le publiant pour les autres ..__ D'abord, ajoutez le paquet Nuget: https://www.nuget.org/packages/NReco.VideoConverter/ . Convertir MP4 en MP3

 // Client
        var client = new YoutubeClient();
        var videoId = NormalizeVideoId(txtFileURL.Text);
        var video = await client.GetVideoAsync(videoId);
        var streamInfoSet = await client.GetVideoMediaStreamInfosAsync(videoId);
        // Get the best muxed stream
        var streamInfo = streamInfoSet.Muxed.WithHighestVideoQuality();
        // Compose file name, based on metadata
        var fileExtension = streamInfo.Container.GetFileExtension();
        var fileName = $"{video.Title}.{fileExtension}";
        // Replace illegal characters in file name
        fileName = RemoveIllegalFileNameChars(fileName);
        tmrVideo.Enabled = true;
        // Download video
        txtMessages.Text = "Downloading Video please wait ... ";

        //using (var progress = new ProgressBar())
        await client.DownloadMediaStreamAsync(streamInfo, fileName);

        // Add Nuget package: https://www.nuget.org/packages/NReco.VideoConverter/ To Convert MP4 to MP3
        if (ckbAudioOnly.Checked)
        {
            var Convert = new NReco.VideoConverter.FFMpegConverter();
            String SaveMP3File = MP3FolderPath + fileName.Replace(".mp4", ".mp3");
            Convert.ConvertMedia(fileName, SaveMP3File, "mp3");
            //Delete the MP4 file after conversion
            File.Delete(fileName);
            LoadMP3Files();
            txtMessages.Text = "File Converted to MP3";
            tmrVideo.Enabled = false;
            txtMessages.BackColor = Color.White;
            if (ckbAutoPlay.Checked) { PlayFile(SaveMP3File); }
            return;
        }
0
user2180706