orestonce / m3u8d

m3u8视频下载工具, 提供windows/macos图形界面, 下载后自动将ts文件合并、转换格式为mp4
MIT License
689 stars 86 forks source link

m3u8下载后 合并出来的mp4,视频异常win界面模式、linux命令行模式 都有异常 #29

Closed jlwmkyuqd849 closed 3 months ago

jlwmkyuqd849 commented 3 months ago

https://cdn.wlcdn99.com:777/80b032fc/index.m3u8 你可以拿这个地址试下,开头、后半段异常比较多

jlwmkyuqd849 commented 3 months ago

麻烦大佬有时间修复下,感谢

orestonce commented 3 months ago

jlwmkyuqd849 commented 3 months ago

1.应该是合并的问题,下载的ts文件用ffmpeg合并出来的mp4是正常的 2.命令行模式可以设置 不删除ts和不进行mp4转换么,我先用你的工具多线程下载(多线程下载非常赞,速度特别快),然后暂时先使用ffmpeg进行合并mp4

orestonce commented 3 months ago

捕获 初步原因,是合并的问题。 ts列表本身也有毛病,00572.ts - 00575.ts 这些文件看起来是平台插播的广告,手动把广告删除掉也就没毛病了。 我使用ffmpeg 合并mp4也有问题,我使用的命令是: ffmpeg -i "concat:00571.ts|00572.ts|00573.ts|00574.ts|00575.ts|00576.ts" -c copy output.mp4

orestonce commented 3 months ago
jlwmkyuqd849 commented 3 months ago

捕获 初步原因,是合并的问题。 ts列表本身也有毛病,00572.ts - 00575.ts 这些文件看起来是平台插播的广告,手动把广告删除掉也就没毛病了。 我使用ffmpeg 合并mp4也有问题,我使用的命令是: ffmpeg -i "concat:00571.ts|00572.ts|00573.ts|00574.ts|00575.ts|00576.ts" -c copy output.mp4

1.里面确实是有广告部分,但是假如要批量自动下载,一个一个的删除广告有点麻烦 2.我用 ffmpeg 直接合并全部这样是正常的,我用的命令是 ffmpeg -f concat -safe 0 -i "./file_list.txt" -c copy "out.mp4" ,file_list.txt里面是包含广告部分的,这样合并出来的mp4是正常的, 3../file_list.txt文件里面是这样的 file 'D:\测试\downloading\346b4cfdcc1f540a241ca60c7daa4cb1abb47a3b4966ceaaebf623e64accd334\00001.ts' file 'D:\测试\downloading\346b4cfdcc1f540a241ca60c7daa4cb1abb47a3b4966ceaaebf623e64accd334\00002.ts' file 'D:\测试\downloading\346b4cfdcc1f540a241ca60c7daa4cb1abb47a3b4966ceaaebf623e64accd334\00003.ts' file 'D:\测试\downloading\346b4cfdcc1f540a241ca60c7daa4cb1abb47a3b4966ceaaebf623e64accd334\00004.ts' file 'D:\测试\downloading\346b4cfdcc1f540a241ca60c7daa4cb1abb47a3b4966ceaaebf623e64accd334\00005.ts' file 'D:\测试\downloading\346b4cfdcc1f540a241ca60c7daa4cb1abb47a3b4966ceaaebf623e64accd334\00006.ts' file 'D:\测试\downloading\346b4cfdcc1f540a241ca60c7daa4cb1abb47a3b4966ceaaebf623e64accd334\00007.ts' file 'D:\测试\downloading\346b4cfdcc1f540a241ca60c7daa4cb1abb47a3b4966ceaaebf623e64accd334\00008.ts' file 'D:\测试\downloading\346b4cfdcc1f540a241ca60c7daa4cb1abb47a3b4966ceaaebf623e64accd334\00009.ts' file 'D:\测试\downloading\346b4cfdcc1f540a241ca60c7daa4cb1abb47a3b4966ceaaebf623e64accd334\00010.ts'

jlwmkyuqd849 commented 3 months ago

1.确实是你说的,里面有广告片段导致的,

  • 命令行模式可以设置 不删除ts "SkipRemoveTs" "不删除下载的ts文件"
  • 命令行、ui都没有 "是否进行mp4转换" 的开关

感谢回复,另外一个回复https://github.com/orestonce/m3u8d/issues/29#issuecomment-1998978752 麻烦你也看下,感谢

orestonce commented 3 months ago
  1. 刚才我提交了一个新版本,命令行和ui都支持了 "SkipMergeTs 不合并ts为mp4“ 选项,默认为关闭。
  2. 昨天我开issue询问了底层合并ts为mp4的库(gomedia)作者,据解释深层次原因是增加的广告的视频宽高和正片的宽高不一样,而这种情况gomedia和ffmpeg处理形式不同。这最终导致了gomedia合并出来的视频播放异常。

目前临时解决方法

你先分析一下同网站上的不同视频使用的广告ts文件是否内容完全相同,大概率是相同的
如果相同,则先使用ts下载工具下载ts,然后按照广告文件的hash进行查找广告并删除(这一步需要你自己写个脚本)
最后使用 m3u8d 单独提供的 "合并ts (merge命令)" 功能进行合并视频。
如此可以实现批量下载。

长远解决方法

目前想到的是分析每个ts文件的宽高,然后将宽高相同的文件合并为1个mp4视频。
此方法需要gomedia的作者提供一个解析ts文件的视频宽高的方式,解析出每个ts文件宽高,然后才能继续。

如果你有更好的想法,欢迎跟帖

jlwmkyuqd849 commented 3 months ago
  1. 刚才我提交了一个新版本,命令行和ui都支持了 "SkipMergeTs 不合并ts为mp4“ 选项,默认为关闭。
  2. 昨天我开issue询问了底层合并ts为mp4的库(gomedia)作者,据解释深层次原因是增加的广告的视频宽高和正片的宽高不一样,而这种情况gomedia和ffmpeg处理形式不同。这最终导致了gomedia合并出来的视频播放异常。

目前临时解决方法

你先分析一下同网站上的不同视频使用的广告ts文件是否内容完全相同,大概率是相同的
如果相同,则先使用ts下载工具下载ts,然后按照广告文件的hash进行查找广告并删除(这一步需要你自己写个脚本)
最后使用 m3u8d 单独提供的 "合并ts (merge命令)" 功能进行合并视频。
如此可以实现批量下载。

长远解决方法

目前想到的是分析每个ts文件的宽高,然后将宽高相同的文件合并为1个mp4视频。
此方法需要gomedia的作者提供一个解析ts文件的视频宽高的方式,解析出每个ts文件宽高,然后才能继续。

如果你有更好的想法,欢迎跟帖

首先感谢大佬的,耐心排查、解答、回复

1.我目前使用了你新版本支持‘SkipMergeTs ’命令 的程序,并且配置了--SkipRemoveTs 不删除ts文件 ,下载完成后,使用了ffmpeg,对使用你的工具下载的全部ts文件,进行mp4的视频合成

2.你提到的判断视频高度和hash判断是不是广告的方法,我使用python实现,去遍历判断所有的ts文件,发现一集电视剧的全部ts文件,全部判断下来耗时太久,排查的时间远远大于了,视频下载和视频合成的时间,对于我来说,这样是不太适用的。

3.我也会继续去寻找其他判断广告的方法,有新的发现,并验证过没有问题的话,我会在此仓库打开新的issue。当然如果这个issue没有被关闭的话,我也会在下面回复

4.关于你上面提到的 “最后使用 m3u8d 单独提供的 "合并ts (merge命令)" 功能进行合并视频。” 合并ts 命令如何使用 可以提供一个使用的示例、说明吗,我看程序的help里面并没有这个命令 以及相关说明

image

yapingcat commented 3 months ago

可以提供一个选项把m3u8文件里面 EXT-X-DISCONTINUITY 之间的分片过滤掉

orestonce commented 3 months ago

可以提供一个选项把m3u8文件里面 EXT-X-DISCONTINUITY 之间的分片过滤掉

@yapingcat 这是个好主意,download 命令新增了 Skip_EXT_X_DISCONTINUITY 选项,开启后可以跳过 "EXT-X-DISCONTINUITY 之间的分片"

orestonce commented 3 months ago

@jlwmkyuqd849 这个问题有了新的解决方法,你的m3u8包含的广告片段都在 EXT-X-DISCONTINUITY 之间,目前download命令和ui都新增了 Skip_EXT_X_DISCONTINUITY 选项,可以直接不下载广告视频,最新版本已经提供此功能。

其次,你问的"合并ts (merge命令)", 这个命令是和 download命令同一级别的,具体用法是:

jlwmkyuqd849 commented 3 months ago

@jlwmkyuqd849 这个问题有了新的解决方法,你的m3u8包含的广告片段都在 EXT-X-DISCONTINUITY 之间,目前download命令和ui都新增了 Skip_EXT_X_DISCONTINUITY 选项,可以直接不下载广告视频,最新版本已经提供此功能。

其次,你问的"合并ts (merge命令)", 这个命令是和 download命令同一级别的,具体用法是:

感谢大佬的回复和支持,我去下载新版本,使用Skip_EXT_X_DISCONTINUITY命令

jlwmkyuqd849 commented 3 months ago

可以提供一个选项把m3u8文件里面 EXT-X-DISCONTINUITY 之间的分片过滤掉

感谢提供的方案