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][1:]
    file_name = file_name.strip('0123456789.-_')
    # 截取到最后一个英文字母之前
    new_file_name = ''
    for i in range(len(file_name)-1, -1, -1):
        if file_name[i].isalpha():
            new_file_name = file_name[:i]
            break
    new_file_name += '.mp4'
    os.rename(mp4_file, os.path.join(output_dir, new_file_name))

代码功能:

  1. 获取所有 MP4 文件路径: 使用 os.walk() 遍历指定目录,并获取所有 '.mp4' 文件的路径,存储在列表 L 中。
  2. 生成 ffmpeg 命令: 循环遍历 L 中的每个文件路径,生成相应的 ffmpeg 命令,将 MP4 文件转换为 TS 文件。
  3. 合并 TS 文件: 使用 ffmpeg 的 concat 功能将所有生成的 TS 文件合并成一个 MP4 文件。
  4. 删除 TS 文件: 使用 glob 模块匹配并删除所有生成的 TS 文件。
  5. 重命名输出文件: 循环遍历输出目录中的所有 MP4 文件,并进行以下操作:
    • 移除文件名中的 '00' 字符。
    • 截取文件名到最后一个英文字母之前。
    • 添加 '.mp4' 后缀。
    • 使用 os.rename() 重命名文件。

使用方法:

  1. 将代码保存为 .py 文件。
  2. 修改代码中的 dir_pathoutput_dir 变量,分别指定源目录和输出目录。
  3. 运行代码,即可完成批量重命名操作。

注意:

  • 确保系统中已安装 ffmpeg,并将其添加到环境变量中。
  • 脚本将删除所有生成的 TS 文件,请确保您不需要这些文件。
  • 脚本会重命名所有输出目录中的 MP4 文件,请确保您已经备份了源文件。
Python 批量重命名 MP4 文件,移除 '00' 并截取文件名

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

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