ts文件mysql Ts文件合并 mkv_数据

一、什么是TS文件

TS(Transport Stream)文件是一种多媒体容器格式,通常用于存储音频和视频数据,特别适用于数字广播、电视和流媒体传输。TS文件的主要特点包括:

多路复用:TS文件可以包含多个音频、视频、字幕、元数据等多个流的数据。这些流被交织在一起,以便在传输和存储时能够有效地管理多种媒体。
错误恢复:TS文件具有一些错误检测和纠正功能,以确保在传输过程中发生错误时能够尽量恢复数据,从而减小影响。
时间戳:每个流在TS文件中都有时间戳信息,用于同步音频和视频,以便播放器可以正确地呈现多个流。
广泛应用:TS文件通常用于数字电视广播、有线电视、卫星电视、IPTV、DVD、蓝光光盘等领域,以及在线流媒体服务。
支持多种编码:TS文件可以容纳多种音频和视频编码格式,包括MPEG-2、H.264(MPEG-4 AVC)、AAC等。

TS文件是一种通用的多媒体容器,适用于不同类型的多媒体内容传输和存储。在流媒体领域,TS文件也常被用来存储和传输网络流媒体。例如,HTTP Live Streaming(HLS)和Dynamic Adaptive Streaming over HTTP(DASH)等流媒体协议通常使用TS文件作为其分段视频流的容器格式。

二、什么是M3U8

M3U8是一种文本文件格式,通常用于描述多媒体播放列表(Playlist)。它最初是由苹果公司开发的,用于HTTP Live Streaming(HLS)协议,但现在已经成为广泛用于流媒体传输和播放的标准格式。

M3U8文件通常包含一系列URL或文件路径,这些URL或路径指向包含音频、视频、字幕等多媒体数据的分段文件或流。这些分段文件可以根据需要从网络服务器上动态加载,以实现自适应流媒体传输。

以下是M3U8文件的一些主要特点:

分段播放:M3U8文件通常将多媒体内容分成一系列小分段,每个分段对应一小段时间的音视频数据。播放器可以选择性地加载和播放这些分段,以适应网络状况和设备性能。
自适应流媒体:M3U8文件支持自适应流媒体,即根据观众的带宽和设备性能自动选择最合适的分辨率和比特率。这允许流媒体内容在不同网络条件下以最佳质量播放。
多语言和字幕:M3U8文件可以包含多种语言的音频轨道和字幕轨道,使用户能够选择不同的音频和字幕。
加密和安全:M3U8文件支持内容加密,以保护版权和内容安全。
广泛应用:M3U8文件是流媒体传输协议(如HLS和DASH)的关键组成部分,用于在线视频播放、直播流媒体、在线音乐流媒体等应用。

M3U8文件通常由服务器生成,然后由流媒体播放器(如VLC、HLS.js、ExoPlayer等)解析和使用。这些文件使流媒体内容能够在不同平台和设备上以高质量进行播放,同时适应不同的网络条件。

ts文件mysql Ts文件合并 mkv_ts文件mysql_02

三、如何通过(pyder)获取m3u8文件,并合并ts文件呢?

1、发起网络请求获取m3u8文件
import requests

# 目标地址
URL = ’www.baidu.com'

# 发送网络请求获取网页数据
resp = requests.get(URL)

# 保存m3u8文件
with open ('自定义.m3u8', 'wb') as f:
    f.write(resp.content)

如图:

ts文件mysql Ts文件合并 mkv_大数据_03

2、发起网络请求获取ts文件
import requests

# 获取ts文件下载地址
with open ('.m3u8', 'r') as f:
    for line in f:
        # 去除首尾空格
        line = line.strip()
        # 去除#开头的解释文件
        if lis.startswith("#"):
            continue
        
        # 发送网络请求
        resp = requests.get(line)
        # 保存ts文件
        with open (f'自定义路径.ts', 'wb') as down_file:
            down_file.write(resp.content)

        down_file.close()

不出意外的话你将获得如图ts文件:

ts文件mysql Ts文件合并 mkv_流媒体_04

太难熬了终于到重点了。

ts文件mysql Ts文件合并 mkv_大数据_05

3、合并ts文件获得MP4
(1)为什么要合并ts文件?

因为ts文件是视频片段,有1秒2秒....不等长时间段,直接播放会出现卡顿,并且只支持特定播放器观看的体验非常糟糕。

ts文件mysql Ts文件合并 mkv_流媒体_06

(2)怎么合并ts文件?

合并ts文件有很多方法:

@1:最简单的  直接在电脑上打开 cmd 输入:

copy /b ts_list 名称.mp4
# 其中 ts_list 为: 1.ts+2.ts+3.ts+....

python 中实现:

import os

# 指定文件夹路径
folder_path = './as_ts/'  # 将此路径替换为您的文件夹路径

# 使用列表推导式读取文件名,并按照数字顺序排序
file_list = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]
file_list.sort(key=lambda x: int(''.join(filter(str.isdigit, x))))
 
file_list = '+'.join(file_list)
output_file = 'movie.mp4'

cmd = "copy /b file_list output_file"

os.system('cmd')

其合成的缺点是会合成目标文件夹下所有的ts文件,合成后播放可能有卡顿!

@2:最实用,但也最繁琐,效果也最佳!  主角 ffmpeg

下载安装 ffmpeg

直达链接:Builds - CODEX FFMPEG @ gyan.dev

ts文件mysql Ts文件合并 mkv_ts文件mysql_07

直接解压到你中意的位置,不用安装!不用安装!不用安装!

重要事情说一遍。

ts文件mysql Ts文件合并 mkv_python_08

复制文件路径 !

添加环境变量如图所示,将复制的路径放在2的位置

ts文件mysql Ts文件合并 mkv_流媒体_09

大功告成

ts文件mysql Ts文件合并 mkv_python_10

接下来我们就试试,

win + R 输入cmd 进入终端界面

输入 ffmpeg __vision__

ts文件mysql Ts文件合并 mkv_大数据_11

若出现上图则成功配置PATH 了!

环境到这已经完全配置妥当,接下来就是合成我们心心念念的mp4了.

cmd:命令

ffmpeg -f concat -i file_list.txt -c copy 自定义.mp4

python 实现:

import os
filePath = "./ts/"
file_list = sorted(os.listdir(filePath))
with open("./ts/file_list.txt","w+") as f:
    for file in file_list:
        f.write("file '{}'\n".format(file))

得到:

ts文件mysql Ts文件合并 mkv_数据_12

subprocess实现cmd命令操作

import os
import subprocess

# 指定目标目录
target_directory = "ts"
# 指定ffmpeg 目录,若报错则使用ffmpeg 的绝对路径
# ffmpeg = "ffmpeg-6.0-essentials_build/bin/ffmpeg.exe"
# 更改工作目录到目标目录
os.chdir(target_directory)

# 执行CMD命令(示例中是ffmpeg合并ts文件为mp4)
cmd_command = "ffmpeg  -f concat -i file_list.txt -c copy output.mp4"
process = subprocess.Popen(cmd_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

# 等待命令执行完成
process.wait()

# 打印命令的输出和错误
print("Command Output:", process.stdout.read().decode('gbk'))
print("Command Error:", process.stderr.read().decode('gbk'))

ts文件mysql Ts文件合并 mkv_数据_13

至此,windows系统.ts 文件合并输出.MP4 文件也将告一段落。

欢迎各位友友,共同探讨!遇到报错留言评论,本人会积极解决!,若有其他想要了解的python知识可留言评论。