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');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/846989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

19、matlab信号预处理中的中值滤波(medfilt1()函数)和萨维茨基-戈雷滤波滤(sgolayfilt()函数)

1、中值滤波&#xff1a;medfilt1()函数 说明&#xff1a;一维中值滤波 1&#xff09;语法 语法1&#xff1a;y medfilt1(x) 将输入向量x应用3阶一维中值滤波器。 语法2&#xff1a;y medfilt1(x,n) 将一个n阶一维中值滤波器应用于x。 语法3&#xff1a;y medfilt1(x,n…

2024年项目任务管理软件大盘点:12款值得一试的主流工具

12款优秀的项目任务管理软件&#xff1a;PingCode、Worktile、AIrTable、ClickUp、Teambition、Asana、Todoist、TAPD、Monday.com、Notion、Microsoft Project、Trello。 任务管理软件对于生活繁忙的人来说极为重要。它帮助用户有效跟踪他们需要完成的各项任务&#xff0c;包括…

mysql执行拼接的sql语句

在MySQL中&#xff0c;可以使用 CONCAT() 函数来拼接SQL语句。但是&#xff0c;请注意&#xff0c;直接拼接SQL语句可能会导致SQL注入问题&#xff0c;因此应当使用参数化查询来避免这个问题。 以下是一个使用 CONCAT() 函数拼接SQL语句的例子&#xff1a; SET tableName us…

牛客热题:没有重复数字的全排列

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;没有重复数字的全排列题目链接方…

LeetCode - 二分查找(Binary Search)算法集合(Python)[左右边界|旋转数组|双列表]

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/139419653 二分查找&#xff0c;也称为折半查找&#xff0c;是一种在有序数组中查找特定元素的高效算法。其基本原理是将待搜索的区间分成两半&am…

小猪APP分发:如何轻松进行在线封装APP

你是否曾经因为需要封装一个新版本的APP而感到头疼&#xff1f;传统的封装过程往往繁琐且耗时。但是&#xff0c;别担心&#xff0c;现在有了“小猪APP分发”&#xff0c;一切变得如此简单。 小猪APP分发www.appzhu.net是一个专门提供在线APP封装服务的平台。无论你是开发者还…

Thingsboard物联网网关接入ThingsBoard物联网平台的操作说明

本文包含关于如何配置ThingsBoard 平台和连接钡铼技术R40设备的说明。ThingsBoard平台是一个用于数据收集、处理、可视化和设备管理的开源物联网平台。它通过行业标准MQTT协议实现设备连接。ThingsBoard结合了可扩展性、容错性和性能&#xff0c;因此您永远不会丢失数据。 4G L…

TP6 事件绑定、监听、订阅

事件绑定与监听 命令行生成事件类 php think make:event EventDemo 命令行生成事件监听类php think make:listener ListenerDemo 事件类可作为保存与事件相关信息的容器,如没有额外需求可以不需要定义 事件系统的所有操作都通过think\facade\Event类进行静态调用 当定义…

因为侵权只能重装系统后的必备软件List

前因&#xff1a;自从上次被adobe警告了后&#xff0c;又被source insight警告了… 正好得升级系统&#xff0c;不如直接清清爽爽的重装系统吧&#xff0c;一切回到解放前&#xff0c;重新配置电脑&#xff0c; 该文记载了我办公必备的宝贝软件们 1、Firefox-火狐浏览器&#x…

18、matlab信号生成与预处理--剔除异常值:hampel()函数

1、语法 说明&#xff1a;对输入向量x应用Hampel滤波器来检测和去除异常值。 1&#xff09;y hampel(x) 参数&#xff1a;x&#xff1a;输入信号 y:预处理的输出信号 对于x的每个样本&#xff0c;函数计算由样本及其周围的六个样本组成的窗口的中位数&#xff0c;每边三…

PHPStudy(xp 小皮)V8.1.1 通过cmd进入MySQL命令行模式

PHPStudy是一个PHP开发环境集成包&#xff0c;可用在本地电脑或者服务器上&#xff0c;该程序包集成最新的PHP/MySql/Apache/Nginx/Redis/FTP/Composer&#xff0c;一次性安装&#xff0c;无须配置即可使用。MySQL MySQL是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL A…

元宇宙NFG结合IPO线上营销模型合理降税

在当今快速演进的互联网和区块链技术背景下&#xff0c;我们见证了从移动端购物到区块链热潮&#xff0c;再到如今市场竞争日趋激烈的变革。尤其是在2024年这个关键节点&#xff0c;许多平台为了吸引用户&#xff0c;推出了各种创新的商业模式。然而&#xff0c;如何在这样的环…

ssh远程转发22端口,使用shell工具进行连接|使用服务器地址ssh连接本地ubuntu|端口映射

☆ 问题描述 我在内网主机中&#xff0c;使用docker创建了多个虚拟机&#xff0c;我希望能通过我的公网ip服务器端口进行shell访问 ★ 解决方案 我创建一个新的虚拟机为例 1. 创建并打开容器 docker run -itd --name test ubuntu2. 进入容器 docker exec -it test /bin/b…

react 中使用 swiper

最近项目中需要用到轮播图&#xff0c;我立马想起了 swiper &#xff0c;那么本文就来带大家体验一下如何在 React 中使用这个插件&#xff0c;使用的是 函数组 hooks 的形式。 需求非常简单&#xff0c;就是一个可以自动播放、点击切换的轮播图&#xff08;跑马灯&#xff0…

心理咨询系统|心理咨询系统成品开发功能

心理咨询系统开发后端设计是一个复杂且精细的过程&#xff0c;涉及多个关键领域的专业知识和技术。本文将详细探讨心理咨询系统开发后端设计的各个方面&#xff0c;包括系统架构、数据库设计、接口开发、安全性保障以及性能优化等。 首先&#xff0c;我们来谈谈系统架构。在心理…

小白跟做江科大32单片机之光敏传感器控制蜂鸣器

代码部分 1.思路 通过光敏电阻&#xff0c;控制蜂鸣器的发声 2.butter.h代码 #ifndef _BUTTER__H #define _BUTTER__H void butter_Init(void); void butter_on(void); void butter_off(void); #endif 3.butter.c代码 #include "stm32f10x.h" void butter…

【vue】@、@/、../和./的区别

&#xff1a;表示vue语法中v-on的简写&#xff1b;绑定事件的专用格式。当事件触发的时候&#xff0c;函数才会来调用&#xff1b; /&#xff1a;在build文件夹下webpack.base.conf.js找到&#xff0c;便能知道代表什么了; 这里指向src文件夹 . /&#xff1a;表示当前目录下&…

水位雨量监测站解析

水位雨量监测站是一种集水位和雨量监测功能于一体的重要气象和水文监测设备。其设计和功能旨在实时、准确地监测和记录河流水位、降雨量等关键数据&#xff0c;为气象、水文、环保等领域提供重要的信息支持。以下是关于水位雨量监测站的详细扩写&#xff1a; 系统组成 水位雨…

mysql like 查询优化

1.如果我们查询的时候用like 模糊查询%a%&#xff0c;数据量大了会查询全局&#xff0c;效率很低 SELECT * FROM Customers WHERE CustomerName LIKE %a%; 优化&#xff1a; 不会破坏索引 -步骤-:创建适合Like查询的索引ALTER TABLE users ADD INDEX idx_username (usernam…

在SAP S/4HANA中销售模块常用表信息

在SAP S/4HANA中&#xff0c;SD销售模块常用表 LIKP发货单的主数据表LIPS发货单的行项目数据表VAPMA销售组织和销售管理数据VAPMB销售管理数据&#xff08;分配&#xff09;VAPME销售和运输数据VAPMG销售数据&#xff08;成本&#xff09;VAPMK销售数据&#xff08;库存&#…