吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1436|回复: 20
收起左侧

[Python 原创] 根据视频编码时间批量重命名视频文件

[复制链接]
wzvideni 发表于 2023-11-14 16:23
本帖最后由 wzvideni 于 2023-11-14 16:27 编辑

整理收藏的小姐姐视频的时候发现很多视频命名很随意,自己命名又太麻烦,看着乱糟糟的文件又心烦,所有写了这个程序,代码如下:
[Python] 纯文本查看 复制代码
import os

from filetype import filetype
from pymediainfo import MediaInfo

video_extension = ('mp4', 'm4v', 'mov')


def RenameByEncodeTime(videos_path: str):
    """靠视频文件的编码时间来重命名当前路径下的所有视频文件"""
    # 统计操作次数个数
    count = 0
    # 遍历目录
    for root, dirs, files in os.walk(videos_path):
        # 循环目录中的文件
        for file in files:
            # 获取当前操作文件路径
            old_path = os.path.join(root, file)
            # 获取当前操作文件的拓展名
            extension = filetype.guess_extension(old_path)
            # 如果当前操作文件是视频才继续
            if extension in video_extension:
                # 解析当前操作文件的媒体信息
                media_info = MediaInfo.parse(old_path)
                # 然后遍历 media_info.tracks 中的每个轨道。
                for track in media_info.tracks:
                    # 如果轨道的类型是”General“
                    if track.track_type == 'General':
                        encode_data = track.encoded_date
                        # 编码时间不为空的情况
                        if encode_data:
                            # 去掉文件名中的“:"和“UTC ”
                            new_name = f'{encode_data.replace(":", "").replace("UTC ", "")}'
                            # 获取当前操作文件所在目录的路径
                            dir_name = os.path.dirname(old_path)
                            # 根据新文件名组合新路径
                            new_path = f'{dir_name}\\{new_name}.{extension}'
                            # 初始编码时间下存在文件
                            if os.path.exists(new_path):
                                # 判断旧文件名和新文件名的绝对路径是否相同,防止对已经完成命名的文件重复命名
                                # 先转换为小写是为了解决后缀名大写导致的判断通过的问题
                                if old_path.lower() != new_path.lower():
                                    # 重复计数
                                    repeat_count = 1
                                    # 循环判断加编号后直到不存在文件后重命名
                                    repeat_path = new_path
                                    while os.path.exists(repeat_path):
                                        repeat_count += 1
                                        repeat_path = f'{dir_name}\\{new_name}-{repeat_count}.{extension}'
                                    os.rename(old_path, repeat_path)
                                    # 重命名后输出路径信息并计数加1
                                    print(f'{old_path} -> {repeat_path}')
                                    count += 1
                                    # 如果同一个编码时间下已存在两个文件时,给使用这个初始编码时间的文件重命名加编号
                                    if repeat_count == 2:
                                        # 加编号”-1“后的路径
                                        first_path = f'{dir_name}\\{new_name}-1.{extension}'
                                        os.rename(new_path, first_path)
                                        # 重命名后输出路径信息并计数加1
                                        print(f'{new_path} -> {first_path}')
                                        count += 1
                            # 初始编码时间下是不存在文件,即为初始编码时间下的重命名
                            else:
                                # 重复计数
                                repeat_count = 2
                                # 加编号”-1“后的路径
                                first_path = f'{dir_name}\\{new_name}-1.{extension}'
                                # 不存在加编号”-1“后的文件则证明当前重命名为初始编码时间重命名
                                if not os.path.exists(first_path):
                                    # 重命名后输出路径信息并计数加1
                                    os.rename(old_path, new_path)
                                    print(f'{old_path} -> {new_path}')
                                    count += 1
                                # 如果存在加编号”-1“后的文件则证明当前编码时间下存在多个文件
                                else:
                                    # 循环判断加编号直到不存在文件后重命名
                                    repeat_path = first_path
                                    while os.path.exists(repeat_path):
                                        repeat_count += 1
                                        repeat_path = f'{dir_name}\\{new_name}-{repeat_count}.{extension}'
                                    os.rename(old_path, repeat_path)
                                    # 重命名后输出路径信息并计数加1
                                    print(f'{old_path} -> {repeat_path}')
                                    count += 1

    print(f'\n已处理次数:{count}')

if __name__ == '__main__':
    print('根据视频编码时间批量重命名视频文件')
    # 视频文件所在目录
    path = input("请输入视频文件所在目录的路径:")
    while path == '':
        path = input('路径不能为空:')
    RenameByEncodeTime(path)
    input('按任意键继续……')


运行截图:

运行截图

运行截图


注意:有些视频被二次编编码后,它的编码时间可能被删除,这些视频不会被重命名;目前只测试了mp4、m4v、mov这三种格式,代码中也限定了只修改这三种格式,需要修改其他格式请自行修改代码

exe编译程序:
https://wwur.lanzout.com/iEfec1etrvtc

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

china-ray 发表于 2023-11-14 16:56
学习了,不过。。。。

PS:我们缺的是代码吗!是被处理的“源”。
1045837055lucy 发表于 2023-11-14 16:56
真是想啥来啥,正想整理下,补个阿里。
【吾爱】根据视频编码时间批量重命名视频文件
https://www.alipan.com/s/oB9Ngsm3JxX
点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。
FruitBaby 发表于 2023-11-14 17:00
 楼主| wzvideni 发表于 2023-11-14 17:19

没有,不知道有没有其他人写过
lookfeiji 发表于 2023-11-14 18:06
又得到一个文件命名方式,以时间戳作为文件命名方式不错,嘿嘿,获得文件命名方式+1
lookfeiji 发表于 2023-11-14 18:12
怎么感觉这前面遍历文件以及获取文件名后缀是抄的GPT的?
 楼主| wzvideni 发表于 2023-11-14 18:14
lookfeiji 发表于 2023-11-14 18:12
怎么感觉这前面遍历文件以及获取文件名后缀是抄的GPT的?

对,问的chatgpt,懒得自己写递归
lookfeiji 发表于 2023-11-14 18:15
wzvideni 发表于 2023-11-14 18:14
对,问的chatgpt,懒得自己写递归

怪不得跟我抄的一毛一样,连变量名都一样
liuyu 发表于 2023-11-14 19:11
菜鸟路过 我chatgpt都不会用
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表