使用youtube-dl下载YouTube音频得到乱码文本如何转换为音频?
问题原因
- 核心问题是你的outtmpl配置缺少扩展名,仅设置了
'%(title)s',没有包含%(ext)s占位符。YouTube源站的音频流多为webm、m4a这类二进制容器格式,没有正确扩展名时,系统会默认识别为文本文件,用文本编辑器打开就会显示为乱码,文件本身的音频数据是正常的,没有损坏。 - 如果你没有安装ffmpeg,youtube-dl不会自动将下载的源音频转换为通用的mp3格式,只会保留源站的原生音频格式,进一步加剧了格式识别的问题。
现有文件修复方法
- 首先确认文件实际格式:执行命令
ffmpeg -i 你的下载文件名,输出信息中会明确标注文件的真实封装格式(比如webm、m4a)。 - 若不需要转码,直接给文件重命名加上对应扩展名即可,比如确认是webm格式就改成
文件名.webm,目前主流的音频播放器基本都支持webm、m4a格式,添加正确后缀后可以直接播放,不需要用到ffmpeg。 - 若需要转为通用MP3格式,执行ffmpeg命令即可完成转换:
ffmpeg -i 你的下载文件名 -acodec libmp3lame -ab 192k 输出文件名.mp3
代码优化方案(后续下载避免该问题)
修改你的ydl_opts配置,添加扩展名占位符和ffmpeg自动转码规则,后续下载会直接得到可播放的mp3文件:
from __future__ import unicode_literals import youtube_dl def my_hook(d): if d['status'] == 'finished': print('Done downloading, now converting ...') ydl_opts = { 'format': 'bestaudio/best', 'outtmpl': '%(title)s.%(ext)s', # 新增扩展名占位符 'noplaylist' : True, 'progress_hooks': [my_hook], # 新增ffmpeg转码配置 'postprocessors': [{ 'key': 'FFmpegExtractAudio', 'preferredcodec': 'mp3', 'preferredquality': '192', # 可根据需求调整为256、320 }], } with youtube_dl.YoutubeDL(ydl_opts) as ydl: ydl.download(['url'])
注意使用该优化代码前需要先在你的设备上安装ffmpeg,youtube-dl的转码功能依赖ffmpeg实现。
ffmpeg使用说明
- 仅播放已下载的文件不需要ffmpeg,添加正确扩展名即可直接播放。
- 若需要自动转码为MP3格式,或者批量处理音频文件,则必须安装ffmpeg。
内容的提问来源于stack exchange,提问作者Cheesebellies
相关产品推荐
相关产品推荐

