import os
import glob
from natsort import natsorted

# 当前文件夹下的所有 mp4 路径
L = []
dir_path = r'E:\home\up'
output_dir = r'E:\home\up\1'
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}\"')

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, os.path.splitext(os.path.basename(L[0]).replace('00', '-', 1))[0][1:].upper() + '.mp4')}\"'
)

# 执行 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)

# 删除 output_dir 目录下的视频文件名中第一个英文字母之前的数字
for mp4_file in glob.glob(os.path.join(output_dir, '*.mp4')):
    file_name = os.path.basename(mp4_file)
    new_file_name = file_name[file_name.find(file_name.lstrip('0123456789')[0]):]
    os.rename(mp4_file, os.path.join(output_dir, new_file_name))

代码解释:

  1. 读取 MP4 文件路径: 代码首先读取指定目录 dir_path 下的所有 MP4 文件路径,并使用 natsorted 按自然顺序排序。
  2. 生成 ffmpeg 命令: 代码生成用于将每个 MP4 文件转换为 TS 格式的 ffmpeg 命令,并将所有命令存储在 commands 列表中。
  3. 生成合并命令: 代码生成用于将所有 TS 文件合并成一个 MP4 文件的 ffmpeg 命令,并使用 os.path.basename(L[0]).replace('00', '-', 1) 替换第一个文件名的前导数字,并将其作为输出文件名的基础。
  4. 执行 ffmpeg 命令: 代码执行所有生成的 ffmpeg 命令,将 MP4 文件转换为 TS 格式,并将所有 TS 文件合并成一个 MP4 文件。
  5. 删除 TS 文件: 代码删除所有生成的 TS 文件。
  6. 删除输出文件名中的前导数字: 代码遍历输出目录中的所有 MP4 文件,并删除每个文件名的前导数字。

注意:

  • 代码中使用了 natsorted 库,请确保已安装该库。
  • 请根据实际情况修改 dir_pathoutput_dir 路径。
  • 代码中的 replace('00', '-', 1) 可以根据需要修改,以满足不同的文件名格式需求。

代码示例:

假设 dir_pathE:\home\up,该目录下包含以下文件:

  • 01_abc.mp4
  • 02_def.mp4
  • 03_ghi.mp4

代码执行后,output_dir ( E:\home\up\1 ) 将包含以下文件:

  • ABC.mp4

代码会将所有 MP4 文件合并成一个名为 ABC.mp4 的文件,并删除所有生成的 TS 文件。同时,代码还会删除输出目录下所有 MP4 文件名中的前导数字。

使用说明:

  1. 将代码复制到 Python 文件中。
  2. 更改 dir_pathoutput_dir 路径。
  3. 运行 Python 文件。

总结:

本代码通过 Python 和 ffmpeg 实现视频合并、文件命名优化,并删除输出文件名中的前导数字,提高了视频处理的效率和便捷性。

Python 代码:删除视频文件名中前导数字,优化 ffmpeg 合并操作

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

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