Python3 代码优化:合并 MP4 文件并输出到自定义目录
import os
import glob
from natsort import natsorted
# 自定义输出目录
output_dir = '/home/output'
# 当前文件夹下的所有mp4路径
L = []
dir_path = '/home/downloads'
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:
new_name = ''.join([i for i in os.path.splitext(os.path.basename(l))[0] if not i.isdigit()])
ts_file = os.path.join(os.path.dirname(l), new_name + '.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), ''.join([i for i in os.path.splitext(os.path.basename(l))[0] if not i.isdigit()]) + '.ts') for l in L])}''
'-acodec copy -vcodec copy -bsf:a aac_adtstoasc '
f"'{os.path.join(output_dir, ''.join([i for i in os.path.splitext(os.path.basename(L[0]))[0] if not i.isdigit()])[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)
代码功能:
- 读取目录下的所有 MP4 文件: 使用
os.walk遍历指定目录,并将所有 MP4 文件路径存储在L列表中。 - 生成 ffmpeg 命令: 循环遍历
L列表,为每个 MP4 文件生成一个 ffmpeg 命令,用于将其转换为 TS 文件。 - 生成合并命令: 使用
concat命令,将所有 TS 文件合并成一个 MP4 文件。 - 执行 ffmpeg 命令: 使用
os.system执行生成的命令,完成文件转换和合并。 - 删除 TS 文件: 使用
glob查找所有 TS 文件并删除。
使用方法:
- 确保已安装
ffmpeg和natsort库。 - 修改代码中的
output_dir和dir_path变量,指定输出目录和 MP4 文件所在的目录。 - 运行代码。
注意事项:
- 代码使用
natsort库对文件名进行排序,确保合并后的 MP4 文件按顺序播放。 - 可以根据需要调整
concat_command中的编码参数,例如-acodec和-vcodec。 - 合并后的 MP4 文件将输出到
output_dir指定的目录。 - 代码会删除所有生成的 TS 文件。
优化说明:
- 添加了自定义输出目录的功能,将合并后的 MP4 文件输出到指定目录。
- 使用
natsort库对文件名进行排序,确保合并后的 MP4 文件按顺序播放。 - 代码中包含详细注释,方便理解每个步骤的功能。
代码示例:
假设 dir_path 为 /home/downloads,目录下包含以下 MP4 文件:
video1.mp4video2.mp4video3.mp4
运行代码后,将在 output_dir 指定的目录下生成一个名为 VIDEO.mp4 的 MP4 文件,该文件将包含所有视频片段。
其他:
- 此代码示例仅用于演示,实际使用过程中可能需要根据具体情况进行调整。
- 建议在使用
os.system执行外部命令时,使用subprocess模块进行安全处理。 - 可以使用更高级的库,例如
moviepy或opencv,进行视频处理和合并。
希望此代码示例能帮助您完成 MP4 文件合并任务。如有任何问题,请随时提问。
原文地址: https://www.cveoy.top/t/topic/nCdZ 著作权归作者所有。请勿转载和采集!