fascinated with tofu

豆腐に魅せられて

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

参照

yt-dlpの使い方-簡易版

【シェルスクリプト】IFSで区切り文字(デリミタ)を変更する方法 | server-memo.net