Python 批量修改 MP4 文件名:替换英文字母后的 '00' 为 '-'

本代码使用 Python 脚本批量修改 MP4 文件名,仅对英文字母后的 '00' 进行替换,将 '00' 替换为 '-'。代码示例演示了如何使用 glob 模块查找文件,以及如何使用 os 模块重命名文件。

import os
import glob
from natsort import natsorted

dir_path = r'E:\home\up'
output_dir = r'E:\home\up\1'

# 当前文件夹下的所有mp4路径
L = []
for root, dirs, files in os.walk(dir_path):
    files = natsorted(files)
    for file in files:
        if os.path.splitext(file)[1] == '.mp4':
            file_path = os.path.join(root, file)
            L.append(file_path)

# 生成ffmpeg命令
commands = []
for l in L:
    ts_file = os.path.join(os.path.dirname(l), os.path.splitext(os.path.basename(l))[0] + '.ts')
    commands.append(f"ffmpeg -i '{l}' -vcodec copy -acodec copy -bsf:v h264_mp4toannexb '{ts_file}'")

# 获取文件名 + '.mp4'
new_file_name = os.path.splitext(os.path.basename(L[0]))[0][1:] + '.mp4'
concat_command = (
    f'ffmpeg -i 'concat:{{'|'.join([os.path.join(os.path.dirname(l), os.path.splitext(os.path.basename(l))[0] + ".ts") for l in L])}}' ' \
    '-acodec copy -vcodec copy -bsf:a aac_adtstoasc ' \
    f"'{os.path.join(output_dir, new_file_name)}'"
)

# 执行ffmpeg命令
for command in commands:
    os.system(command)

os.system(concat_command)

# 删除ts文件
for ts_file in glob.glob(os.path.join(dir_path, '*.ts')):
    os.remove(ts_file)

# 输出文件命名
for mp4_file in glob.glob(os.path.join(output_dir, '*.mp4')):
    file_name = os.path.splitext(os.path.basename(mp4_file))[0]
    new_file_name = ''
    flag = False  # 标记是否遇到英文字母
    for i in range(len(file_name)):
        if file_name[i].isalpha():
            flag = True
        if flag and file_name[i:i+2] == '00':
            new_file_name += '-'
        else:
            new_file_name += file_name[i]
    new_file_name += '.mp4'
    os.rename(mp4_file, os.path.join(output_dir, new_file_name))

代码说明:

  1. 导入库: 导入 os 库用于文件操作,导入 glob 库用于查找文件,导入 natsort 库用于自然排序文件名。
  2. 设置路径: 定义 dir_pathoutput_dir 变量分别存储源目录和目标目录的路径。
  3. 获取所有 MP4 文件路径: 使用 os.walk() 遍历源目录,找到所有以 .mp4 结尾的文件,并存储在 L 列表中。
  4. 生成 ffmpeg 命令: 使用 ffmpeg 命令将每个 MP4 文件转换为 TS 文件,并存储在 commands 列表中。
  5. 创建合并命令: 使用 ffmpeg 命令将所有 TS 文件合并成一个 MP4 文件,并存储在 concat_command 变量中。
  6. 执行命令: 使用 os.system() 执行所有 ffmpeg 命令。
  7. 删除 TS 文件: 使用 glob 模块查找所有 TS 文件,并使用 os.remove() 删除。
  8. 修改文件名: 使用 glob 模块查找所有 MP4 文件,并使用循环遍历每个文件。
  9. 找到英文字母后 '00' 并替换: 使用 flag 变量标记是否已经遇到英文字母,如果遇到英文字母,且当前两个字符是 '00',则将 '00' 替换为 '-'。
  10. 重命名文件: 使用 os.rename() 重命名文件。

使用方法:

  1. 将代码保存为 .py 文件,例如 rename.py
  2. 修改代码中的 dir_pathoutput_dir 变量,分别设置为源目录和目标目录的路径。
  3. 在命令行中运行 python rename.py

注意事项:

  • 代码中使用 natsort 库进行自然排序,确保文件按顺序合并。
  • 代码中使用了 os.system() 执行命令,如果遇到错误,请查看命令行输出以获取更多信息。
  • 确保源目录和目标目录存在,并且你有权限访问这两个目录。

代码优化:

  • 可以使用更优雅的正则表达式来匹配文件名,以简化代码逻辑。
  • 可以使用 subprocess 模块替代 os.system(),以更安全地执行命令。
  • 可以将代码封装成函数,以提高代码可重用性。

希望本代码能够帮助你成功完成 MP4 文件名批量修改任务!

Python 批量修改 MP4 文件名:替换英文字母后的 '00' 为 '-'

原文地址: https://www.cveoy.top/t/topic/nC8t 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录