#10 Pythonで簡単!YouTube動画をWAVファイルに変換する手順

YouTubeの動画から音声を抽出し、WAV形式で保存したいと思ったことはありませんか?
たとえば、好きな講演や音楽を高音質で保存したり、ポッドキャストのようにオフラインで楽しんだりする際に便利です。
本記事では、Pythonを使ってYouTubeの動画をWAV形式に変換する方法をわかりやすく解説します。
特別なプログラミングスキルは必要なく、無料のライブラリを活用することで簡単に実現できます。
また、手順ごとにコードを紹介するので、Python初心者の方でも安心して実践できます!
それでは、準備するものから実際の変換方法まで、一緒に見ていきましょう。

1. ffmpegのインストール

ffmpegは動画や音声の変換・編集などに広く使われるマルチメディアフレームワークです。オープンソースで、多くの形式のメディアファイルに対応しています。
今回、youtubeの動画を音声ファイルへ変換する際に必要となります。
OSはWindowsで解説していきます。
ちょっと面倒ですが、ここだけ耐えてください。。。
ffmpeg公式サイトにアクセスします。

Windows builds from gyan.dev を選択
ffmpeg-git-full.7z を選択
ダウンロードされた圧縮ファイル

・圧縮ファイルを解凍します。
・フォルダ名が長いので、"ffmpeg"と名前を変更します。
・"ffmpeg"フォルダを、Cドライブ直下へ移動します。
 (この後パスの設定をするので、どこでも良いです。)

ffmpegフォルダ内

・環境変数を編集

新規に"C:¥ffmpeg¥bin"を作成する。

ここでやっている作業は、
Cドライブ直下に移動した"ffmpeg"フォルダ内にある、
"bin"にパスを通し、
Windows内のどこからでも実行できるように設定しました。
コマンドプロンプト内で、”ffmpeg -version"と入力して下さい。

バージョン情報が出力されれば、ffmpegのインストール成功です!

2. Pythonコード生成

Pythonのライブラリにあるyt-dlp を利用して YouTube の音声のみをダウンロードします。
yt-dlpは、YouTubeやその他の動画共有サイトから動画や音声をダウンロードできるオープンソースのコマンドラインツールです。
まず、プログラムを保存するフォルダを、デスクトップ上に作成します。
"youtube_to_wav"というフォルダとしておきます。
それでは、コマンドプロンプトを開き、yt-dlpとpydubをインストールします。
pydubは、Pythonでオーディオ操作をするためのライブラリです。

pip install yt-dlp pydub

次にメモ帳を開き、以下のPythonコードをコピペし、貼り付けて下さい。

import subprocess
import os
from pydub import AudioSegment

def download_audio_with_ytdlp(url: str, temp_filename: str = "temp_audio.m4a"):
    """
    yt-dlp を利用して YouTube の音声のみをダウンロードします。
    
    :param url: ダウンロードしたい YouTube URL
    :param temp_filename: 一時保存ファイル名
    """
    # yt-dlp コマンド:
    #   -f bestaudio: 音声のみの最高品質を指定
    #   --extract-audio: 音声抽出
    #   --audio-format m4a: m4a形式で出力
    #   -o: 出力ファイル名
    cmd = [
        "yt-dlp",
        "-f", "bestaudio",
        "--extract-audio",
        "--audio-format", "m4a",
        "-o", temp_filename,
        url
    ]
    
    subprocess.run(cmd, check=True)

def convert_to_wav(input_path: str, output_path: str):
    """
    pydub を使って M4A (または他の音声形式) を WAV に変換します。
    
    :param input_path: 一時ファイルパス
    :param output_path: 変換後の WAV ファイルパス
    """
    sound = AudioSegment.from_file(input_path)
    sound.export(output_path, format="wav")


def youtube_to_wav(url: str, output_wav_path: str = "output.wav"):
    """
    YouTube の音声をダウンロードし、WAV形式に変換して保存します。
    """
    temp_filename = "temp_audio.m4a"
    
    # 音声ダウンロード
    download_audio_with_ytdlp(url, temp_filename)
    
    # WAVに変換
    convert_to_wav(temp_filename, output_wav_path)
    
    # 一時ファイル削除
    if os.path.exists(temp_filename):
        os.remove(temp_filename)


if __name__ == "__main__":
    youtube_url = input("YouTubeのURLを入力してください: ")
    output_filename = "output.wav"
    
    try:
        youtube_to_wav(youtube_url, output_filename)
        print(f"変換が完了しました。ファイルは '{output_filename}' に保存されました。")
    except subprocess.CalledProcessError as e:
        print("ダウンロードまたは変換に失敗しました。エラー内容:")
        print(e)

ファイル名を、"youtube_to_wav.py"とし、保存します。

3. Python実行

コマンドプロンプトを開き、以下を入力し、先ほど保存したフォルダへ移動します。※"XXXXXX"はユーザー名
(フォルダへカーソルを合わせ、"パスのコピー"でパスを取得できます)

C:\Users\XXXXXX>cd C:\Users\XXXXXX\OneDrive\デスクトップ\youtube_to_wav

先ほど作成した、"youtube_to_wav.py"を以下のように入力して実行します。

C:\Users\XXXXXX\OneDrive\デスクトップ\youtube_to_wav>python youtube_to_wav.py

”YouTubeのURLを入力して下さい:”と聞いてくるので、WAVに変換したいYouTubeのURLをここに貼り付けます。

実行結果

無事に変換できました。

おわりに

今回は、Pythonの「yt-dlp」ライブラリを使ってYouTube動画をWAV形式に変換する方法 を解説しました。
yt-dlp を活用することで、簡単にYouTube動画から音声を抽出し、高音質なWAVファイルとして保存することができます。
これで、YouTubeの音声を自在に保存し、オフラインで利用できるようになりましたね!
WAV形式の音声データがあれば、Pythonのライブラリを使って、自動で文字起こしを行うことができます。

次回は、このWAVファイルを活用して Pythonで文字起こしを行う方法 を詳しく解説する予定です。
ぜひお楽しみに!

※2025/2/1 追記

複数のURLを入力し、まとめて変換するコードはこちら。

import subprocess
import os
from pydub import AudioSegment
import re

def sanitize_filename(filename: str) -> str:
    """
    ファイル名に使用できない文字を置換する
    """
    return re.sub(r'[^a-zA-Z0-9_-]', '_', filename)

def download_audio_with_ytdlp(url: str, temp_filename: str):
    """
    yt-dlp を利用して YouTube の音声のみをダウンロードします。
    """
    cmd = [
        "yt-dlp",
        "-f", "bestaudio",
        "--extract-audio",
        "--audio-format", "m4a",
        "-o", temp_filename,
        url
    ]
    
    subprocess.run(cmd, check=True)

def convert_to_wav(input_path: str, output_path: str):
    """
    pydub を使って M4A (または他の音声形式) を WAV に変換します。
    """
    sound = AudioSegment.from_file(input_path)
    sound.export(output_path, format="wav")

def get_video_id(url: str) -> str:
    """
    YouTube の URL から動画 ID を抽出する
    """
    match = re.search(r"(?:v=|youtu.be/|embed/|shorts/)([a-zA-Z0-9_-]{11})", url)
    return match.group(1) if match else "unknown"

def youtube_to_wav(url: str):
    """
    YouTube の音声をダウンロードし、WAV形式に変換して保存します。
    """
    video_id = get_video_id(url)
    safe_filename = sanitize_filename(video_id)
    temp_filename = f"{safe_filename}.m4a"
    output_wav_path = f"{safe_filename}.wav"
    
    # 音声ダウンロード
    download_audio_with_ytdlp(url, temp_filename)
    
    # WAVに変換
    convert_to_wav(temp_filename, output_wav_path)
    
    # 一時ファイル削除
    if os.path.exists(temp_filename):
        os.remove(temp_filename)
    
    return output_wav_path

if __name__ == "__main__":
    print("YouTubeのURLを複数入力してください(何も入力せずにEnterで変換開始)")
    youtube_urls = []
    while True:
        youtube_url = input("YouTubeのURL: ").strip()
        if not youtube_url:
            break
        youtube_urls.append(youtube_url)
    
    if youtube_urls:
        for url in youtube_urls:
            try:
                output_filename = youtube_to_wav(url)
                print(f"変換が完了しました。ファイルは '{output_filename}' に保存されました。")
            except subprocess.CalledProcessError as e:
                print(f"{url} のダウンロードまたは変換に失敗しました。エラー内容:")
                print(e)
    else:
        print("URLが入力されませんでした。")

URLを順次入力し、何も入力せずにEnterを押すと、変換を開始します。
また、ファイル名は、https://www.youtube.com/watch?v=XXXXXXの、
”XXXXXX.wav”
で保存されます。

おわり。




いいなと思ったら応援しよう!