当前位置: 首页 > news >正文

python 批量ts合并成一个mp4

首先,确保你已经安装了ffmpeg

然后再次保证所有ts文件放在同一个文件夹中,并且依次命名为 1.ts 、 2.ts 、 3.ts 、 4.ts 、 4.ts 。。。

Python完整代码如下:(ffmpeg_batch_merge_ts.py文件)

#!/usr/bin/python3
# -*- coding: UTF-8 -*-import os# # 设置包含.ts文件的目录。
# ts_directory = '/path/to/ts/files';# # 遍历目录中的所有.ts文件。
# for filename in os.listdir(ts_directory):
#     if filename.endswith('.ts'):
#         # 构建源文件和目标文件的路径。
#         source_path = os.path.join(ts_directory, filename);
#         target_path = os.path.join(ts_directory, os.path.splitext(filename)[0] + '.mp4');
#
#         # 构建ffmpeg命令并运行。
#         ffmpeg_command = f'ffmpeg -i "{source_path}" "{target_path}"';
#         os.system(ffmpeg_command);def is_no_ignore(ignore_id_tuple, the_id):for x in ignore_id_tuple:if x == the_id: return False;return True;# 定义函数。
def file_copy(source_path, target_path):print('file_copy');with open(source_path, "rb") as source_file:with open(target_path, "wb") as target_file:target_file.write(source_file.read());# 设置包含.ts文件的目录。
# ts_directory = '/path/to/ts/files';
ts_directory = '';
while len(ts_directory) == 0:# 在Python中, 你可以使用input()函数来获取键盘输入。ts_directory = input('请输入ts文件所在的目录: ');
os.system(f'cd "{ts_directory}" && pwd');
# 由于ffmpeg一次合并的ts数量不能过大, 否则合并失败, 因此需要限制。
ts_number_per_group = 100;
ts_count = 0;
while ts_count <= 0:try:ts_count = int(input('请输入ts的数量: '));except ValueError:print('[Error] 您输入的数量不是整数!')
# ts_ignore_id_list = [120, 121, 122, 123, 124, 455, 456, 457, 458, 459];
# ts_ignore_id_tuple = (120, 121, 122, 123, 124, 455, 456, 457, 458, 459);
ts_ignore_id_tuple = ();
if ts_count > ts_number_per_group:ts_group_count = (ts_count + ts_number_per_group - 1) // ts_number_per_group;print('分组组数:', ts_group_count);final_ffmpeg_input = '';for group_index in range(ts_group_count):group_id = group_index + 1;print('第', group_id, '组开始');ts_start_id = ts_number_per_group * group_index + 1;ts_end_id = ts_number_per_group * (group_index + 1);if ts_end_id > ts_count: ts_end_id = ts_count;ffmpeg_input = '';for ts_id in range(ts_start_id, ts_end_id):# print(group_id, ts_id);if is_no_ignore(ts_ignore_id_tuple, ts_id):ffmpeg_input += f'{ts_id}.ts|';else:print('Ignore_id', ts_id);else:if is_no_ignore(ts_ignore_id_tuple, ts_id):ffmpeg_input += f'{ts_end_id}.ts';else:ffmpeg_input = ffmpeg_input[0:len(ffmpeg_input) - 1];print(ffmpeg_input);if ffmpeg_input.find('|') != -1:# 一个组内ts合并。os.system(f'cd "{ts_directory}" && ffmpeg -i "concat:{ffmpeg_input}" -c copy temp_{group_id}.mp4');# 把 一个组内ts合并的mp4 转成 temp.ts 。os.system(f'cd "{ts_directory}" && ffmpeg -i temp_{group_id}.mp4 -codec copy -vbsf h264_mp4toannexb temp_{group_id}.ts');else:file_copy(f'{ts_directory}/{ffmpeg_input}', f'{ts_directory}/temp_{group_id}.ts');final_ffmpeg_input += f'temp_{group_id}.ts|';print('第', group_id, '组结束');final_ffmpeg_input = final_ffmpeg_input[0:len(final_ffmpeg_input) - 1];print(final_ffmpeg_input);# 把 合成的组temp.ts 再次合并。os.system(f'cd "{ts_directory}" && ffmpeg -i "concat:{final_ffmpeg_input}" -c copy target.mp4');
else:print('only one group');ffmpeg_input = '';for ts_id in range(1, ts_count):# print(group_id, ts_id);if is_no_ignore(ts_ignore_id_tuple, ts_id):ffmpeg_input += f'{ts_id}.ts|';else:print('Ignore_id', ts_id);ffmpeg_input += f'{ts_count}.ts';print(ffmpeg_input);# 一个组内ts合并。os.system(f'cd "{ts_directory}" && ffmpeg -i "concat:{ffmpeg_input}" -c copy target.mp4');print('track_main_exit');

相关文章:

python 批量ts合并成一个mp4

首先&#xff0c;确保你已经安装了ffmpeg。 然后再次保证所有ts文件放在同一个文件夹中&#xff0c;并且依次命名为 1.ts 、 2.ts 、 3.ts 、 4.ts 、 4.ts 。。。 Python完整代码如下&#xff1a;(ffmpeg_batch_merge_ts.py文件) #!/usr/bin/python3 # -*- coding: UTF-8 -*…...

Java | Leetcode Java题解之第129题求根节点到叶节点数字之和

题目&#xff1a; 题解&#xff1a; class Solution {public int sumNumbers(TreeNode root) {if (root null) {return 0;}int sum 0;Queue<TreeNode> nodeQueue new LinkedList<TreeNode>();Queue<Integer> numQueue new LinkedList<Integer>();…...

SpringBoot【注解 01】@Scheduled实现定时任务的串行和并行执行

在SpringBoot中&#xff0c;如果使用Scheduled注解来定义多个定时任务&#xff0c;默认情况下这些任务将会被安排在一个单线程的调度器中执行。这意味着&#xff0c;这些任务将会串行执行&#xff0c;而不是并行执行。当一个任务正在执行时&#xff0c;其他被触发的任务将会等待…...

【工具】redis的安装使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Redis简介二、Redis的安装使用三、本文总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 随着开发语言及人工智能工具的普及&am…...

汇编:数据定义数据填充

数组的定义 在32位汇编语言中&#xff0c;定义数组时&#xff0c;通常使用定义数据指令&#xff08;如 DB, DW, DD,DQ &#xff09;和标签来指定数组的名称和内容。DB定义字节数组&#xff08;每个元素占1字节&#xff09;、DW定义字数组&#xff08;每个元素占2字节&#xff…...

Python画图(多图展示在一个平面)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

python-web应用程序-Django数据库-操作表中的数据

python-web应用程序-Django数据库-操作表中的数据 一、新增数据 类.objects.create(字段名 字段值&#xff0c;字段名 字段值&#xff0c;...)导入models包 models.User.objects.create(nameyulin,sex0,info三好学生)即可对数据进行操作 二、删除数据 类.objects.filter(…...

绕过WAF(Web应用程序防火墙)--介绍、主要功能、部署模式、分类及注入绕过方式等

网站WAF是一款集网站内容安全防护、网站资源保护及网站流量保护功能为一体的服务器工具。功能涵盖了网马/木马扫描、防SQL注入、防盗链、防CC攻击、网站流量实时监控、网站CPU监控、下载线程保护、IP黑白名单管理、网页防篡改功能等模块。能够为用户提供实时的网站安全防护&…...

11.7 堆排序

目录 11.7 堆排序 11.7.1 算法流程 11.7.2 算法特性 11.7 堆排序 Tip 阅读本节前&#xff0c;请确保已学完“堆“章节。 堆排序&#xff08;heap sort&#xff09;是一种基于堆数据结构实现的高效排序算法。我们可以利用已经学过的“建堆操作”和“元素出堆操作”…...

Patchwork++:基于点云的快速、稳健的地面分割方法

1. 背景 论文发表在2022IROS&#xff0c;是Patchwork的改进版本。算法通过数学方法进行快速而鲁棒性很强的地面分割&#xff0c;在智能机器人上的可操作性非常强。通过微调算法&#xff0c;可以应用于16-beams等多种规格的激光雷达。由于激光雷达点云数据标注的难度非常大&…...

Llama改进之——分组查询注意力

引言 今天介绍LLAMA2模型引入的关于注意力的改进——分组查询注意力(Grouped-query attention,GQA)1。 Transformer中的多头注意力在解码阶段来说是一个性能瓶颈。多查询注意力2通过共享单个key和value头&#xff0c;同时不减少query头来提升性能。多查询注意力可能导致质量下…...

英伟达开源新利器NV-Embed向量模型,基于双向注意力的LLM嵌入模型,MTEB 56项任务排名第一

前言 文本嵌入模型能够将文本信息转化为稠密的向量表示&#xff0c;并在信息检索、语义相似度计算、文本分类等众多自然语言处理任务中发挥着关键作用。近年来&#xff0c;基于解码器的大型语言模型 (LLM) 开始在通用文本嵌入任务中超越传统的 BERT 或 T5 嵌入模型&#xff0c…...

JVM之【GC-垃圾清除算法】

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集算法主要分为以下几种&#xff1a; 标记-清除算法&#xff08;Mark-Sweep&#xff09;复制算法&#xff08;Copying&#xff09;标记-整理算法&#xff08;Mark-Compact&#xff09;分代收集算法&#xff08;Generational C…...

数据分析每周挑战——心衰患者特征数据集

这是一篇关于医学数据的数据分析&#xff0c;但是这个数据集数据不是很多。 背景描述 本数据集包含了多个与心力衰竭相关的特征&#xff0c;用于分析和预测患者心力衰竭发作的风险。数据集涵盖了从40岁到95岁不等年龄的患者群体&#xff0c;提供了广泛的生理和生活方式指标&a…...

单例模式(Java实现)

我的相关文章&#xff1a; JavaSE 学习记录-CSDN博客 多线程笔记-CSDN博客 单例模式&#xff08;Java实现&#xff09;-CSDN博客 JUC笔记-CSDN博客 注解与反射&#xff08;Java&#xff0c;类加载机制&#xff0c;双亲委派机制&#xff09;-CSDN博客 1. 懒汉式线程不安全 pu…...

24.面向对象六大原则

目录介绍 00.面向对象六大原则01.代码单一职责原则02.代码开放封闭原则03.代码里氏替换原则04.代码依赖倒置原则05.代码接口隔离原则06.代码迪米特原则00.面向对象六大原则 六大原则一句话介绍 单一职责原则:指一个类的功能要单一,不能包罗万象。开放封闭原则:指一个模块在扩…...

Vue3-shallowRef与shallowReactive

shallowRef 作用&#xff1a;创建一个响应式数据&#xff0c;但只对顶层属性进行响应式处理。 用法&#xff1a; let myVar shallowRef(initialValue);特点&#xff1a;只跟踪引用值的变化&#xff0c;不关心值内部的属性变化。 shallowReactive 作用&#xff1a;创建一个浅…...

CI/CD(基于ESP-IDF)

主要参考资料 B站乐鑫信息科技《【乐鑫全球开发者大会】DevCon23 #15 &#xff5c;通过 CI/CD 进行流水线开发》 pytest-embedded乐鑫文档: https://docs.espressif.com/projects/pytest-embedded/en/latest/api.html 目录 CI/CD简介乐鑫内部CI/CD测试GitLab CI/CDGitHub Actio…...

聚观早报 | 东风奕派eπ008将上市;苹果Vision Pro发布会

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 6月3日消息 东风奕派eπ008将上市 苹果Vision Pro发布会 特斯拉Model 3高性能版开售 小米14推送全新澎湃OS系统 …...

k8s牛客面经篇

k8s的pod版块: k8s的网络版块: k8s的deployment版块: k8s的service版块: k8s的探针板块: k8s的控制调度板块: k8s的日志监控板块: k8s的流量转发板块: k8s的宏观版块:...

实战:Java 日志中打印服务器 IP,快速区分多服务器日志归属

一、核心需求与背景当多台服务器&#xff08;如两台应用服务器&#xff09;运行相同代码时&#xff0c;日志文件 / 日志平台中无法直接区分日志来自哪台机器&#xff0c;排查问题时效率极低。解决思路是&#xff1a;在日志中固定输出当前服务器的 IPv4 地址&#xff0c;通过 IP…...

OpenClaw语音控制之使用 Vosk 实现离线语音控制

10.1 Vosk 简介与特性 10.1.1 什么是 Vosk Vosk 是一个离线开源语音识别工具包,基于 Kaldi 语音识别框架开发。它能够在无需网络连接的情况下,为应用程序提供实时、准确的语音识别能力。Vosk 由 Alpha Cephei Inc 开发和维护,采用 Apache 2.0 开源协议,允许在商业和个人项…...

Java协议解析慢得离谱?5个被90%团队忽略的字节级优化陷阱,今天必须修复!

第一章&#xff1a;Java协议解析慢得离谱&#xff1f;5个被90%团队忽略的字节级优化陷阱&#xff0c;今天必须修复&#xff01;Java应用在高频网络通信场景&#xff08;如金融行情推送、IoT设备接入&#xff09;中&#xff0c;常因协议解析层性能瓶颈导致端到端延迟飙升——问题…...

D模型生成:从二维图像重建三维结构

从二维图像重建三维结构&#xff1a;D模型的革命性突破 在计算机视觉和人工智能领域&#xff0c;从二维图像重建三维结构一直是一项极具挑战性的任务。传统的三维建模方法依赖多视角图像或深度传感器&#xff0c;而近年来&#xff0c;基于深度学习的D模型&#xff08;如Diffus…...

DPU应用场景系列(二)存储加速与数据卸载

1. 为什么存储需要DPU加速&#xff1f; 想象一下你正在用手机拍摄4K视频&#xff0c;每秒钟产生的数据量相当于几百张高清照片。现在把这个场景放大到数据中心——成千上万的服务器每天要处理数PB级别的数据&#xff08;1PB100万GB&#xff09;&#xff0c;传统的存储架构就像用…...

从隔离菜谱到通用烹饪指南:Cook用户体验设计的完整演进之路

从隔离菜谱到通用烹饪指南&#xff1a;Cook用户体验设计的完整演进之路 【免费下载链接】cook &#x1f372; 好的&#xff0c;今天我们来做菜&#xff01;OK, Lets Cook! 项目地址: https://gitcode.com/gh_mirrors/co/cook 在数字化时代&#xff0c;烹饪应用已成为厨房…...

如何用PHP实现线程安全的单例模式?

标准的 PHP-FPM 架构下&#xff0c;根本不存在“多线程”&#xff0c;因此也不需要“线程安全”的单例模式。 PHP 的设计哲学是 Share-Nothing&#xff08;无共享&#xff09;。 FPM 模式&#xff1a;每个请求由一个独立的进程处理。进程之间内存隔离。你在进程 A 里的单例&…...

跨平台资源下载终极方案:res-downloader如何破解多平台内容获取难题

跨平台资源下载终极方案&#xff1a;res-downloader如何破解多平台内容获取难题 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader …...

6个核心步骤构建自定义Minecraft地形世界

6个核心步骤构建自定义Minecraft地形世界 【免费下载链接】ReTerraForged a 1.19 port of https://github.com/TerraForged/TerraForged 项目地址: https://gitcode.com/gh_mirrors/re/ReTerraForged ReTerraForged是一款专为Minecraft 1.19版本设计的高级地形生成模组&…...

AI识别人,是最落后的能力——真正的智能,不是“看见你是谁”,而是“知道你在哪里”

AI识别人&#xff0c;是最落后的能力——真正的智能&#xff0c;不是“看见你是谁”&#xff0c;而是“知道你在哪里”一、开头&#xff1a;行业正在集体卷错方向过去十年&#xff0c;AI行业一直在做一件事&#xff1a;&#x1f449; 更准确地“识别人”我们不断看到这些突破&a…...