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

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

使用方法,把 in_dir = r’D:\158首无损珍藏版’ 改成你自己的音乐文件夹路径
如果发现文件有损坏,则会在命令行打印错误文件的路径

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

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

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}')

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-07 23:26:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-07 23:26:02       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-07 23:26:02       87 阅读
  4. Python语言-面向对象

    2023-12-07 23:26:02       96 阅读

热门阅读

  1. pcl-2 pcl结合opencv做svm分类(高程数据)

    2023-12-07 23:26:02       56 阅读
  2. jdbc4.MySQLSyntaxErrorException: Query was empty

    2023-12-07 23:26:02       57 阅读
  3. TCP通讯

    TCP通讯

    2023-12-07 23:26:02      53 阅读
  4. Mysql事务隔离级别及其底层原理

    2023-12-07 23:26:02       66 阅读
  5. chrome issue -- list

    2023-12-07 23:26:02       65 阅读