たびとの旅路 ~電脳砂漠の冒険譚~

フロッピー頼りに歩き、クラウドの地平を見つめる今日まで。見つけたオアシス、迷い込んだ砂の迷宮、全てこの羊皮紙に。

第一章:幻の神器『TubeEater』追想録 ~旅の始まり~

旅の途中、ふと、かつて記した古い羊皮紙を見つけた。忘れないうちに、その記憶をここに書き留めておくとしよう。

久しぶりに、C#という名の魔法で、新たな神器を創り出そうと思った。周りの者に「どんな道具が欲しいか?」と尋ねると、一つの声が返ってきた。「YouTubeから、もっと簡単にビデオや音楽をダウンロードしたい」と。しかし、この神器は後に、利用規約という壁に阻まれ、幻と消えることになる。

世に、その手の魔法の道具は数多く存在する。今更、私が創る意味などあるのか? しかし、仕事でAIアプリを扱い、ビデオという魂に触れていた私は、その知識を活かせるかもしれない、という単純な好奇心に突き動かされた。 これは、.NET 6(Microsoft製の開発基盤)とWPF(Windows Presentation Foundation:Windows向けUI基盤)という、現代の魔法体系を使い、お手軽YouTubeダウンローダー「TubeEater」という名の、幻の神器を錬成する、その全ての始まりの記録である。

この羊皮紙のあらまし

この羊皮紙が導く者

  • かつて、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ダウンロードの技術的核心

  1. VideoLibraryの簡潔さ - わずか数行のコードでYouTubeから動画・音声を取得できる強力なライブラリ
  2. 非同期処理の重要性 - GetAllVideosAsyncにより、GUI操作を妨げずダウンロードを実行可能
  3. NAudioの変換能力 - MediaFoundationReaderとEncoderの組み合わせで、AAC→MP3変換を実現
  4. 試行錯誤の価値 - NAudioの使い方は情報が少なく、海外サイトを探索して解法を発見

技術選定の背景

.NET 6とWPFという現代的な基盤を選んだのは、仕事でのAIアプリ開発経験を活かせると考えたからだ。VideoLibraryという既存ライブラリの存在により、YouTube APIの複雑さを回避し、核心機能の実装に集中できた。

まとめ

この二つの魔法を軸に、私の冒険は、GUI という名の美しい鎧を鍛え上げる、次なるステージへと進んでいく。

この羊皮紙が、同じように自らの手で、夢の道具を創り出そうと挑む、未来の冒険者の、最初の道標となることを願う。

技術の核心を理解すれば、残りは美しい外装を纏わせるだけ。しかし、その「外装」こそが、最も困難な試練となることを、この時の私はまだ知らなかった。

おっと、どうやら相棒が腹を空かせたようだ。今日はこのへんで筆を置くとしよう。

砂漠で見つけた魔法のランプ

ラクダの独り言

ご主人が「久しぶりに、新しい神器を創るぞ!」とか言って、やけに張り切っている。なんでも、歌や映像を、情報の海から釣り上げる、便利な釣り竿を創るらしい。俺に言わせりゃ、そんなもんより、砂漠のど真ん中でも冷たい水が湧き出る、魔法の水筒でも創ってくれた方が、よっぽどありがたいんだがな。まったく、人間の考えることはよく分からん。やれやれだぜ。