对近期一些网站的m3u8中,分片不包含ts后缀,无法使用ffmpeg拼接问题的分析

使用ffmpeg进行拼接是下载网络流媒体的利器

但是最近发现,有多个资源站拉出的m3u8文件中,ts分片比较奇怪

从链接上看,这些分片没有传统的ts后缀,例如:

#EXTINF:6.269,
xxxxxxx2189/651d236eec8b4d20a625d482d91bfde5

手动下载会发现chrome中默认以图片格式打开

保存到本地,给其增加后缀.ts后,QuickTime可以正常播放

但使用ffprobe分析,发现识别为png,进而导致无法拼接,分析结果如下

[png_pipe @ 0x557934e58080] Stream #0: not enough frames to estimate rate; consider increasing probesize
Input #0, png_pipe, from 'test.ts':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: png, rgba(pc), 1x1, 25 tbr, 25 tbn, 25 tbc
[FORMAT]
filename=test.ts
nb_streams=1
nb_programs=0
format_name=png_pipe
format_long_name=piped png sequence
start_time=N/A
duration=N/A
size=8144042
bit_rate=N/A
probe_score=99
[/FORMAT]

使用Hexeditor打开后,发现文件头被描述为了PNG

在这种情况下,只需要将其中PNG文件头部分全部使用FF填充,即可处理该问题

填充后的效果如图

 批量代码处理的方案

判断文件开头为 89 50 4E 47 -〉说明被伪装成了PNG

 一直填充FF到 47 40    -〉从这边开始就是TS文件的内容了

更新:

最新发现,只要填充89 50 4E 47四个值就可以

需要注意:

        不可以直接删除这一段,直接删除后ffprobe提示如下错误

123.ts: Invalid data found when processing input

使用TS分析工具会提示

no valid synchronize byte found

例子代码:

# 解析伪装成png的ts
def resolve_ts():
    for i in range(1695):
        origin_ts = 'temp_file/' + str(i) + '.ts'
        resolved_ts = 'resolve_file/' + str(i) + '.ts'

        infile = open(origin_ts, "rb")  # 打开文件
        outfile = open(resolved_ts, "wb")  # 内容输出
        data = infile.read()
        outfile.write(data)
        outfile.seek(0x00)
        outfile.write(b'\xff\xff\xff\xff')
        outfile.flush()
        infile.close()  # 文件关闭
        outfile.close()
        print('resolve ' + origin_ts + ' success')

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
### 回答1: ffmpeg是一款功能强大的多媒体处理工具,它支持各种音视频格式的转换和处理。要实现自动下载m3u8视频并合并为ts格式,可以使用ffmpeg的命令行工具和一些脚本编程。 首先,需要编写一个脚本或程序来自动从指定的m3u8链接下载视频文件。可以使用编程语言(如Python)来实现这个脚本,使用HTTP请求库来获取m3u8文件的内容,并解析出各个ts分片的链接。 接下来,可以使用ffmpeg的命令行工具,利用解析到的ts分片链接来下载每个分片,并同时将它们合并为一个完整的ts视频文件。以下是示例的ffmpeg命令: ffmpeg -i "url_to_ts1" -c copy -bsf:a aac_adtstoasc output.ts 上述命令,"url_to_ts1"表示第一个ts分片的链接,可以根据实际情况替换为对应的分片链接。"-c copy"表示复制原始编码格式,"-bsf:a aac_adtstoasc"用于修复aac音频流的格式问题。"output.ts"表示最终生成的合并后的ts文件。 要实现自动下载并合并多个ts分片,可以在脚本使用循环来依次下载每个分片,并调用ffmpeg命令行工具来合并这些分片。 需要注意的是,m3u8文件通常是分段加载的,因此可能需要等待所有分片下载完成才能合并为完整的视频文件。可以在脚本增加相应的等待时间或轮询机制,确保所有分片都已下载完成后再调用ffmpeg进行合并操作。 总之,通过编写脚本或程序,结合ffmpeg命令行工具,可以实现自动下载m3u8视频并合并为ts格式的功能。 ### 回答2: ffmpeg是一个开源的音视频处理工具,它可以用来处理各种格式的音视频文件。m3u8是一种常见的音视频流媒体播放列表格式,通常用于将一个音视频文件分割成多个小的ts文件,并通过HTTP协议进行传输和播放。 要使用ffmpeg自动下载m3u8并合并为ts文件,可以按照以下步骤进行操作: 1. 下载ffmpeg并安装到本地计算机上。 2. 在命令行输入以下命令来下载m3u8文件: ```shell ffmpeg -i URL_OF_M3U8_FILE -c copy OUTPUT_FILENAME.ts ``` 其,`URL_OF_M3U8_FILE`是m3u8文件的URL地址,`OUTPUT_FILENAME`是输出的ts文件名。 命令的`-c copy`选项表示直接复制视频和音频流而不进行重新编码,以提高处理速度。 3. 执行命令后,ffmpeg将会自动下载m3u8文件,并将其合并为一个ts文件。合并过程可能需要一些时间,取决于m3u8文件的大小和网络状况。 4. 执行完成后,即可在当前目录下找到合并后的ts文件。 需要注意的是,以上命令仅适用于能够公开访问的m3u8文件。若m3u8文件需要身份验证或具有访问控制,请先确保具备合法的使用权限。 总之,使用ffmpeg自动下载m3u8并合并为ts文件,是一种便捷的处理方式,适用于需要分析或修改m3u8文件的情况。 ### 回答3: FFmpeg是一种强大的开源多媒体处理工具,它可以用于从网络上自动下载M3U8视频流,并将其合并为TS格式。M3U8是一种常用的流媒体播放列表文件格式,常用于存储视频的分段URL链接。 要使用FFmpeg自动下载并合并M3U8为TS,我们可以使用以下命令行操作: 1. 首先,我们需要安装FFmpeg工具,并将其添加到系统路径。 2. 然后,在命令行输入以下命令: ``` ffmpeg -i [M3U8链接] -c copy -bsf:a aac_adtstoasc output.ts ``` 在此命令,我们需要将[M3U8链接]替换为实际的M3U8文件的URL链接。该命令使用`-i`参数指定输入M3U8文件,`-c copy`参数用于复制视频和音频流,以保持原始质量,`-bsf:a aac_adtstoasc`参数用于处理AAC音频流的编码问题,`output.ts`为输出的合并后的TS文件名称。 3. 输入命令后,FFmpeg将自动开始下载M3U8文件并合并为TS格式。下载进度将在命令行显示。 4. 下载完成后,我们将在当前目录找到生成的TS文件,这是M3U8下载和合并的结果。 总结起来,FFmpeg利用其强大的功能,可以方便地自动下载并合并M3U8视频流为TS格式。这在处理流媒体和视频下载方面非常有用,为用户提供了一种方便快捷的方法来获取他们所需的视频内容。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值