如何将 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 之间切换时合并视频,例如
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
@比特率=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 将它们连接起来。输出视频可用于计算视频质量指标。
我想从在我的浏览器上运行的播放器 (HLS/DASH) 捕获自适应比特率 (ABR) 视频的 segments/chunks,以便将所有块组合成一个无缝视频供以后使用分析整个视频的 QoE(体验质量),即 VMAF。为此,所有片段都必须是同一视频文件的一部分。
通常,可以在基于 OS 的 linux 上使用 cat
命令来完成相同分辨率的视频块的组合,例如,
cat init.mp4 video1.mp4 video2.mp4 > fullvideo.mp4
然而我想要的是当 ABR 播放器在 profiles/resolutions 之间切换时合并视频,例如
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
@比特率=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 将它们连接起来。输出视频可用于计算视频质量指标。