根据视频编码时间批量重命名视频文件

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

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这三种格式,代码中也限定了只修改这三种格式,需要修改其他格式请自行修改代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/151452.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

μC/OS-II---消息队列管理2(os_q.c)

目录 消息队列的主要优点消息队列和消息邮箱消息队列相关操作向消息队列发送消息(FIFO)向消息队列发送消息(LIFO)向消息队列发送消息(扩展)消息队列获取/无等待清空消息队列消息队列信息获取消息队列中断等待 消息队列的主要优点 消息队列的主要优点是解耦和异步通…

nginx启动命令

普通启动 切换到nginx安装目录的sbin目录下,执行:./nginx 通过配置文件启动 ./nginx -c /usr/local/nginx/conf/nginx.conf /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 其中-c是指定配置文件,而且配置文件路径必须指定绝对路…

YOLO改进系列之注意力机制(CoordAttention模型介绍)

简介 在轻量级网络上的研究表明,通道注意力会给模型带来比较显著的性能提升,但是通道注意力通常会忽略对生成空间选择性注意力图非常重要的位置信息。因此,新加坡国立大学的提出了一种为轻量级网络设计的新的注意力机制,该机制将…

RabbitMQ之死信队列

文章目录 一、死信的概念二、死信的来源三、实战1、消息 TTL 过期2、队列达到最大长度3、消息被拒 总结 一、死信的概念 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说&#x…

转载:YOLOv8改进全新Inner-IoU损失函数:扩展到其他SIoU、CIoU等主流损失函数,带辅助边界框的损失

0、摘要 随着检测器的快速发展,边界框回归(BBR)损失函数不断进行更新和优化。然而,现有的 IoU 基于 BBR 仍然集中在通过添加新损失项来加速收敛,忽略了 IoU 损失项本身的局限性。尽管从理论上讲,IoU 损失可…

Android10 手势导航

种类 Android10 默认的系统导航有三种: 1.两个按钮的 2.三个按钮的 3.手势 它们分别对应三个包名 frameworks/base/packages/overlays/NavigationBarMode2ButtonOverlay frameworks/base/packages/overlays/NavigationBarMode3ButtonOverlay frameworks/base/packa…

怎么恢复删除的数据? 8个有效的数据恢复方法

无论您在保存备份方面多么小心,灾难有时还是会发生。有时您的备份软件无法按预期运行。 如果您的外部驱动器靠近您的设备,发生火灾/洪水/故障时,有时备份会与原始文件一起丢失。即使是云存储也不能避免故障。 还有一个事实是,我…

C#检查服务状态,以及进行服务启停

1. linux环境 linux环境通过执行bash命令直接执行: public string RunCmdLinux(string cmd){var proc new Process();System.Console.Write($"Run Linux cmd > [{cmd}] START!");proc.StartInfo.CreateNoWindow true;proc.StartInfo.FileName &…

TOUGH系列软件教程

查看原文>>>全流程TOUGH系列软件实践技术应用 TOUGH系列软件是由美国劳伦斯伯克利实验室开发的,旨在解决非饱和带中地下水、热运移的通用模拟软件。和传统地下水模拟软件Feflow和Modflow不同,TOUGH系列软件采用模块化设计和有限积分差网格剖分…

『C++成长记』C++入门——内联函数

🔥博客主页:小王又困了 📚系列专栏:C 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、内联函数 📒1.1内联函数的概念 📒1.2内联函数的特征 …

js中的instance,isPrototype和getPrototypeOf的使用,来判断类的关系

😁 作者简介:一名大四的学生,致力学习前端开发技术 ⭐️个人主页:夜宵饽饽的主页 ❔ 系列专栏:JavaScript小贴士 👐学习格言:成功不是终点,失败也并非末日,最重要的是继续…

网络类型及数据链路层的协议

网络类型 --- 根据数据链路层使用的协议来进行划分的。 MA网络 --- 多点接入网络 BMA --- 广播型多点接入网络---以太网协议 NBMA --- 非广播型多点接入网络 以太网协议 --- 需要使用mac地址对不同的主机设备进行区分和标识 --- 以太网之所以需要使用mac地址进行数据寻址&…

基于SSM的校园停车场管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

Adobe Illustrator——原创设计的宝藏软件

今天,我们来谈谈一款在Adobe系列中曾经多次给大家都提到的原创性极强的设计理念丰富的矢量图形编辑软件——Adobe Illustrator。 Adobe Illustrator,其定位是一款与Photoshop相类似对矢量图形进行编辑的软件。 Adobe Illustrator,作为全球最著…

未来10年,NAND 与DRAM依然是存储主角

根据Yole Group调查机构的数据显示,在2022年独立记忆体(Stand-alone Memory)整体市场达到了1440亿美元。其中DRAM占比55.4%,NAND占比40.8%。剩下的NOR、(NV)SRAM/FRAM、EEPROM、新型非易失存储(PCM, ReRAM and STT-MRAM)等占比3.8…

2023.11.14 关于 Spring Boot 创建和使用

目录 Spring Boot Spring Boot 项目的创建 网页版创建 Spring Boot 项目 Spring Boot 目录说明 项目运行 Spring Boot Spring Boot 是基于 Spring 设计的一个全新的框架,其目的是用来简化 Spring 的应用、初始搭建、开发的整个过程Spring Boot 就是一个整合了…

C语言入门这一篇就够了(入门篇2)

接上篇C语言入门这一篇就够了(入门篇1) 今天主要讲解基本语法,话不多说,直接上干货。 C语言语法有哪些 数据类型:C语言有多种数据类型,包括整数类型(如 int、long)、浮点类型&#x…

移动机器人路径规划(二)--- 图搜索基础,Dijkstra,A*,JPS

目录 1 图搜索基础 1.1 机器人规划的配置空间 Configuration Space 1.2 图搜索算法的基本概念 1.3 启发式的搜索算法 Heuristic search 2 A* Dijkstra算法 2.1 Dijkstra算法 2.2 A*&&Weighted A*算法 2.3 A* 算法的工程实践中的应用 3 JPS 1 图搜索基础 1.1…

Mysql中的JDBC编程

JDBC编程 1.JDBC的数据库编程2.JDBC工作原理3.JDBC使用3.1JDBC开发案例3.2JDBC使用步骤总结 4.JDBC API4.1数据库连接Connection4.2 Statement对象4.3 ResultSet对象4.4 释放 5.Java代码操作数据库 1.JDBC的数据库编程 JDBC,即Java Database Connectivity&#xff0…

20 - 欲知JVM调优先了解JVM内存模型

从今天开始,我将和你一起探讨 Java 虚拟机(JVM)的性能调优。JVM 算是面试中的高频问题了,通常情况下总会有人问到:请你讲解下 JVM 的内存模型,JVM 的性能调优做过吗? 1、为什么 JVM 在 Java 中…