使用 ffmpeg 在 m3u8 列表中选择下载分辨率

Posted

技术标签:

【中文标题】使用 ffmpeg 在 m3u8 列表中选择下载分辨率【英文标题】:Choose download resolution in m3u8 list with ffmpeg 【发布时间】:2018-10-03 04:06:36 【问题描述】:

我正在尝试使用 ffmpeg 从 m3u8 播放列表下载视频,但我不知道如何选择下载分辨率。目前该命令正在下载最高版本

我使用的命令是:

/home/user/bin/ffmpeg -user_agent "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0" -i "https://sitevideo.com/list.m3u8" -c copy "/home/file/video.ts"

我的清单是这样的

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=400000,NAME="low"
size1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=800000,NAME="med"
size2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1900000,NAME="best"
size3.m3u8

【问题讨论】:

【参考方案1】:

您必须使用-map 选项。

ffmpeg ... -i "https://sitevideo.com/list.m3u8" -map p:1 -c copy "/home/file/video.ts"

p:1 指的是第二个节目(在这种情况下是变体播放列表)..

【讨论】:

嗨,这是我的命令,你能告诉我如何选择分辨率以在 android 中下载 String cmd="-i " + url + " -acodec copy -bsf:a aac_adtstoasc " + "- vcodec copy "+ dir.getAbsolutePath()+"/test.mp4"; @Gyan 在地图选项中,有没有一种方法可以指定索引,使其始终选择倒数第二个变体?例如,假设播放列表可能有任意数量的变体(例如:5 或 8),但我真的不知道它有多少变体。但是,我总是想映射到倒数第二个变体。 提到我上面的问题,我想使用第二个 lasat 变体的原因是因为每个变体都在提高媒体的比特率质量,但我总是想选择第二好的可用而不是最好的。 【参考方案2】:

如果你不放地图命令,它会默认采用最佳质量。

【讨论】:

我遇到了一些我认为情况并非如此的情况。有这方面的文件吗?有兴趣确切了解什么是“最佳”。 最好的意思是速度会根据你的网络宽度而变化(可能是当玩家落后太多并开始丢帧时) @Zibri 我认为它会选择分辨率最高的那个。请参阅手册中的流选择部分:它将根据以下标准选择该流: · 对于视频,它是具有最高分辨率的流 @YağmurOymak 不。它从一个(有时甚至是较低的)开始,然后适应实际带宽的最佳值。 见Automatic stream selection

以上是关于使用 ffmpeg 在 m3u8 列表中选择下载分辨率的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中使用ffmpeg-cli-wrapper使用ffmpeg下载m3u8文件?

ffmpeg 求把m3u8如优酷的转为 mp4的命令行

如何使用ffmpeg批量下载m3u8?

如何使用 FFMPEG 创建持续时间恒定的 m3u8 播放列表和 mpeg-ts 块?

FFmpeg总结用ffmpeg进行切片生成m3u8索引文件

使用ffmepg下载m3u8流媒体