1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

yt-dlpを使ってyoutubeからmp3を抽出する

Last updated at Posted at 2023-04-07
  • 基本的にyoutubeから動画や音声をダウンロードすることは規約違反です.
  • また,違法アップロードされた動画を知っていながらダウンロードするのは違法です.
  • 公式(アーティスト本人のオフィシャルアカウントなど)からダウンロードするのは規約違反ではありますが,違法ではありません.ですが,再配布,再配信する場合はこの限りではありません.
    上記を了承し自己責任にてお願いします.

以前はyoutube-dlを使っていましたが,ダウンロードがおっそいのと頻繁に止まるのでyt-dlpに移行するついでにオプションが膨大なので簡単に使えるスクリプトを組みました.
改造したければ

こちらのサイトが詳しく書かれていますので参考にされてください.

導入・使用

リポジドリはこちらになります.

適当な場所で

git clone https://github.com/soburi59/yt-dlp-music.git

でクローン
exeを叩けば使えます.
youtubeのリンクをコピペすれば勝手にダウンロードされます.
再生リストのリンクを貼った場合,最初からどこまでをダウンロードするかを数字で聞かれるので入力してください.

ダウンロード先の場所は,デフォでUSERS(~)/Music/Music となっています.pathを聞かれます.ダウンロード先を変更できるので例えばexeファイルと同じディレクトリにダウンロードしたい場合は.(カレントディレクトリ)としてください.
youtube-dlと比べると100億倍早いです.

コード

一応載せときます.解説するほどのものでもないです.

# -*- coding: utf-8 -*-
"""
Created on 2023/4/4
Edited on 2023/4/17
Changed on 2023/6/5
@author: soburi
"""
import sys, subprocess
while(True):
    path = input("(Default:[Enter] →~/Music/Music)\nTarget path:") or "~/Music/Music"

    if (path == "end"):
        break

    url = input("(play list url ok)\n(Default:[Enter]→import music.txt)\nmovie url:")
    cmd = f".\yt-dlp\yt-dlp.exe --ffmpeg-location ./ffmpeg/ffmpeg.exe --parse-metadata artist:%(channel)s -o {path:s}/%(title)s -f b --add-metadata --extract-audio --embed-thumbnail --audio-format mp3 "
    
    list = []
    if "https://" in url:
        tmp = url
        if "list=" in url:
            #TODO: もしlistだけではなくvideoも指定してしまっていたら正規表現など使って改変を行う。 (ニコニコなども考慮する)
            end = int(input("(example:3→download the 3 lastest music)\n(Default:[Enter]→download all)\n end num:") or 0)
            if end != 0:
                tmp = f"--playlist-end {end} --yes-playlist {url}"
        list.append(tmp)

    else:
        try:
            with open('music.txt', mode='r') as f:
                list = f.readlines()
        except:
            print("nothing text file.")
            sys.exit(1)
    
    for urls in list:
        subprocess.run('echo '+cmd+urls, shell=True)
        subprocess.run(cmd+urls, shell=True) 
    
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?