21

我想下载 M3U8 文件块 (HLS) 并存储该视频(解密后)以供以后查看。我做了一个演示来播放 M3U8 文件,但我想下载视频数据以供以后查看。

4

5 回答 5

52

您可以使用ffmpeg下载和解码 HTTP-LS 流:

ffmpeg -i http://example.org/playlist.m3u8 -c copy -bsf:a aac_adtstoasc output.mp4

有一个iOS 版本的 ffmpeg可用。

于 2017-06-12T10:54:51.357 回答
5

这个 Perl 脚本是一个很好的 fetcher:https ://github.com/osklil/hls-fetch

脚步:

wget https://raw.githubusercontent.com/osklil/hls-fetch/master/hls-fetch
chmod +x hls_fetch
./hls_fetch --playlist "THE_URL"

替换THE_URL为您的 M3U8 播放列表的完整 URL(或尝试使用其他选项--help)。

奖励:如果您缺少 Perl 的 JSON 模块(就像我一样),只需运行sudo cpan JSON.

于 2017-10-02T00:05:46.920 回答
4

还有一个 Chrome 扩展程序可以从 m3u8 块制作整个视频,这里是HLS Video Saver的链接

于 2017-01-26T13:22:27.323 回答
2

从 iOS 10 开始,您可以使用 AVFoundation 将 HTTP Live Streaming (HLS) 资产下载到 iOS 设备。

https://developer.apple.com/documentation/avfoundation/media_assets_playback_and_editing/asset_manipulation/downloading_and_playing_offline_http_live_streaming_content?changes=_4

或使用这个 git:HLSion

于 2018-02-21T03:53:52.447 回答
1

网址:https ://mnmedias.api.telquebec.tv/m3u8/29880.m3u8

第1步:ffmpeg -i 'https://mnmedias.api.telquebec.tv/m3u8/29880.m3u8' -vf scale=w=1280:h=720:force_original_aspect_ratio=decrease -c:a aac -ar 48000 - b:a 128k -c:v h264 -profile:v main -crf 20 -g 48 -keyint_min 48 -sc_threshold 0 -b:v 2500k -maxrate 2675k -bufsize 3750k -hls_time 10 -hls_playlist_type vod -hls_segment_filename my_hls_video/720p_%03d .ts my_hls_video/720p.m3u8

第2步:

-i 'https://mnmedias.api.telquebec.tv/m3u8/29880.m3u8' :=> 设置https://mnmedias.api.telquebec.tv/m3u8/29880.m3u8为视频源。

-vf "scale=w=1280:h=720:force_original_aspect_ratio=decrease" :=> 将视频缩放到 1280x720 内的最大可能值,同时保持纵横比

-c:a aac -ar 48000 -b:a 128k :=> 将音频编解码器设置为 AAC,采样率为 48kHz,比特率为 128k

-c:v h264 :=> 将视频编解码器设置为 H264,这是 HLS 段的标准编解码器

-profile:v main :=> 将 H264 配置文件设置为 main - 这意味着在现代设备中的支持阅读更多

-crf 20 :=> 恒定速率因子,整体质量的高水平因子

-g 48 -keyint_min 48 :=> 重要的是每 48 帧(~2 秒)创建关键帧(I 帧) - 稍后会影响片段的正确切片和再现的对齐

-sc_threshold 0 :=> 不要在场景变化时创建关键帧 - 仅根据 -g

-b:v 2500k -maxrate 2675k -bufsize 3750k :=> 限制视频比特率,这些是特定于再现的,取决于您的内容类型 - 阅读更多

-hls_time 4 : :=> 分段目标持续时间(以秒为单位) - 实际长度受关键帧限制

-hls_playlist_type vod :=> Sdds #EXT-X-PLAYLIST-TYPE:VOD 标签并将所有片段保留在播放列表中

-hls_segment_filename beach/720p_%03d.ts :=> - 明确定义分段文件名称 my_hls_video/720p.m3u8 - 播放列表文件的路径 - 也告诉 ffmpeg 输出 HLS (.m3u8)

于 2020-07-06T11:24:43.910 回答