【改】Youtube を mp3 で保存するときのルーティン【yt-dlp】
TL;DR
- yt-dlp に変更
- bash の変数を python に渡すことでダウンロード前に予めタイトルなどの ID3 情報を入力可能に
- 標準入力をパースする方法を argparse に変更してみた
- 速度比較などはしてないが Youtube のダウンロード自体は高速化した(変換で時間は食う)
はじめに
先日書いた記事で youtube-dl を活用した Youtube のダウンロードスクリプトを紹介した。 tofu.hatenadiary.com 今回はいまも活発に開発が進んでいる yt-dlp に変更したバージョンを作ったのでメモとして公開する。 前回特に工夫なく使っていたため、ID3 情報の入力を待つタイミングがダウンロードしてさらに ffmpeg によるフォーマット変更後だったが、先にやったほうが自然かなと思い修正してみた。
新しい bash スクリプト
read を使って変数を格納する。 -p でプロンプトを出す。
区切り文字を IFS=@ で変えない場合、スペースを含む入力を受け付けない。
$ cat dl-youtube.sh
#!/bin/bash
IFS=@
read -p "Enter title: " title
read -p "Enter artist: " artist
read -p "Enter album: " album
read -p "Enter filename: " filename
yt-dlp -x -f "ba[ext=webm]" --audio-format m4a $1 -o "input-youtube.m4a"
ffmpeg -i input-youtube.m4a -ab 256k output.mp3
python3 id3-edit-argparse.py -t ${title} -a ${artist} -b ${album} -f ${filename}
rm input-youtube.m4a
新しい Python スクリプト
read で入力した変数を argparse で丁寧に受け取る。
$ cat id3-edit-argparse.py
from mutagen.easyid3 import EasyID3
import argparse
import os
parser = argparse.ArgumentParser(description='add id3 tags')
parser.add_argument('-t', '--title', help='title', type=str, required=True)
parser.add_argument('-a', '--artist', help='artist', type=str, required=True)
parser.add_argument('-b', '--album', help='album', type=str, default='Youtube')
parser.add_argument('-f', '--filename', help='filename', type=str, required=True)
args = parser.parse_args()
path = 'output.mp3'
tags = EasyID3(path)
tags['title'] = args.title
tags['artist'] = args.artist
tags['album'] = args.album
tags.save()
print(tags.pprint())
newfilename = args.filename + '.mp3'
os.rename('output.mp3', newfilename)