我的网速太慢,无法播放流媒体视频。不过,我找到了一种下载用于流媒体的 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 部分
- 我们正在下载所需的文件。
file.m3u8
在本例中。M3U8 文件通常是 H264 编码的 TS 文件的索引。因此,我推测这是具有 AAC 音频的 mp4 容器兼容片段。为了节省下载文件的时间,我添加了-c:a copy
和-c:v copy
参数。它们将音频和视频流标记为不需要重新编码。 - 我们正在添加
-bsf:a aac_adtstoasc
以修复音频流问题。 - 我们正在添加输出格式,因为我们要输出到 stdout
-f ismv
。除了一点之外,ismv
它与 相同:它还会调整以适应流媒体。更多信息请参见mp4
movflags
ffmpeg 格式文档 - 我们使用以下方式将所有内容输出到 stdout
pipe:1
三通部分
- 简单来说,我们只是将来自 FFMPEG 的流复制到输出文件和标准输出
MPV部分
- 最简单的部分。我们只是传递
-
一个输入文件来标记我们想要读取传入的标准输入流
就是这样。它就可以正常工作)
答案3
您可以使用 .ts 文件格式同时播放和保存内容,而无需等待视频播放完成
我的故事:我也想使用 ffmpeg 或 ffplay 做同样的事情,我试图发现我可以使用 ffplay 播放流并同时将其保存在文件中,但我找不到任何相关信息
所以我尝试将内容保存为 .mp4 并同时播放,但出现了此错误,而且我第一次看到此错误是在播放 mp4 并同时保存时
偶然间我得到了你的问题然后我了解了 concat 格式
但是几天前我尝试从 .m3u8 流保存 .ts 文件,以这种格式,我可以轻松地使用 python 保存 .ts 流并同时使用 VLC 播放,没有任何问题
通过您的问题,我了解了 concat 格式,谢谢!
请给我点赞等。这个平台上有什么可用资源(这可以增加声誉等),这样我就可以回答和帮助像我和你这样的朋友,而我的网络不受任何发帖限制。
我是这个平台的新手,所以对它了解不多,而且由于我们国家使用 NAT,我的 IP 地址因垃圾邮件等而受到限制。