提示

返回博客列表

下载了一堆视频怎么整理?一套批量重命名与归类的思路

下载了一堆视频怎么整理?一套批量重命名与归类的思路

下载器跑完,文件夹里往往是一地鸡毛:video(1).mp4未命名.mp4缓存文件_20230801_abc.mp4……几千个文件要按"剧集/季/清晰度"归档,手动改名能改到崩溃。这活最适合写个脚本批量来。这篇文章给一套可复用的方法。

先想清楚规则

整理前先定规则,比如:

  • 电视剧:剧名 S01E01.mp4,季用两位、集用两位;
  • 按分辨率分文件夹:1080p/720p/
  • 按拍摄日期:2023-08/ 这种。

规则不定,脚本写一百遍也是乱的。

从文件名里抠信息

很多下载器文件名自带集数,用正则抓:

import re, os, shutil

def parse_ep(name):
    m = re.search(r'[Ee](\d{1,2})', name)
    return int(m.group(1)) if m else None

for f in os.listdir('.'):
    if not f.endswith('.mp4'):
        continue
    ep = parse_ep(f)
    if ep is None:
        continue
    new = f'剧集 S01E{ep:02d}.mp4'
    shutil.move(f, new)

从元数据里抠信息

文件名啥都没有,但视频里藏着拍摄时间、分辨率。用 ffprobe 取:

ffprobe -v error -select_streams v:0 \
  -show_entries stream=width,height \
  -of csv=p=0 input.mp4

Python 里可以用 subprocess 调它,按 height 分到 1080p/720p/

import subprocess, json, os

def probe(path):
    out = subprocess.check_output([
        'ffprobe', '-v', 'error', '-show_format', '-show_streams',
        '-of', 'json', path
    ])
    return json.loads(out)

info = probe('a.mp4')
h = next(s for s in info['streams'] if s['codec_type']=='video')['height']
folder = f"{h}p"
os.makedirs(folder, exist_ok=True)
shutil.move('a.mp4', os.path.join(folder, 'a.mp4'))

几个血泪教训

后果 避免
同名覆盖 文件直接没了 move 前检查目标是否存在
特殊字符 脚本报错中断 pathlib,别手拼路径
排序错乱 1,10,11,2... 用自然排序或补齐零
中途失败 半整理状态更乱 先复制到新目录,成功再删原文件

常见问题

Q:能不能边下边整理? 可以,但建议下载完再整理,避免半个文件被误判。

Q:重命名会破坏播放列表吗? 如果你用 m3u8 这类依赖文件名的,改名后得相应改清单;普通 mp4 不受影响。

Q:有没有现成工具? 有,FileBot 之类专门做媒体整理,规则图形化配置;自己写脚本则更灵活。

想亲手试试?用 VidDown 一键解析下载

粘贴视频链接即可解析,多平台支持、网页端即用;下载桌面客户端解锁海外平台本地解析,开通会员更享不限次下载。

顶部