使用 MPEG

阅读: 评论:0

使用 MPEG

使用 MPEG

MPEG-DASH(基于HTTP的动态自适应流,Dynamic Adaptive Streaming over HTTP)技术可以使播放器在播放过程中根据网速实时调节视频清晰度,起到降低缓冲时间、提升画质的效果。有关 DASH 的详细介绍请看维基百科。

本文主要介绍将视频封装为 DASH 格式,并在网页上播放的方法。

1. 环境准备

要运行下文的大部分命令,您必须安装好 ffmpeg 和 x264,并且配置环境变量(Windows)等内容。或者,您也可以下载或编译出 ffmpeg 和 x264 的二进制文件,然后将下文命令中的 ffmpegx264 替换成完整路径。

为什么使用 ffmpeg,而不是 MP4Box?

在我的测试中,MP4Box 对帧率不同的视频支持状况不佳,会导致播放速度出错。

安装步骤

下面将介绍在 Ubuntu 18.04 中安装 ffmpeg 和 x264 的过程。本文编写时使用 ffmpeg 4.1.4 版本。x264 压制参数变化不大,但出现问题时建议尝试更新版本。同时,你也可以通过其他方式安装 ffmpeg 和 x264。

本文直接使用别人编译好的二进制。本文不对这些二进制文件的安全性负责。

(1) 添加软件源

运行命令

sudo add-apt-repository ppa:jonathonf/ffmpeg-4
sudo apt-get update

按提示操作。

(2) 安装软件
sudo apt install -y ffmpeg x264

2. 压制/准备视频

要实现画质切换,您需要将视频压制成不同清晰度。如果您喜欢,可以将音频也压制成不同的规格和码率。

注意点:按照本文的步骤,没有必要严格对齐 GOP。因为本文中会对不同清晰度的视频采用不同的帧率。

下面是压制命令。这条命令使用 ffmpeg 解码并改变视频帧率,然后通过管道将未压缩视频传给 x264 进行编码。

ffmpeg -i ${input} -an -r 60000/1001 -f yuv4mpegpipe -pix_fmt yuv420p - | x264 --crf ${crf} --demuxer y4m --preset veryslow -I ${i_frame} -r 4 -b 3 --me umh -i 1 --scenecut 60 -f 1:1 --qcomp 0.5 --psy-rd 0.3:0 --aq-mode 2 --aq-strength 0.8 --vf resize:3840,2160,,,, -o "${output_prefix}-2160p60.mp4" -

在上面的命令中:

  • ${input} 表示源文件名
  • -r 60000/1001 表示将视频帧率变为每秒 60000/1000 帧(约为 60,但是兼容性好于整数 60)
  • ${crf} 表示使用的 crf 值,您可以使用 22 左右的数值
  • ${i_frame} 表示最大关键帧间隔,单位是帧,不可过大,建议使用每秒帧率*2(舍入至最接近的整数即可)
  • --vf resize:3840,2160,,,, 会将输出视频缩放至指定的分辨率
  • -o "${output_prefix}-2160p60.mp4" 表示输出文件。

您也可以改用任何您喜欢的方式进行编码,但是需要注意兼容性。同时,也不要使关键帧间隔过大。

修改上面命令中的参数,压制出不同清晰度和帧率的视频。

3. 使用 ffmpeg 生成分片

假定压制了 5 个不同清晰度的视频,分别是

fate.2160p60.mp4
fate.1080p60.mp4
fate.720p60.mp4
fate.450p.mp4
fate.360p.mp4

同时,提取源文件中的音频(假定为 aac 编码。如果不是 aac 编码,您需要自行转换)

ffmpeg -i ${input} -vn -c copy fate.a.m4a

该命令会输出名为 fate.a.m4a 的音频流。

然后我们就可以使用 ffmpeg 生成分片了。

首先建立 fate 文件夹,用于存放生成的分片。文件夹的名称无要求,但是您需要修改后面的命令来确保将文件输出到您建立的文件夹中。

然后执行以下命令:

ffmpeg 
-i fate.2160p60.mp4 
-i fate.1080p60.mp4 
-i fate.720p60.mp4 
-i fate.450p.mp4 
-i fate.360p.mp4 
-i fate.a.m4a 
-c copy 
-map 0 -map 1 -map 2 -map 3 -map 4 -map 5 
-f dash 
-adaptation_sets "id=0,streams=v id=1,streams=a" 
fate/manifest.mpd

接下来 ffmpeg 会输出大量信息。完成后,我们可以在 fate 文件夹中发现分好的分片。

4. 分析并修改 manifest 文件,减少载入时间

打开 fate/manifest.mpd 文件(或者你指定的其他路径)。可以看到文件开头如下。

<?xml version="1.0" encoding="utf-8"?>
<MPD xmlns:xsi=

本文发布于:2024-02-02 07:14:29,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170682927042208.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:MPEG
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23