目前的问题|可能是加密了但是加密协议和密钥被隐藏了

目前的问题是只爬取出来一个30分钟部分乱拼接的视频|可能是加密了但是加密协议和密钥被隐藏了|附网站地址
https://www.daquan5.net/play/?293798-14-0.html

img

                                     Preview  Name                          Headers                        Response              Initiator  X                                                     Timing
   index.m3u8                     1   #EXTM3U
                        2
   index.m3u8
                           #EXT-X-VERSION:3
                        3   #EXT-X-TARGETDURATION:5
                        4   #EXT-X-MEDIA-SEOUENCE:
                        5   #EXTINF:4.166667,
                        6   66384547730000000.ts
                        7   #EXTINF:4.166667,
                        8   66384547730000001.ts
                        9   #EXTINF:4.166667,
                       10     66384547730000002.ts
                       11     #EXTINF:3.958333,
                       12     66384547730000003.tS

有一篇关于
下载并解密的ts文件,发现一部分ts文件能播放,一部分不能播放的博客,但是此文章没有告诉隐藏的加密协议和密钥,如何处理,此章博客如下:
https://blog.csdn.net/weixin_41956627/article/details/125722027
本人参照处理过的代码如下:


import requests
import subprocess

# 获取 m3u8 文件内容
url = 'https://cdn16.yzzy-kb-cdn.com/20230726/14089_b68b569c/2000k/hls/index.m3u8'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.201.400 QQBrowser/11.9.5325.400'}
response = requests.get(url,headers=headers)
m3u8_content = response.text

# 解析 m3u8 文件,获取视频片段 URL
base_url = url.rsplit('/', 1)[0]
video_urls = []
index = 0
for line in m3u8_content.split('\n'):
    if line.startswith('#EXTINF:'):
        for i in video_urls:
            video_url = base_url + '/' + m3u8_content.split('\n')[index+1]
            video_urls.append(video_url)

# 下载视频片段并合并成一个完整的视频文件
with open(f'g:/234/output.ts', 'wb') as f:
    for video_url in video_urls:
        response = requests.get(video_url)
        f.write(response.content)

# 使用 ffmpeg 合并视频片段
subprocess.call(['ffmpeg', '-i', 'g:/234/output.ts', '-c', 'copy', 'g:/234/output.mp4'])

你已经下载好了ts文件,但是播不了是吧,ffmpeg可以将ts文件转成mp4,现在你由于没有找到ffmpeg导致没转出来mp4,那么你先解决第一个问题就是先把ffmpeg加入到环境变量中,你cd到你的py文件目录,输入ffmpeg,如果显示ffmpeg的相关信息表明环境变量加上了,能够正常访问ffmpeg,这样就不会有第一个错误,第二个问题ts播不出来,有可能是你的文件是损坏的,没有下载完成。

采用chatgpt:
从您的描述和代码中,我注意到您遇到了两个问题:ffmpeg环境变量配置问题和output.ts文件不能播放的问题。

ffmpeg环境变量配置问题:
在您的代码中,您正在使用subprocess.call()来调用ffmpeg命令,但是它显示"不是外部或内部命令"。这可能是由于系统找不到ffmpeg.exe的位置,这可能是因为环境变量没有正确配置。
为了解决这个问题,您可以尝试以下两种方法中的任意一种:

方法一:在代码中指定ffmpeg的完整路径
在调用subprocess.call()时,指定完整的ffmpeg可执行文件路径,而不是仅使用'ffmpeg'。例如,您可以将此行代码修改为:

subprocess.call(['C:/ffmpeg6.0/bin/ffmpeg.exe', '-i', 'g:/234/output.ts', '-c', 'copy', 'g:/234/output.mp4'])

请注意,您需要使用正斜杠/而不是反斜杠\来表示文件路径。

方法二:配置系统环境变量
将ffmpeg的bin目录添加到系统的环境变量中,这样在命令行中就可以直接使用ffmpeg命令了。要做到这一点,请按照以下步骤操作:

右键点击“此电脑”或“计算机”,然后选择“属性”。
在左侧导航栏中,选择“高级系统设置”。
点击“环境变量”按钮。
在“系统变量”部分,找到名为“Path”的变量,然后点击“编辑”。
在编辑环境变量窗口中,点击“新建”,然后添加ffmpeg的bin目录路径,比如:C:\ffmpeg6.0\bin。
确认所有窗口并重启计算机,以使更改生效。
现在,您应该能够在cmd中直接运行ffmpeg命令了。

output.ts文件不能播放:
这个问题可能出现在合并视频片段的过程中。请确保您的视频片段链接(video_urls)是正确的,并且已经成功下载了所有的视频片段。如果其中一个片段下载失败或链接错误,可能会导致合并后的output.ts文件无法正确播放。
您可以尝试检查video_urls列表中的链接是否有效,也可以在下载视频片段时添加一些错误处理来捕获异常。

最后,记得要使用正确的视频格式和解码器选项来处理您的视频文件。在上面的代码中,您使用了'-c copy'来保持原始编解码格式,这可能是合理的,但也可能取决于原始视频的编码类型。

如果您仍然遇到问题,可以尝试输出ffmpeg的日志以便更好地调试。在调用subprocess.call()时,将stdout和stderr参数设置为subprocess.PIPE,然后查看输出是否有任何有用的错误消息:

result = subprocess.call(['C:/ffmpeg6.0/bin/ffmpeg.exe', '-i', 'g:/234/output.ts', '-c', 'copy', 'g:/234/output.mp4'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(result.stdout.decode())
print(result.stderr.decode())

请尝试上述建议,并确保ffmpeg正确配置和视频片段下载成功后,再次运行您的代码。

确保您已经下载了适用于您的操作系统和体系结构(在您的情况下是Windows)的ffmpeg二进制文件。您可以从ffmpeg官方网站下载:https://www.ffmpeg.org/download.html

下载后,将ffmpeg存档的内容提取到您选择的文件夹中。在您的案例中,您提到了C:/ffmpeg6.0/bin,因此请确保ffmpeg.exe文件位于该文件夹中。

现在,将ffmpeg二进制文件夹(C:/ffmpeg6.0/bin)添加到系统的PATH环境变量中。这允许您的系统从命令行的任何位置查找并执行ffmpeg二进制文件。

以下是如何将文件夹添加到PATH环境变量中:

按Windows+R键打开“运行”对话框。

键入sysdm.cpl,然后按Enter键。这将打开“系统属性”窗口。

在“系统属性”窗口中,转到“高级”选项卡,然后单击“环境变量”按钮。

在“环境变量”窗口的“系统变量”部分,找到“路径”变量,然后单击“编辑”按钮。

在“编辑环境变量”窗口中,单击“新建”按钮并将路径添加到ffmpeg二进制文件夹(C:\ffmpeg6.0/bin)。

单击所有窗口上的“确定”以应用更改。

设置PATH变量后,打开一个新的命令提示符并键入ffmpeg,以确保它被识别为有效的命令。您应该可以看到控制台中打印的ffmpeg版本信息。

一旦您正确配置了ffmpeg环境变量,您就应该能够在没有任何问题的情况下运行Python脚本。该脚本将能够定位并使用ffmpeg二进制文件将视频片段成功合并到output.mp4文件中。

不是外部文件,这个是环境变量这个问题,你得把ffmpeg所在的目录添加到系统的环境变量中去


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客也许可以解决你的问题👉 :python趣味代码之ffmpeg实现视频转码+cmd动画效果
  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案如下:

    要配置FFmpeg的环境变量,以使其在CMD中运行时不显示“不是内部或外部命令”错误,您可以按照以下步骤进行操作:

    1. 首先,确定您已经将FFmpeg可执行文件(ffmpeg.exe)放置在文件夹C:\ffmpeg6.0\bin中。请确保这个文件夹路径是正确的,并且已经包含了FFmpeg的运行文件。

    2. 打开系统的环境变量配置,可以按下Win + R 键,在运行窗口中输入 sysdm.cpl,然后按下回车键。

    3. 在打开的“系统属性”窗口中,点击“高级”选项卡,然后点击“环境变量”按钮。

    4. 在环境变量窗口中,找到“系统变量”部分,并找到名为Path的变量。选中这个变量,然后点击“编辑”按钮。

    5. 在编辑系统变量窗口中,点击“新建”按钮,然后输入C:\ffmpeg6.0\bin作为新的变量值,并确保每个变量之间是用分号分隔的。

    6. 点击“确定”,然后关闭所有打开的窗口。

    7. 环境变量配置完成后,重新打开一个CMD窗口,并运行您的Python脚本。

    这样配置完环境变量后,Python中的subprocess.call(['ffmpeg', '-i', 'g:/234/output.ts', '-c', 'copy', 'g:/234/output.mp4'])命令应该可以找到FFmpeg可执行文件,并正确执行视频合并操作。

    希望这个解决方案对您有帮助!如果您有任何其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

参考gpt:
结合自己分析给你如下建议:
1.ffmpeg环境变量配置不正确,导致cmd中无法识别ffmpeg命令。您应该将ffmpeg的bin目录的完整路径添加到系统变量的Path中,并用分号分隔。
2.output.ts文件可能没有正确地合并视频片段,导致无法播放。您应该检查您的m3u8文件内容是否正确,以及您的下载和合并代码是否有误。

把整个路径添加到环境变量里面。

之前用java写过,也合成成功了,python没试过

img

FFmpeg 推流后部分播放器无法播放原因以及解决方法

如果部分播放器无法播放使用 FFmpeg 推流生成的内容,可能是因为以下几种情况造成的:

1推流格式不兼容:不同的播放器可能对支持的视频格式有所限制,请确保推流格式与播放器兼容。

2编码问题:如果编码过程中出现问题,播放器可能无法识别和播放视频内容。

3网络问题:如果网络中存在问题,播放器可能无法正常播放视频内容。


如果需要解决这个问题,可以尝试以下步骤:

1检查推流格式是否与播放器兼容。

2检查编码过程是否出现问题。

3检查网络是否存在问题。