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

news2024/10/6 18:22:19

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【文件读取/包含】任意文件读取漏洞 afr_3

1.1漏洞描述 漏洞名称任意文件读取漏洞 afr_3漏洞类型文件读取/包含漏洞等级⭐⭐⭐⭐⭐漏洞环境docker攻击方式 1.2漏洞等级 高危 1.3影响版本 暂无 1.4漏洞复现 1.4.1.基础环境 靶场docker工具BurpSuite 1.4.2.环境搭建 1.创建docker-compose.yml文件 version: 3.2 servi…

从CentOS向KeyarchOS操作系统的wordpress应用迁移实战

文章目录 从CentOS向KeyarchOS操作系统的wordpress应用迁移实战一、使用浪潮信息X2Keyarch迁移工具完成操作系统的迁移1.1 迁移前的验证1.2 执行迁移评估1.3 开始迁移1.4 验证迁移结果1.5 迁移后的验证 二、总结 从CentOS向KeyarchOS操作系统的wordpress应用迁移实战 CentOS是一…

mysql操作 sql语句中的完整性约束有哪些,主键约束、外键约束、引用完整性约束,主键外键、唯一性

什么是约束:约束:就是约定哪些东西能填、怎么填?哪些东西不能填? 文章目录 前言:建表正文一、实体完整性约束1. 主键约束2. 唯一性约束3. 自增长约束4. 联合主键约束 二、域完整性约束三、引用完整性约束1. 外键约束 讲…

【Git企业开发】第七节.多人协作开发

文章目录 前言 一、多人协作开发 1.1 多人协作一 1.2 多人协作二 1.3 远程分支删除后,本地 git branch -a 依然能看到的解决办法 总结 前言 一、多人协作开发 1.1 多人协作一 目前,我们所完成的工作如下: 基本完成Git的所有本地库的相关操作&#xff0…

未来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…

蓝桥杯 string

string简介 string是C标准库的重要组成部分&#xff0c;主要用于字符串处理。 使用string库需要在头文件中包括该库 #include< string> string与char[]不同&#xff0c;string实现了高度的封装&#xff0c;可以很方便地完 成各种字符串的操作&#xff0c;比如拼接、截取…

Since Maven 3.8.1 http repositories are blocked

原因 高版本的maven不支持http的存储库。 解决方案 其实方法有好几种&#xff0c;比如降级maven版本至3.6.3(之前一直用的都是这个版本)&#xff0c;我选择了一种比较快(但不一定安全)的方式&#xff0c;因为3.6.3版本被我卸载了&#xff0c;这里直接修改idea的setting配置&…

【Java 进阶篇】JQuery 案例:下拉列表选中条目左右移动,打破选择的边界

在前端的舞台上&#xff0c;下拉列表是常见的用户交互元素&#xff0c;但有时候我们想要更多的交互体验。通过巧妙运用 JQuery&#xff0c;我们可以实现下拉列表中选中条目的左右移动功能&#xff0c;为用户提供更加灵活的选择方式。本篇博客将深入研究 JQuery 中实现这一功能的…

技巧篇:在Pycharm中配置集成Git

一、在Pycharm中配置集成Git 我们使用git需要先安装git工具&#xff0c;这里给出下载地址&#xff0c;下载后一路直接安装即可&#xff1a; https://git-for-windows.github.io/ 0. git中的一些常用词释义 Repository name&#xff1a; 仓库名称 Description(可选)&#xff1a;…

【数据结构】别跟我讲你不会冒泡排序

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;数据结构 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵 希望大佬指点一二 如果文章对你有帮助…

旅拍摄影技巧澳大利亚、韩国旅行攻略

欢迎关注「苏南下」 在这里分享我的旅行和影像创作心得 刚刚在腾讯内部做了一场摄影分享课&#xff1a; 《旅拍摄影技巧&澳大利亚、韩国旅行攻略》 分享了早前去两个国家的一些旅行见闻和摄影心得。我发现&#xff1a;把自己学会的东西整理出来&#xff0c;再告诉给别人这件…

67基于matlab图像处理,包括颜色和亮度调整、翻转功能、空间滤波和去噪、频域滤波和去噪、噪声添加,形态学操作、边缘检测及示波器集成的GUI图像处理。

基于matlab图像处理&#xff0c;包括颜色和亮度调整、翻转功能、空间滤波和去噪、频域滤波和去噪、噪声添加&#xff0c;形态学操作、边缘检测及示波器集成的GUI图像处理。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 67 matlab图像处理图像降噪 (xiaohon…

cubemx工程更换同系列stm32芯片型号

cubemx工程更换stm32芯片型号 实验平台 软件&#xff1a;cubemx v6.10、vscode、MDK v5.27 旧型号芯片&#xff1a;stm32f103c8t6 新型号芯片&#xff1a;stm32f103ret6 步骤 1、复制stm32工程&#xff08;包含.ioc文件&#xff09;到另一个路径&#xff0c;新路径与原路径…

STM32F103C8T6第4天:串口实验(非中断和中断)、hc01蓝牙、esp8266WIFI、4g

1. 串口基本介绍&#xff08;332.36&#xff09; 常用函数介绍 串口发送/接收函数&#xff1a; HAL_UART_Transmit(); 串口发送数据&#xff0c;使用超时管理机制HAL_UART_Receive(); 串口接收数据&#xff0c;使用超时管理机制HAL_UART_Transmit_IT(); 串口中断模式发送HAL…

栈的三道oj【C++】

栈和队列的相关oj 最小栈思路解决代码 栈的压入弹出序列思路解决代码 逆波兰表达式思路&#xff1a;解决代码 这里就挑了三道题用来熟悉栈 最小栈 力扣链接 咱们已经是高贵的C使用者了&#xff0c;不用像C语言一样从头开始造轮子了 这里我们调用了stack后&#xff0c;就会发…

SMART PLC滑动平均值滤波(指针+FOR循环应用浮点数滤波)

SMART PLC滑动平均值滤波应用于单整型数据请查看下面文章链接: 【精选】S7-200 SMART PLC信号处理系列之滑动平均值滤波FB_smart200 滤波函数_RXXW_Dor的博客-CSDN博客文章浏览阅读1.5k次。PLC相关滤波算法,专栏有很多详细讲解这里不再赘述。滑动平均值滤波和算术平均值滤波…

halcon识别验证码,先训练后识别

识别验证码图片&#xff0c;使用halcon 21.05 下面代码识别准确率100% 目录 训练&#xff0c;图片打标签使用代码创建分类器&#xff1b;识别验证码&#xff0c;检验识别效果使用“助手”加载训练文件&#xff0c;加载训练分类器&#xff0c;察看收集的字符&#xff0c;训练识别…

创建数据透视表:根据表中一列作为分类的依据统计每个类别下不同子项数量cross_tab()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 创建数据透视表&#xff1a; 根据表中一列作为分类的依据 统计每个类别下不同子项数量 cross_tab() [太阳]选择题 关于以下代码的说法中正确的是? import pandas as pd data{A:[a1,a2,a1,a2,a…

StyleGAN:彻底改变生成对抗网络的艺术

一、介绍 多年来&#xff0c;人工智能领域取得了显着的进步&#xff0c;其中最令人兴奋的领域之一是生成模型的发展。这些模型旨在生成与人类创作没有区别的内容&#xff0c;例如图像和文本。其中&#xff0c;StyleGAN&#xff08;即风格生成对抗网络&#xff09;因其创建高度逼…

数据库概率 期末复习

第一章 绪论 概述 数据 定义&#xff1a;描述事物的符号记录 地位&#xff1a;数据库中存储的基本对象 数据的语义&#xff1a;数据的含义&#xff0c;数据与其语义是不可分的 数据库 定义&#xff1a;长期储存在计算机内、有组织的、可共享的大量数据的集合 特点&…