使用 python ffmpeg 批量检查 音频文件 是否损坏或不完整

自用工具,检查下载的音乐是否有损坏 或 下载不完整

使用方法,把 in_dir = r'D:\158首无损珍藏版' 改成你自己的音乐文件夹路径

如果发现文件有损坏,则会在命令行打印错误文件的路径

注意,要求 ffmpeg 命令可以直接在命令行调用

实现原理,使用 ffmpeg 解码时,会在 stderr 打印错误信息的特性,检测 stderr 里面是否有失败相关的关键字,从而判断媒体文件是否损坏

python 复制代码
import os
from glob import glob
import subprocess
import locale


in_dir = r'D:\158首无损珍藏版'

audio_exts = ('.wav', '.flac', '.mp3', '.wma', '.ogg', '.m4a', '.ape', '.opus', '.aac', '.mka')


def is_bad_file(file):
    p = subprocess.Popen(f'ffmpeg -i "{file}" -v error -f null -', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    err_text = p.stderr.read().decode(locale.getpreferredencoding()).lower()

    is_bad = False

    for bad_text in ['error', 'failed', 'illegal']:
        if bad_text in err_text:
            is_bad = True

    return is_bad


for file in glob(f'{in_dir}/**/*.*', recursive=True):
    ext = os.path.splitext(file)[1].lower()
    if ext not in audio_exts:
        continue

    if is_bad_file(file):
        print(f'Found bad audio. {file}')
相关推荐
2501_92164949几秒前
外汇与贵金属行情 API 集成指南:WebSocket 与 REST 调用实践
网络·后端·python·websocket·网络协议·金融
落雪snowflake1 分钟前
compute_entropy函数
pytorch·python·深度学习
shenzhenNBA7 分钟前
python用openpyxl操作excel-读取或创建excel文件
python·excel·读取excel·创建excel文件
小霖家的混江龙7 分钟前
大模型如何分辨 “狼” 和 “狗” —— 词向量的训练过程
人工智能·python·llm
while(1){yan}8 分钟前
网络编程UDP
java·开发语言·网络·网络协议·青少年编程·udp·电脑常识
大猫子的技术日记9 分钟前
【工具篇】极简入门 UV Python项目管理工具
开发语言·python·uv
程序媛徐师姐11 分钟前
Python基于Flask的mooc课程情感分类系统【附源码、文档说明】
python·flask·python慕课课程情感分类·mooc课程情感分类系统·慕课课程情感分类系统·python课程情感分类系统·python课程情感分类
小年糕是糕手13 分钟前
【C++同步练习】类和对象(三)
开发语言·jvm·c++·程序人生·考研·算法·改行学it
shenzhenNBA14 分钟前
python用openpyxl操作excel-单元格操作
python·excel·单元格操作
ekprada16 分钟前
Day 39 - 图像数据与显存
人工智能·python