ffmpeg - 在使用 FFMPEG 为多比特率 VOD 创建多个再现后创建主播放列表

标签 ffmpeg manifest playlist master

我正在尝试将视频上传到服务器,将视频文件转换为具有不同分辨率(即 1080p、720p、480p)的 3 个不同视频,然后使用 FFMPEG 从所有相同的分辨率中创建一个主播放列表命令?这可能吗?到目前为止,我能够上传视频并创建 3 种不同的分辨率,但我无法使用 ffmpeg 创建主 list 。到目前为止,我的 FFMPEG 命令如下所示:

 ffmpeg -hide_banner -y -i beach.mkv \
  -vf scale=w=640:h=360:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod  -b:v 800k -maxrate 856k -bufsize 1200k -b:a 96k -hls_segment_filename beach/360p_%03d.ts beach/360p.m3u8 \
  -vf scale=w=842:h=480:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -b:v 1400k -maxrate 1498k -bufsize 2100k -b:a 128k -hls_segment_filename beach/480p_%03d.ts beach/480p.m3u8 \
  -vf scale=w=1280:h=720:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -b:v 2800k -maxrate 2996k -bufsize 4200k -b:a 128k -hls_segment_filename beach/720p_%03d.ts beach/720p.m3u8 

此命令基于此页面的研究 https://docs.peer5.com/guides/production-ready-hls-vod/

我需要在 FFMPEG 命令中添加什么来生成主播放列表?

最佳答案

对于可能遇到相同问题的任何人,这是我发现使用相同编码选项生成主播放列表的方法:

ffmpeg -hide_banner -y -i beach.mkv \
  -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -ar 48000 \
  -map 0:v:0 -map 0:v:0 -map 0:v:0 -map 0:a:0 -map 0:a:0 -map 0:a:0 \
  -c:v:0 h264 -profile:v:0 main -filter:v:0 "scale=w=640:h=360:force_original_aspect_ratio=decrease" -b:v:0 800k -maxrate:v:0 856k -bufsize:v:0 1200k \
  -c:v:1 h264 -profile:v:1 main -filter:v:1 "scale=w=842:h=480:force_original_aspect_ratio=decrease" -b:v:1 1400k -maxrate:v:1 1498k -bufsize:v:1 2100k \
  -c:v:2 h264 -profile:v:2 main -filter:v:2 "scale=w=1280:h=720:force_original_aspect_ratio=decrease" -b:v:2 2800k -maxrate:v:2 2996k -bufsize:v:2 4200k \
  -c:a:0 aac -b:a:0 96k \
  -c:a:1 aac -b:a:1 128k \
  -c:a:2 aac -b:a:2 128k \
  -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" \
  -master_pl_name beach-master.m3u8 \
  -f hls -hls_time 4 -hls_playlist_type vod -hls_list_size 0 \
  -hls_segment_filename "beach-v%v/beach-%03d.ts" "beach-v%v/beach.m3u8"
如果您看到错误:
Only '-vf scale=w=640:h=360:force_original_aspect_ratio=decrease' read, ignoring remaining -vf options: Use ',' to separate filters
Only '-vf scale=w=842:h=480:force_original_aspect_ratio=decrease' read, ignoring remaining -vf options: Use ',' to separate filters
Only '-vf scale=w=1280:h=720:force_original_aspect_ratio=decrease' read, ignoring remaining -vf options: Use ',' to separate filters
Only '-af (null)' read, ignoring remaining -af options: Use ',' to separate filters
根据 this related answer 的说法,这似乎是一个误报。 .
目录结构:
beach-master.m3u8
beach-v0/
├──beach.m3u8
├──beach-000.ts
├──beach-001.ts
└──...
beach-v1/
└──...
...
如果您希望所有文件在同一目录中,请更改 hls_segment_filename至:
-hls_segment_filename "beach-v%v-%03d.ts" "beach-v%v.m3u8"
如果您想避免升级,请更改 filter选项:
-filter:v:0 "scale=w='min(640,iw)':h='min(360,ih)':force_original_aspect_ratio=decrease"
-filter:v:1 "scale=w='min(842,iw)':h='min(480,ih)':force_original_aspect_ratio=decrease"
-filter:v:2 "scale=w='min(1280,iw)':h='min(720,ih)':force_original_aspect_ratio=decrease"

关于ffmpeg - 在使用 FFMPEG 为多比特率 VOD 创建多个再现后创建主播放列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53835870/

相关文章:

node.js - 如何在 Node/Meteor 服务器上安装 FFMPEG?

jboss-as-7.1.1.Final 上的 Java .war 部署问题

c# - Visual Studio 中是否有 "Dynamic Playlists"单元测试?

android - Android 是否支持视频文件的播放列表?

powershell - 我在 powershell 模块 list 中列出要导出的变量实际上并未导出

Youtube-dl 播放列表下载停止运行 “Finished downloading playlist: playlist” 错误

bash - 遍历 URL

ffmpeg - 使用 ffmpeg,jpg 到 mp4 到 mpegts,使用 HLS M3U8 播放,只播放第一个 TS 文件 - 为什么?

ffmpeg - 使用 ffmpeg 创建循环 apng

visual-c++ - 为 VS2008 编译的二进制文件需要 DebugCRT 并行汇编,在 VS2010 中不起作用