如何将 video/chunk 段 ABR 视频合并为一个无缝视频?

How to combine video/chunk segments of ABR video into a single seamless video?

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

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

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

然而我想要的是当 ABR 播放器在 profiles/resolutions 之间切换时合并视频,例如

在 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 @比特率=800000 中包含的元数据,因此比特率=5993000(更高分辨率)的下一个视频块显示为损坏的视频。

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

用ffmpeg解决了。

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

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

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