【问题标题】:How to combine video/chunk segments of ABR video into a single seamless video?如何将 ABR 视频的视频/块片段组合成一个无缝视频?
【发布时间】:2019-08-21 21:20:05
【问题描述】:

我想从浏览器上运行的播放器 (HLS/DASH) 中捕获自适应比特率 (ABR) 视频的片段/块,以便将所有块组合成一个无缝视频,以便稍后分析 QoE(质量整个视频的体验),即VMAF。为此,所有片段都必须是同一视频文件的一部分。

通常可以在基于 linux 的操作系统上使用 cat 命令来组合相同分辨率的视频块,例如,

cat init.mp4 video1.mp4 video2.mp4 > fullvideo.mp4 

但是我想要的是在 ABR 播放器在配置文件/分辨率之间切换时合并视频,例如,

  • 800x600init.mp4
  • 800x600video1.mp4
  • 1920x1024init.mp4
  • 1920x1024video2.mp4
  • 1920x1024video3.mp4

在 HLS/DASH 播放器上,切换过程无缝进行,我想在组合文件中重现此行为。但是,当我尝试使用cat 组合所有片段时,输出无法被 VLC 等 mp4 播放器正确处理。据我了解,.mp4 格式似乎只支持以相同分辨率连接视频帧。

顺便说一句,如果我通过按分辨率对片段进行分组来进行连接,则视频播放器可以正确再现输出文件。

下面是我最初尝试的示例。文件的顺序由播放器请求视频片段的顺序给出。

[administrator@PlayerMedia mediaFiles]$ cat NGK_The_Owl_Y_Co_T1_E02_HD_STR-video=800000-init.mp4 \
NGK_The_Owl_Y_Co_T1_E02_HD_STR-video=800000-0.mp4 \
NGK_The_Owl_Y_Co_T1_E02_HD_STR-video=5993000-init.mp4 \
NGK_The_Owl_Y_Co_T1_E02_HD_STR-video=5993000-60060.mp4 \
NGK_The_Owl_Y_Co_T1_E02_HD_STR-video=5993000-120120.mp4 > final.mp4

输出文件 final.mp4 仅包含第一个 init.mp4 @ bitrate=800000 中包含的元数据,因此比特率=5993000(较高分辨率)的下一个视频块显示为损坏的视频。

我想知道录制视频的最佳选择是什么,包括 HLS 或 DASH 等 ABR 协议的播放器所经历的分辨率变化。

【问题讨论】:

    标签: video mp4 http-live-streaming


    【解决方案1】:

    用 ffmpeg 解决。

    首先,所有 HLS 片段都必须按照播放顺序进行下载。然后,必须将每个片段放大到只有一个分辨率,即 1920x1080。这可以通过 ffmpeg 完成。

    ffmpeg -i <videoFile> -vf scale=1920:1080:flags=bicubic -c:v libx264 -preset slow -crf 21 <video upscaled>
    

    最后,一旦所有段都处于相同的分辨率,就可以使用 cat 将它们连接起来。输出视频可用于计算视频质量指标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 2011-05-02
      相关资源
      最近更新 更多