下载时播放 FFMPEG

下载时播放 FFMPEG

我的网速太慢,无法播放流媒体视频。不过,我找到了一种下载用于流媒体的 m3u8 文件的方法,我使用 ffmpeg 通过一个非常简单的命令下载和转码视频:

ffmpeg -i file.m3u8 file.mp4

这正是我想要的,因为它让我避免了流媒体过度冻结。但是,我希望在下载完成之前开始观看我想看的内容。为什么我无法在视频文件下载完成之前打开它?因为 mp4 是一种连接格式。我怎样才能让自己能够在下载时观看它?

答案1

mp4 不是连接格式。要播放 MP4,必须存在完整的 moov atom,但 moov atom 需要 mdat 中的所有帧的列表。

答案2

我认为这不仅是可能的,而且比你想象的还要简单得多。

您可以使用这个单行命令:

ffmpeg -i file.m3u8 -c:a copy -bsf:a aac_adtstoasc -c:v copy -f ismv pipe:1 | tee file.mp4 | mpv -

那里发生了什么事

FFMPEG 部分
  1. 我们正在下载所需的文件。file.m3u8在本例中。M3U8 文件通常是 H264 编码的 TS 文件的索引。因此,我推测这是具有 AAC 音频的 mp4 容器兼容片段。为了节省下载文件的时间,我添加了-c:a copy-c:v copy参数。它们将音频和视频流标记为不需要重新编码。
  2. 我们正在添加-bsf:a aac_adtstoasc以修复音频流问题。
  3. 我们正在添加输出格式,因为我们要输出到 stdout -f ismv。除了一点之外,ismv它与 相同:它还会调整以适应流媒体。更多信息请参见mp4movflagsffmpeg 格式文档
  4. 我们使用以下方式将所有内容输出到 stdoutpipe:1
三通部分
  1. 简单来说,我们只是将来自 FFMPEG 的流复制到输出文件和标准输出
MPV部分
  1. 最简单的部分。我们只是传递-一个输入文件来标记我们想要读取传入的标准输入流

就是这样。它就可以正常工作)

答案3

您可以使用 .ts 文件格式同时播放和保存内容,而无需等待视频播放完成


我的故事:我也想使用 ffmpeg 或 ffplay 做同样的事情,我试图发现我可以使用 ffplay 播放流并同时将其保存在文件中,但我找不到任何相关信息

所以我尝试将内容保存为 .mp4 并同时播放,但出现了此错误,而且我第一次看到此错误是在播放 mp4 并同时保存时

偶然间我得到了你的问题然后我了解了 concat 格式

但是几天前我尝试从 .m3u8 流保存 .ts 文件,以这种格式,我可以轻松地使用 python 保存 .ts 流并同时使用 VLC 播放,没有任何问题

通过您的问题,我了解了 concat 格式,谢谢!

请给我点赞等。这个平台上有什么可用资源(这可以增加声誉等),这样我就可以回答和帮助像我和你这样的朋友,而我的网络不受任何发帖限制。

我是这个平台的新手,所以对它了解不多,而且由于我们国家使用 NAT,我的 IP 地址因垃圾邮件等而受到限制。

相关内容