FFmpeg实现文件夹多视频合并

news/2024/9/24 8:23:50/
'''
ffmpeg version 6.1.1
要求: 合并的视频同分辨率、同帧率
命令: python 多文件夹多视频合并.py --input_videos D:\videos --output_videos D:\out_videos --output_txts D:\out_txt要求视频文件夹输入目录:--videos--test1001.mp4002.mp4--test2001.mp4002.mp4输出目录(自动创建文件夹):--output_videostest1_sum.mp4test2_sum.mp4--output_txtstest1.txttest2.txt
'''
import argparse
import subprocess  
import os# 创建ffmpeg输入txt
def create_input_txt(path_in, path_out_txt):for dir in os.listdir(path_in):try:with open(os.path.join(path_out_txt , '{}.txt'.format(dir)), 'w', encoding='utf-8') as f:path_dir = os.path.join(path_in, dir)for file_name in os.listdir(path_dir):if file_name.split('.')[-1] in ['mp4', 'avi']:f.write(f"file '{os.path.join(path_dir, file_name)}'\n")print(f"视频文件夹 {dir} 创建合并txt成功!")except Exception as e:print(f"视频文件夹 {dir} 创建合并txt失败!")print(e)def run(sum_txt_path, out_video_path):# 创建一个新的进程  p = subprocess.Popen(["ffmpeg", "-f", "concat", "-safe", "0", "-i", f"{sum_txt_path}", "-c", "copy", f"{out_video_path}"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)# 实时打印输出  # for line in p.stdout:  #     print(line, end='')  # end='' 防止打印额外的换行符  # 等待进程结束  p.wait()if __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('--input_videos', type=str, default='D:\videos', help='视频输入路径')parser.add_argument('--output_videos', type=str, default='D:\out_videos', help='视频保存路径,自动创建')parser.add_argument('--output_txts', type=str, default='D:\out_txt', help='ffmpeg视频txt保存路径,自动创建')args = parser.parse_args()if not os.path.exists(args.output_videos):os.mkdir(args.output_videos)if not os.path.exists(args.output_txts):os.mkdir(args.output_txts)create_input_txt(args.input_videos, args.output_txts)for txt_name in os.listdir(args.output_txts):try:if os.path.exists(os.path.join(args.output_videos, txt_name.split('.')[0] + '_sum.mp4')):print(f"{txt_name.split('.')[0] + '_sum.mp4'}已存在!, 跳过!")continuerun(os.path.join(args.output_txts, txt_name), os.path.join(args.output_videos, txt_name.split('.')[0] + '_sum.mp4'))print(f"{txt_name.split('.')[0] + '_sum.mp4'} 生成成功!")except Exception as e:print(f"{txt_name.split('.')[0] + '_sum.mp4'} 生成失败!")print(e)

参考:ffmpeg实现多视频合并


http://www.ppmy.cn/news/1503957.html

相关文章

Python酷库之旅-第三方库Pandas(034)

目录 一、用法精讲 101、pandas.Series.__array__魔法方法 101-1、语法 101-2、参数 101-3、功能 101-4、返回值 101-5、说明 101-6、用法 101-6-1、数据准备 101-6-2、代码示例 101-6-3、结果输出 102、pandas.Series.get方法 102-1、语法 102-2、参数 102-3、…

TCP为什么需要四次挥手?

tcp为什么需要四次挥手? 答案有两个: 1.将发送fin包的权限交给被动断开方的应用层去处理,也就是让程序员处理 2.接第一个答案,应用层有了发送fin的权限,可以在发送fin前继续向对端发送消息 为了搞清楚这个问题&…

Django学习(二)

get请求 练习: views.py def test_method(request):if request.method GET:print(request.GET)# 如果链接中没有参数a会报错print(request.GET[a])# 使用这个方法,当查询不到参数时,不会报错而是返回你设置的值print(request.GET.get(c,n…

后表观遗传学时代如何开展DNA甲基化研究?

DNA甲基化是一种重要的表观遗传学修饰形式,指的是DNA分子上附加甲基基团(-CH3)的过程。在甲基化的过程中,甲基基团通常被共价地添加到DNA分子的胞嘧啶(Cytosine,简称C)碱基上,形成5-…

出差一个月,回来发现USB转串口坏了4个

昨天同事问吾有没有串口线,我还奇怪。告诉我坏了好几个,我还真是震惊了,至于吗? 于是把几个坏了收集起来,挨个试了一番。结论是一个还能凑合用,三个是真坏了。所以有必要加个绝缘胶布保护一下。

HarmonyOS入门

HarmonyOS 系统定义 HarmonyOS 是一款面向万物互联时代的、全新的分布式操作系统。 Harmony提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设置,提供全场景(移动办公、运动…

Unity-微信小游戏上架流程-个人开发者

写在前面 微信上架流程个人认为比较繁琐,而且严格,时间跨度长。在微信平台上架小游戏,实际上相当于将一个Unity WebGL的工程上架到微信小程序,只不过将微信小程序的类型设置成小游戏,使用微信专门的打包工具打包导出&a…

鄂维南院士:人工智能的零数据、小数据、大数据和全数据方法

源自: 中国计算机学会 注:若出现无法显示完全的情况,可 V 搜索“人工智能技术与咨询”查看完整文章 人工智能、大数据、多模态大模型、计算机视觉、自然语言处理、数字孪生、深度强化学习 课程也可加V“人工智能技术与咨询”报名参加学习 致…