【BUG】Python3|COPY 指令合并 ts 文件为 mp4 文件时长不对(含三种可执行源代码和解决方法)

news2024/11/15 19:50:34

文章目录

    • 前言
    • 源代码
    • FFmpeg的安装
      • 1 下载
      • 2 安装

前言

参考:

  1. python 合并 ts 视频(三种方法)
  2. 使用 FFmpeg 合并多个 ts 视频文件转为 mp4 格式

Windows 平台下,用 Python 合并 ts 文件为 mp4 文件常见的有三种方法:

  1. 调用 COPY 指令,运行copy /b *.ts output.mp4;需要注意的是[1],这里提到的 copy 指令应该运行在 cmd 中,而不是 PowerShell 中。因为 Windows 在 PowerShell 的时候运行 copy 指令会调用内置的 Copy-Item 命令,和 cmd 调用的 copy 在用法和功能上都不相同。若你非要在 PowerShell 中运行 CMD 的 COPY 指令,你可以使用cmd /c "copy /b *.ts output.mp4"
  2. Python 文件读写,使用 open, read, write 这些指令去合并,注意打开文件的方式是 rb 和 wb;
  3. 使用 ffmpeg,运行ffmpeg -f concat -safe 0 -i file.txt -c copy output.mp4,其中file.txt中每行的格式是file "xxx.ts";或者运行ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4,其中 1.ts|2.ts 需要换成自己的 ts 文件名列表,并以|分隔。

需要注意的是,以上的三种方式,都需要 TS 文件名排序按照实际的播放顺序。如果文件名与实际播放顺序不符合,那需要修改一下文件的名字。

其中前两种方式合并的视频,时长都可能出错。这也是我写这篇文章的原因。第三种方式 ffmpeg 是最稳健的。比如 copy 指令合并了 100 个 ts 文件,但是打开之后发现合并的结果竟然只有十多秒,并且更离谱的是,这十多秒放完之后,这个视频并不会暂停,而是会继续往后播放,并且播放的内容是正确的。这种情况我的建议是,大量的 ts 合并就直接使用第三种方式 ffmpeg,这就是我提出的解决办法。

源代码

这三种方式的 python 代码如下,想用哪一种方式,就把其他两种方式的代码注释掉就可以。
请把以下源代码放在 ts 文件所在的目录下。
其中,前两种方式不需要安装任何的东西。而第三种方式需要安装 ffmpeg,并添加环境变量。安装方式会在后文提到

# combine ts to mp4

import os
file_names = os.listdir(os.getcwd())

# 过滤出非空的 ts 文件
file_names = [file_name for file_name in file_names if file_name.endswith('.ts') and os.path.getsize(file_name) != 0]

# 方式一:用 COPY 指令合并
file_names_combine = '+'.join(file_names)
os.system(f'copy /b {file_names_combine} output.mp4')

# 方式二:用 python 代码合并
with open('output.mp4', 'wb') as f:
    for file_name in file_names:
        with open(file_name, 'rb') as f1:
            f.write(f1.read())

# 方式三:用 ffmpeg 合并
# 3.1 少量 ts 文件
file_names_combine = '|'.join(file_names)
os.system(f'ffmpeg -i "concat:{file_names_combine}" -c copy output.mp4')
# 3.2 大量 ts 文件
file_names_file = 'tmp_random_file.txt'
with open(file_names_file, 'w') as f:
    # file xxx.ts
    for file_name in file_names:
        f.write(f"file '{file_name}'\n")
os.system(f'ffmpeg -f concat -safe 0 -i {file_names_file} -c copy output.mp4')
os.remove(file_names_file)

这里的第三种方式中分两种情况,一种是 ts 数量比较少的,可以直接字符串拼接来完成指令;另一种是数量比较多的,建议用文件,因为第一种有数量限制。

FFmpeg的安装

1 下载

官网:Download FFmpeg
官网的下载路径比较曲折,点来点去,反正最后可以点到 Github 上:Releases · BtbN/FFmpeg-Builds,点开这个链接,然后根据自己的版本下载一个就行,如下图所示:

在这里插入图片描述

2 安装

解压,记住自己解压的位置,然后打开那个位置。比如你解压的路径,假如叫做D:\software\ffmpeg,那你就将D:\software\ffmpeg\bin添加到环境变量里面,这样你在终端里就可以找到ffmpeg指令了。

在这里插入图片描述

安装好了之后,打开 CMD,输入ffmpeg,应该能看到如下内容:

在这里插入图片描述

本账号所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/qq_46106285/article/details/140321819。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

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

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

相关文章

系统数据加密传输的实现

文章目录 1、背景2、需求3、实现思路3.1 密码加密3.2 密码解密3.3 nacos密码加密 4、相关工具类4.1 非对称加密RSA4.2 对称加密AES4.3 Nacos加解密的实现:Jasypt 5、历史数据兼容处理 1、背景 用户在浏览器发送请求数据到后台系统,期间数据在网络传输&a…

osgverse浏览器端编译

目录 1 WSL安装(Windows subsystem for Linux)2 emsdk准备3 SetUp.sh安装(osgverse源码目录下)4 显示与问题 内容 WSL安装(Windows subsystem for Linux) 安装wsl:wsl --install 将版本设置为wsl1(因为版本2比版本1慢很多):wsl --set-version ubuntu 1…

防火墙基础实验配置

一,实验拓扑 二,实验需求: 1.DMZ区内的服务器,办公区仅能在办公时间内(9:00 - 18:00)可以访问,生产区的设备全天可以访问 2.生产区不允许访问互联网,办公区…

迂回战术:“另类“全新安装 macOS 15 Sequoia beta2 的极简方法

概述 随着 WWDC 24 的胜利闭幕,Apple 平台上各种 beta 版的系统也都“跃跃欲出”,在 mac 上自然也不例外。 本次全新的 macOS 15 Sequoia(红杉)包含了诸多重磅升级,作为秃头开发者的我们怎么能不先睹为快呢&#xff1…

什么是边缘计算?创造一个更快、更智慧、更互联的世界

前言 如今,数十亿物联网传感器广泛部署在零售商店、城市街道、仓库和医院等各种场所,正在生成大量数据。从这些数据中更快地获得洞察,意味着可以改善服务、简化运营,甚至挽救生命。但要做到这一点,企业需要实时做出决策…

网络协议 — Keepalived 高可用方案

目录 文章目录 目录Keepalived 是实现了 VRRP 协议的软件Keepalived 的软件架构VRRP StackCheckersKeepalived 的配置Global configurationvrrp_scriptVRRP Configurationvrrp synchroization groupvrrp instancevirtual ip addressesvirtual routesLVS Configurationvirtual_s…

Day06-角色管理-员工管理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.编辑角色-进入行内编辑2.角色管理-行内编辑-数据缓存3.角色管理-编辑角色-确定取消4.角色管理-删除角色员工管理-页面结构6.员工管理-左侧树7.员工管理-选中首个节…

昇思学习打卡-14-ResNet50迁移学习

文章目录 数据集可视化预训练模型的使用部分实现 推理 迁移学习:在一个很大的数据集上训练得到一个预训练模型,然后使用该模型来初始化网络的权重参数或作为固定特征提取器应用于特定的任务中。本章学习使用的是前面学过的ResNet50,使用迁移学…

JAVA之开发神器——IntelliJ IDEA的下载与安装

一、IDEA是什么? IEAD是JetBrains公司开发的专用于java开发的一款集成开发环境。由于其功能强大且符合人体工程学(就是更懂你)的优点,深受java开发人员的喜爱。目前在java开发工具中占比3/4。如果你要走java开发方向,那…

985研究生8年终毕业,学位证颁发11天后被作废?

“正常是学校颁证给学院,但学院就没告诉我,还把学校颁发的证书给撤销了,这中间学院并没有书面或电话告知我本人。”34岁读研,如今已42岁的内蒙古任女士回想起求学不易,很是心酸。 2015年3月,任女士考取2015…

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

目录 一、用法精讲 34、pandas.DataFrame.to_parquet函数 34-1、语法 34-2、参数 34-3、功能 34-4、返回值 34-5、说明 34-6、用法 34-6-1、数据准备 34-6-2、代码示例 34-6-3、结果输出 35、pandas.read_sql_table函数 35-1、语法 35-2、参数 35-3、功能 35-4…

【Neo4j】实战 (数据库技术丛书)学习笔记

Neo4j实战 (数据库技术丛书) 第1章演示了应用Neo4j作为图形数据库对改进性能和扩展性的可能性, 也讨论了对图形建模的数据如何正好适应于Neo4j数据模型,现在到了该动 手实践的时间了。第一章 概述 Neo4j将数据作为顶点和边存储(或者用Neo4j术语,节点和关系存 储)。用户被定…

C++初学者指南-5.标准库(第一部分)--顺序容器

C初学者指南-5.标准库(第一部分)–顺序容器 文章目录 C初学者指南-5.标准库(第一部分)--顺序容器标准顺序容器常见特点规律性&#xff1a;复制&#xff0c;分配&#xff0c;比较类型推导(C17)常用接口部分 array<T,size>vector\<T>C 的默认容器快速回顾迭代器范围插…

微调Qwen2大语言模型加入领域知识

这里写自定义目录标题 试用Qwen2做推理安装LLaMA-Factory使用自有数据集微调Qwen2验证微调效果 试用Qwen2做推理 参考&#xff1a;https://qwen.readthedocs.io/en/latest/getting_started/quickstart.html from transformers import AutoModelForCausalLM, AutoTokenizer de…

短视频矩阵系统多账号搭建技术源码(saas开发者技术独立搭建)

在构建云服务环境以部署虚拟机方面&#xff0c;以Amazon Web Services&#xff08;AWS&#xff09;为示例&#xff0c;需采购并配置适当数量的EC2实例以及相关网络设施。 接下来&#xff0c;根据业务需求&#xff0c;应创建多个社交媒体平台如抖音和快手的官方账户&#xff0c;…

便宜SSL证书有哪些平台推荐 域名SSL证书作用

在数字化时代&#xff0c;网络安全已成为我们日常生活和工作中不可或缺的一部分。 申请便宜SSL证书步骤 1、登录来此加密网站&#xff0c;输入域名&#xff0c;可以勾选泛域名和包含根域。 2、选择加密方式&#xff0c;一般选择默认就可以了&#xff0c;也可以自定义CSR。 3…

css 自定义变量 var()

现在新版本的UI框架&#xff0c;基本使用CSS变量 css的一个函数&#xff1a;var()&#xff0c;此函数在有些场景下能优化不少代码量。 var() 介绍 借用下W3C的定义&#xff1a; var() 函数用于插入自定义的属性值&#xff0c;如果一个属性值在多处被使用&#xff0c;该方法就…

MySQL--函数、约束、多表查询

函数 函数指一段可以直接被另一段程序调用的程序或代码 字符串函数、数值函数、日期函数、流程函数 字符串函数 数值函数 日期函数 datediff&#xff08;date1,date2&#xff09;&#xff1a;date1-date2 流程函数 约束 概念&#xff1a;约束是作用于表中字段上的规则&…

半导体硅太阳能电池基板的湿化学处理及电子界面特性

硅(Si)在半导体器件制造中的大多数技术应用都是基于这种材料的特定界面性能。二氧化硅&#xff08;二氧化硅&#xff09;可以通过简单的氧化方法在硅表面制备&#xff0c;其特点是高化学和电稳定性。晶体硅在光伏应用占主导地位&#xff0c;全球近90%的太阳能电池生产是基于多晶…

携手并进 共创未来丨东软睿驰与中国移动上海产业研究院达成战略合作

2024年7月10日&#xff0c;东软睿驰与中国移动上海产业研究院(以下简称“上研院”)在沈阳隆重举行战略合作签约仪式。东软睿驰董事长兼CEO王勇峰、高级副总裁邢志刚与上研院董事长王建中、副总经理黄刚等领导出席签约仪式。 图为东软睿驰与上研院战略合作签约仪式现场 东软睿驰…