我想下载 M3U8 文件块 (HLS) 并存储该视频(解密后)以供以后查看。我做了一个演示来播放 M3U8 文件,但我想下载视频数据以供以后查看。
5 回答
您可以使用ffmpeg下载和解码 HTTP-LS 流:
ffmpeg -i http://example.org/playlist.m3u8 -c copy -bsf:a aac_adtstoasc output.mp4
有一个iOS 版本的 ffmpeg可用。
这个 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
.
还有一个 Chrome 扩展程序可以从 m3u8 块制作整个视频,这里是HLS Video Saver的链接
从 iOS 10 开始,您可以使用 AVFoundation 将 HTTP Live Streaming (HLS) 资产下载到 iOS 设备。
或使用这个 git:HLSion
网址: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)