【C#】Youtubeから音源だけダウンロードする

自分で実装しようか迷ったけど既存サービスを使うことにした。

使おうと思っていたアルゴリズムは下に纏めておく。

ファイル名に動画名を使いたい場合は、以下の記事を参照して欲しい。

cnth1a.hatenablog.com

また、音声のみ分離してダウンロードすることはYoutube規約違反である。使用する場合は自己責任で。

ソースコード

//動画のURLにくっついている11桁のID
string youtubeID = "jNQXAC9IVRw";

string savePath = @"D:\hoge.mp3";

string url = $"http://www.youtubeinmp3.com/fetch/?video=https://www.youtube.com/watch?v={youtubeID}";

wc.DownloadFile(url,savePath);

たまにyoutubeinmp3の直リンクアドレスがMP3を返さないことがある。まだ変換されたことが無いものはそうなるようだ。MP3データでない場合はMP4等から抽出すると良いだろう。

http://www.youtubeinmp3.comというサービスを使用した。ソースにもある通り、このサービスはhttp://www.youtubeinmp3.com/fetch/?video={youtubeID}というURLにアクセスすることでMP3を取得できる。

そのままWAVデータに変換する場合は、以下の記事が役に立つと思う。

cnth1a.hatenablog.com

Youtubeの動画の音源のみのダウンロードのアルゴリズム

YoutubeからMP4をダウンロードすることは比較的容易に可能で、少し調べれば出てくる。(ここでは詳述しないが、仕様変更が何度かされているので古い情報には注意。)

その後、MP4のファイルを途中までダウンロードし、動画ファイル部分をを表すBox(MP4では一つ一つのデータがBoxと呼ばれる塊になっている)を読み飛ばし、音声データだけをダウンロードする。

その後、それをデコードする。これで音声ファイルにできる、はず。

途中で諦めたので本当にこれで出来るかどうかも分からない。