ffmpeg:不编码,直接【合并】指定目录下的.mp4文件

通过ffmpeg,将指定目录下的所有文件夹内的mp4视频合并。

要求一定是相同编码格式的,不能h264和h265混着来!如果是重新编码再合并的话,我目前没有找到这种一口气合并的方法,只两个两个合并。

↓此代码合并的是【工作目录/子目录】内的.mp4!

#todo 不编码,直接【合并】【子目录】内的mp4!!!

import os
import subprocess
def merge_videos_in_subdirs(base_dir):
    # 遍历基目录下的所有子目录
    for root, dirs, files in os.walk(base_dir):
        for d in dirs:
            subdir = os.path.join(root, d)
            output_file = os.path.join(subdir, "temp_list.txt")
            video_files = [f for f in os.listdir(subdir) if f.endswith('.mp4')]
            video_files.sort()

            # 创建临时文件列表
            with open(output_file, 'w') as f:
                for video_file in video_files:
                    f.write("file '{}'\n".format(os.path.join(subdir, video_file)))
            
            # 合并视频
            merged_video_path = os.path.join(base_dir, "{}.mp4".format(d))
            cmd = "ffmpeg -f concat -safe 0 -i {} -c copy {}".format(output_file, merged_video_path)
            process = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
            
            # 检查是否成功合并,没有错误信息则删除原视频文件和临时文件
            if process.returncode == 0:
                for video_file in video_files:
                    os.remove(os.path.join(subdir, video_file))
                os.remove(output_file)

# 示例用法
base_directory = r"Your/working/directory"
merge_videos_in_subdirs(base_directory)

↓此代码合并的是【工作目录】内的.mp4

#todo 不编码,直接【合并】【工作目录】下的mp4!!!

import os
def merge_videos(input_dir, output_file):
    input_files = os.listdir(input_dir)
    input_files = [f for f in input_files if f.endswith('.mp4')]
    input_files.sort()
    
    with open(output_file, 'w') as outfile:
        for f in input_files:
            file_path = os.path.join(input_dir, f)
            outfile.write("file '{}'\n".format(file_path))

    os.system("ffmpeg -f concat -safe 0 -i {} -c copy {}".format(output_file, os.path.join(input_dir, "merged.mp4")))

# 示例用法
input_directory = r"Your/working/directory"
output_file = os.path.join(input_directory, 'concatenated.txt')
merge_videos(input_directory, output_file)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值