youtube-dl.exe と ffmpeg.exe (Windows 7) で youtube からオーディオをダウンロードしようとしていますが、エンコードに問題があります。使用しようとするとメタデータを手動で解析する必要があります
--metadata-from-title "%(artist) - %(title)" --extract-audio --audio-format mp3 https://www.youtube.com/watch?v=DaU94Ld3fuM
エラー: ビデオのタイトルを "%(artist) - %(title)" として解釈できませんでした
とにかく、ffmpeg でメタデータを保存するコードをいくつか書きました。
def download(url, title_first=False):
if (0 == subprocess.call('youtube-dl --extract-audio --audio-format mp3 %s' % url)):
#saves file in current directory in format: VID_TITLE-VID_ID.mp3
video_id = url[url.find('=')+1:] #video id from URL (after ?v=)
for f in os.listdir('.'):
if video_id in f:
filename = f
break
os.rename(filename, video_id+'.mp3') #name without non-ascii chars (for tests)
video_title = filename[: filename.find(video_id)-1]
output = video_title + '.mp3'
title, artist = '', ''
try: #parsing the title
x = video_title.find('-')
artist = video_title[:x].strip()
title = video_title[x+1:].strip()
if (title_first): output = '%s - %s.mp3' % (title, artist)
except:
pass
x = 'ffmpeg -i "%s" -metadata title="%s" -metadata artist="%s" -acodec copy -id3v2_version 3 -write_id3v1 1 "%s"' \
% (video_id+'.mp3', title, artist, output)
print x
subprocess.call(x)
ファイルがダウンロードされ、指定された開始時間と継続時間にトリミングされます (上記のコードは簡略化されたバージョンです)。ファイル名は問題ありませんが、AIMP3 でファイルを開くと、ASCII 以外の文字ではなくゴミが表示されます。
最終コマンドを iso-8859-2、utf-8、および mbcs で再エンコードしようとしました。
x = x.decode('cp1250').encode('iso-8859-2')
ただし、ASCII 以外の文字はまだ読み取れません。Unicode コマンドを渡すと UnicodeEncodeError が返されます...
この問題を解決する方法はありますか?