旅の途中、ふと、かつて記した古い羊皮紙を見つけた。忘れないうちに、その記憶をここに書き留めておくとしよう。
久しぶりに、C#という名の魔法で、新たな神器を創り出そうと思った。周りの者に「どんな道具が欲しいか?」と尋ねると、一つの声が返ってきた。「YouTubeから、もっと簡単にビデオや音楽をダウンロードしたい」と。しかし、この神器は後に、利用規約という壁に阻まれ、幻と消えることになる。
世に、その手の魔法の道具は数多く存在する。今更、私が創る意味などあるのか? しかし、仕事でAIアプリを扱い、ビデオという魂に触れていた私は、その知識を活かせるかもしれない、という単純な好奇心に突き動かされた。 これは、.NET 6(Microsoft製の開発基盤)とWPF(Windows Presentation Foundation:Windows向けUI基盤)という、現代の魔法体系を使い、お手軽YouTubeダウンローダー「TubeEater」という名の、幻の神器を錬成する、その全ての始まりの記録である。
この羊皮紙のあらまし
- この羊皮紙のあらまし
- この羊皮紙が導く者
- 砂漠の道標
- 第一の儀式:魂を釣り上げる、魔法の釣り竿を探す
- 第二の儀式:魂の響きを、新たな器へ(AACからMP3への変換)
- 羊皮紙を巻く前に
- 砂漠で見つけた魔法のランプ
- ラクダの独り言
この羊皮紙が導く者
- かつて、YouTubeからビデオをダウンロードするという、禁断の夢を見た者
- C#という名の魔法で、YouTubeという巨大な海と対話する術に、興味がある者
- VideoLibrary(YouTube連携ライブラリ)やNAudio(音声処理ライブラリ)の実装例を求める開発者
- AAC(音声圧縮形式)からMP3への変換手法を学びたい者
- 今はもう動かぬ、幻の神器「TubeEater」の開発の裏側に、興味を抱く考古学者
砂漠の道標
- TubeEater - 私が開発した、YouTube動画のダウンロードを自動化するWindowsアプリケーション。現在は利用規約の関係で使用不可。
- .NET 6 - Microsoft製の最新アプリ開発基盤。Windows、Mac、Linuxで動作可能。
- WPF - Windows Presentation Foundation。Windowsデスクトップアプリの最新UI基盤。
- NuGet - .NET向けのパッケージ管理システム。ライブラリを簡単に導入できる宝物庫。
- VideoLibrary (libvideo) - YouTubeから動画情報を取得しダウンロードできるC#ライブラリ。現在は非推奨。
- AAC - Advanced Audio Coding。高音質な音声圧縮形式。YouTubeのオーディオで使用される。
- MP3 - 最も普及している音声ファイル形式。幅広いプレイヤーで再生可能。
- NAudio - .NETで音声ファイルの再生・録音・変換を行う強力なライブラリ。
- 非同期処理 - 重い処理を別の流れで実行し、アプリの動作を止めない技術。
第一の儀式:魂を釣り上げる、魔法の釣り竿を探す
まずは、YouTubeという巨大な情報の海から、目的の宝(ビデオやオーディオ)を釣り上げるための、魔法の釣り竿を探さねばならない。 NuGet(.NETのパッケージ管理システム)という名の宝物庫を探索した結果、私は「VideoLibrary (libvideo)」という名の、強力な釣り竿を見つけ出した。
その使い方は、驚くほど簡単だった。
using VideoLibrary; void SaveVideoToDisk(string link) { var youTube = YouTube.Default; // 釣り竿を構える var video = youTube.GetVideo(link); // 狙いを定め、釣り上げる File.WriteAllBytes(@"C:\" + video.FullName, video.GetBytes()); // 獲物を地上に引き上げる }
しかも、GetAllVideosAsyncという、非同期処理(重い処理を別の流れで実行する技術)の投網漁まで用意されている。これなら、GUI(グラフィカル・ユーザー・インターフェース:視覚的な操作画面)という名の船の上で使っても、船が固まることはあるまい。
第二の儀式:魂の響きを、新たな器へ(AACからMP3への変換)
この釣り竿で獲れるオーディオは、AAC(Advanced Audio Coding:高音質な音声圧縮形式)という名の美しい水晶だった。しかし、多くの旅人が求めるのは、より広く使われているMP3(最も普及している音声形式)という名の、頑丈な器だ。 ならば、AACの水晶から、MP3の器へと、魂の響きを移し替える錬金術が必要となる。
この難解な儀式を可能にするのが、「NAudio」という名の、偉大なる魔導書(音声処理ライブラリ)だ。 その古文書はあまりに難解で、私は海外のサイトという名の砂漠を彷徨い、試行錯誤の末、ついに変換の呪文を見つけ出した。
var reader = new NAudio.Wave.MediaFoundationReader(aacPath); // MP3形式のメディアタイプを選択 var mediaType = NAudio.Wave.MediaFoundationEncoder.SelectMediaType(AudioSubtypes.MFAudioFormat_MP3, ...); using var encoder = new NAudio.Wave.MediaFoundationEncoder(mediaType); // AACからMP3へエンコード(変換) encoder.Encode(mp3Path, reader);
この呪文を唱えれば、AACの魂は、MP3という新たな器へと、その姿を変えるのだ。
羊皮紙を巻く前に
「VideoLibrary」と「NAudio」。 二つの強力な魔法を手に入れたことで、私はついに、幻の神器「TubeEater」を創り出すための、エンジンのような、核となる力を手に入れた。
YouTubeダウンロードの技術的核心
- VideoLibraryの簡潔さ - わずか数行のコードでYouTubeから動画・音声を取得できる強力なライブラリ
- 非同期処理の重要性 - GetAllVideosAsyncにより、GUI操作を妨げずダウンロードを実行可能
- NAudioの変換能力 - MediaFoundationReaderとEncoderの組み合わせで、AAC→MP3変換を実現
- 試行錯誤の価値 - NAudioの使い方は情報が少なく、海外サイトを探索して解法を発見
技術選定の背景
.NET 6とWPFという現代的な基盤を選んだのは、仕事でのAIアプリ開発経験を活かせると考えたからだ。VideoLibraryという既存ライブラリの存在により、YouTube APIの複雑さを回避し、核心機能の実装に集中できた。
まとめ
この二つの魔法を軸に、私の冒険は、GUI という名の美しい鎧を鍛え上げる、次なるステージへと進んでいく。
この羊皮紙が、同じように自らの手で、夢の道具を創り出そうと挑む、未来の冒険者の、最初の道標となることを願う。
技術の核心を理解すれば、残りは美しい外装を纏わせるだけ。しかし、その「外装」こそが、最も困難な試練となることを、この時の私はまだ知らなかった。
おっと、どうやら相棒が腹を空かせたようだ。今日はこのへんで筆を置くとしよう。
砂漠で見つけた魔法のランプ
- VideoLibrary (libvideo)(GitHub) | YouTubeから動画・音声を取得する魔法の釣り竿(※現在は非推奨)
- NAudio(GitHub) | .NETで音声ファイル変換・処理を行う強力な魔導書
ラクダの独り言
ご主人が「久しぶりに、新しい神器を創るぞ!」とか言って、やけに張り切っている。なんでも、歌や映像を、情報の海から釣り上げる、便利な釣り竿を創るらしい。俺に言わせりゃ、そんなもんより、砂漠のど真ん中でも冷たい水が湧き出る、魔法の水筒でも創ってくれた方が、よっぽどありがたいんだがな。まったく、人間の考えることはよく分からん。やれやれだぜ。