アルバムを落とす
そのままの意味でYouTubeMusicから落とすときなどに便利かもしれないスクリプトです。
私が使っていて特に不満を感じないだけでなにか不備があるかもしれないので、そのときはClaudeに修正を依頼してください。
.sh版
Info
macOS,Ubuntu,ArchLinuxで動作検証しています。
#!/bin/bash
# 設定
OUTPUT_DIR="$HOME/Music"
FORMAT="mp3"
# コマンドライン引数をチェック
if [ $# -eq 0 ]; then
echo "URLを指定してね"
exit 1
fi
# 引数を URL として使用
URL="$1"
# 出力ディレクトリが存在しない場合は作成
mkdir -p "$OUTPUT_DIR"
# yt-dlp コマンドを実行
yt-dlp "$URL" \
--default-search "ytsearch" \
--add-header "Accept-Language:ja-JP" \
--add-metadata \
--embed-metadata \
-f "bestaudio[acodec^=opus]/best" \
-x \
--audio-format "$FORMAT" \
--audio-quality 0 \
--embed-thumbnail \
--convert-thumbnails jpg \
--ppa "ThumbnailsConvertor:-qmin 1 -q:v 1 -vf crop=\"'if(gt(ih,iw),iw,ih)':'if(gt(iw,ih),ih,iw)'\"" \
-o "$OUTPUT_DIR/%(album)s/%(playlist_index)s - %(title)s.%(ext)s" \
--parse-metadata "playlist_index:%(track_number)s" \
--parse-metadata "%(upload_date).4s:%(meta_year)s" \
--parse-metadata "%(upload_date).4s:%(meta_date)s" \
--parse-metadata "%(artists.0)s:%(meta_album_artist)s" \
--parse-metadata "n_entries:%(meta_totaltracks)s" \
--no-warnings
exit_code=$?
if [ $exit_code -eq 0 ]; then
echo "ダウンロードが完了しました!"
echo "保存先: $OUTPUT_DIR"
else
echo "エラーが発生しました。終了コード: $exit_code"
fi
exit $exit_code
これを適当な名前で保存して(例:album-dl.sh),chmodで実行可能な権限を付けてください。
使い方は
./album-dl.sh https://music.youtube.com/playlist?list=xxxxxxx..
これで~/Musicにアルバム名でフォルダが作成され、その中にダウンロードされます。
.py版
import os
import sys
import subprocess
from pathlib import Path
def main():
# 設定
output_dir = os.path.expanduser("~/Music")
audio_format = "mp3"
# コマンドライン引数をチェック
if len(sys.argv) < 2:
print("URLを指定してね")
sys.exit(1)
# 引数をURLとして使用
url = sys.argv[1]
# 出力ディレクトリが存在しない場合は作成
os.makedirs(output_dir, exist_ok=True)
# yt-dlp コマンドを構築
cmd = [
"yt-dlp", url,
"--default-search", "ytsearch",
"--add-header", "Accept-Language:ja-JP",
"--add-metadata",
"--embed-metadata",
"-f", "bestaudio[acodec^=opus]/best",
"-x",
"--audio-format", audio_format,
"--audio-quality", "0",
"--embed-thumbnail",
"--convert-thumbnails", "jpg",
"--ppa", "ThumbnailsConvertor:-qmin 1 -q:v 1 -vf crop=\"'if(gt(ih,iw),iw,ih)':'if(gt(iw,ih),ih,iw)'\"",
"-o", f"{output_dir}/%(album)s/%(playlist_index)s - %(title)s.%(ext)s",
"--parse-metadata", "playlist_index:%(track_number)s",
"--parse-metadata", "%(upload_date).4s:%(meta_year)s",
"--parse-metadata", "%(upload_date).4s:%(meta_date)s",
"--parse-metadata", "%(artists.0)s:%(meta_album_artist)s",
"--parse-metadata", "n_entries:%(meta_totaltracks)s",
"--no-warnings"
]
# サブプロセスでコマンドを実行
try:
result = subprocess.run(cmd, check=True, text=True, stderr=subprocess.PIPE)
print("ダウンロードが完了しました!")
print(f"保存先: {output_dir}")
return 0
except subprocess.CalledProcessError as e:
print(f"エラーが発生しました。終了コード: {e.returncode}")
if e.stderr:
print(f"エラー内容: {e.stderr}")
return e.returncode
if __name__ == "__main__":
sys.exit(main())
これを適当な名前で保存してください。(例:album-dl.py)
使い方は
python album-dl.py https://music.youtube.com/playlist?list=xxxxxxx..
共通して必要な手順
いずれもpythonの実行できる環境・yt-dlp・ffmpeg・mutagenが必要です。
特徴
特徴としてはアルバムアートの埋め込み時にサムネイルを1:1にクロップして正方形にしている点です。
あとは色々メタデータをゴニョゴニョしている点ですかね…。
終わり
まぁこんなもんですかね…。
いちいち打つのとか面倒くさいのでスクリプトを書くのはいいです。
よきシェルライフを。