一、什么是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等)解析和使用。这些文件使流媒体内容能够在不同平台和设备上以高质量进行播放,同时适应不同的网络条件。
三、如何通过(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)
如图:
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文件:
太难熬了,终于到重点了。
3、合并ts文件获得MP4
(1)为什么要合并ts文件?
因为ts文件是视频片段,有1秒2秒....不等长时间段,直接播放会出现卡顿,并且只支持特定播放器观看的体验非常糟糕。
(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
直接解压到你中意的位置,不用安装!不用安装!不用安装!
重要事情说一遍。
复制文件路径 !
添加环境变量如图所示,将复制的路径放在2的位置
大功告成
接下来我们就试试,
win + R 输入cmd 进入终端界面
输入 ffmpeg __vision__
若出现上图则成功配置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))
得到:
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'))
至此,windows系统.ts 文件合并输出.MP4 文件也将告一段落。