You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用youtube-dl下载YouTube音频得到乱码文本如何转换为音频?

问题原因
  1. 核心问题是你的outtmpl配置缺少扩展名,仅设置了'%(title)s',没有包含%(ext)s占位符。YouTube源站的音频流多为webm、m4a这类二进制容器格式,没有正确扩展名时,系统会默认识别为文本文件,用文本编辑器打开就会显示为乱码,文件本身的音频数据是正常的,没有损坏。
  2. 如果你没有安装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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:06:03