【问题标题】:How can I batch/sequentially download m3u8 files using ffmpeg?如何使用 ffmpeg 批量/顺序下载 m3u8 文件?
【发布时间】:2020-02-20 00:39:16
【问题描述】:

我目前在 Mac 上使用以下内容单独下载 m38u 播放列表:

ffmpeg -i <"URL with m3u8"> -codec copy output.ts

如果我想处理多个文件,我目前从单独的终端窗口进行。

我想做的是,在一个实例中,告诉 ffmpeg 例如从 .txt 文件中获取 URL 并按顺序下载它们,每个都有一个连续的输出名称(它们都可以放在同一个输出文件夹中)。

来自 m3u8 文件的示例代码:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:9
#EXTINF:8.333333,
segment00000.ts
#EXTINF:8.333333,
segment00001.ts
#EXTINF:8.333333,
segment00002.ts
#EXTINF:5.000000,
segment00003.ts
#EXTINF:8.333333,
segment00004.ts
#EXTINF:8.333333,
segment00005.ts

我当然安装了自制软件 - 我是新手,所以不确定这是否意味着我正在积极“使用”它来管理软件包

包含 m3u8 地址列表的文件当前位于 /Users/username/Downloads/m38u 保存 list.txt,如下所示:

https://streaming.imvbox.com/media/2825/1280x800/1280x800.m3u8
https://streaming.imvbox.com/media/2298/1280x800/1280x800.m3u8
https://streaming.imvbox.com/media/2822/1280x800/1280x800.m3u8
https://streaming.imvbox.com/media/2821/1280x800/1280x800.m3u8
https://streaming.imvbox.com/media/2820/1280x800/1280x800.m3u8
https://streaming.imvbox.com/media/2088/1280x800/1280x800.m3u8

但到目前为止,这个文件只是一个存储链接的地方 - 除了从中复制链接之外,我没有使用它。

【问题讨论】:

  • 请提供几行文件并说明您是否使用 homebrew 来管理 Mac 上的软件包 brew.sh
  • 抱歉,cmets 中的代码很难阅读,因为它们是未格式化的。您能否在您的问题下单击edit 并将其粘贴到那里。谢谢。
  • 对不起,我自己不使用m3u8,所以不太熟悉,请多多包涵。您是否还有另一个包含 m3u8 文件名称的文本文件?如果是这样,你能显示几行吗?
  • 谢谢马克。你的意思是我用来下载的 m3u8 文件的另一个样本吗?所有的 m3u8 文件都是相同的,唯一的区别是文件中的段数(对应于特定视频的长度)和 m3u8 文件所在的 URL。
  • 您想同时运行大量ffmpeg 进程。所以你去第一个终端运行 ffmpeg -i http://somewhere.m3u8 ... 然后你去第二个终端运行 ffmpeg -i http://somewhereelse.m3u8 ... ,对吗?那么http://somewhere.m3u8http://somewhereelse.m3u8 的列表在哪里?它是什么样的?

标签: macos ffmpeg m3u8


【解决方案1】:

所以,我会将以下内容保存在您的 HOME 目录中为grabAll

#!/bin/bash

HoldList="/Users/username/Downloads/m38u hold list.txt"

index=0
while read line ; do
    echo ffmpeg -i $line -codec copy output-${index}.ts
    ((index=index+1))
done < "$HoldList"

注意:如果您使用TextEdit,请务必点击菜单选项Format->Make Plain Text

然后你可以启动终端并运行:

bash grabAll

并查看它是否正在生成您想要的命令类型。它目前没有做任何事情,它只是在屏幕上说它会做什么。如果看起来不错,您只需从第 3 行到最后一行删除单词 echo 并再次运行即可。

样本输出

ffmpeg -i https://streaming.imvbox.com/media/2825/1280x800/1280x800.m3u8 -codec copy output-0.ts
ffmpeg -i https://streaming.imvbox.com/media/2298/1280x800/1280x800.m3u8 -codec copy output-1.ts
ffmpeg -i https://streaming.imvbox.com/media/2822/1280x800/1280x800.m3u8 -codec copy output-2.ts
ffmpeg -i https://streaming.imvbox.com/media/2821/1280x800/1280x800.m3u8 -codec copy output-3.ts
ffmpeg -i https://streaming.imvbox.com/media/2820/1280x800/1280x800.m3u8 -codec copy output-4.ts
ffmpeg -i https://streaming.imvbox.com/media/2088/1280x800/1280x800.m3u8 -codec copy output-5.ts

【讨论】:

  • 发生了一些奇怪的事情。最初,使用上面的答案,我运行它并在创建初始输出文件时,终端中的进程在产生大量输出后似乎停止了。它要求我输入某种“命令”。我擦掉了所有东西,然后重新开始,以防我犯了一个错误,但这一次,当我运行bash grabAll 时,什么也没有发生。按 Enter 只会在终端中返回一个新行,保留在我的主文件夹中,没有任何输出。
  • 创建一个 3 行 hold list.txt 进行测试,而不是使用其中包含数百行的文件。检查您的 grabAll 脚本是否仍然正确,或者从上面重新复制并重新保存我的代码。
  • 输出量很大,超过了帖子限制。假设我不能添加附件(?),输出暂时在这里:a.uguu.se/cYZK4u4QiB67.txt
  • 当您在终端中运行单个ffmpeg 命令时,输出应该与您通常得到的没有任何不同,确定吗?如果你让你的文本文件只包含一行,它的运行肯定和你手动运行时一样吗?
  • 为了清楚起见,grabAll 代码进入 TextEdit,我将其保存为没有 .txt 扩展名的纯文本?
猜你喜欢
  • 1970-01-01
  • 2017-08-30
  • 2017-11-21
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
相关资源
最近更新 更多