【改】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)