将视频转化成自适应码率推流可以使用的视频

2018-08-14  本文已影响0人  狗嗨旺

将视频转化成DASH可以使用的视频的过程包括:

  1. 将原始视频使用ffmpeg编码成不同分辨率和码率版本的视频
  2. 使用Bento4将编码好的视频切片

FFmpeg命令

官网文档:https://ffmpeg.org/ffmpeg.html

ffmpeg -y -i RatherBe.mp4 -c:a aac -ac 2 -ab 128k -c:v libx264 -x264opts 'keyint=24:min-keyint=24:no-scenecut' -b:v 1500k -maxrate 1500k -bufsize 1000k -vf "scale=-2:480" RatherBe_852x480_1500k.mp4  
参数解释

使用的原始视频命名为RatherBe.mp4,编码后视频命名为RatherBe_852x480_1500k.mp4

注意:keyint值的设定关系到视频切分后每个chunk的时长,在这里视频25帧/s。如果keyint设置成100,则后面生成的chunk时长为4s。这里设置成了24,那么后面生成的chunk时长是960ms

注意:视频的长和宽必须可以被2整除,否则会报错,可以写成"scale=-2:300"解决。

Bento4命令

官网指南:https://www.bento4.com/developers/dash/

1. mp4fragment命令

先使用mp4fragment工具,原因如下。

mp4fragment: creates a fragmented MP4 file from a non-fragmented one.
When working with mp4 and MSE, it helps to know that the mp4 files should be structured so that metadata is fragmented across pieces of the container, and across the actual audio/video streams being fragmented, instead of clustered together.
To create DASH MP4 content, you need to start with fragmented MP4 files. The input files you will be working with may or may not already be in fragmented MP4 form. Ideally, your encode will already produce MP4 files that way.
The command line tool mp4info can tell you if an MP4 file is fragmented or not: here’s an example of what you will see in the Movie: part of the mp4info output for a non-fragmented MP4 file (the line fragments: no)

如果不先使用该命令,后面切分时会报错。

mp4fragment RatherBe_212x120_400k.mp4 RatherBe_212x120_400k_f.mp4
参数解释

原始视频命名RatherBe_212x120_400k.mp4,处理后文件命名RatherBe_212x120_400k_f.mp4

2. mp4dash命令

mp4dash RatherBe_212x120_400k_f.mp4 RatherBe_426x240_800k_f.mp4 RatherBe_852x480_1500k_f.mp4
参数解释

三个待切分的不同版本视频名分别为:

  1. RatherBe_212x120_400k_f.mp4
  2. RatherBe_426x240_800k_f.mp4
  3. RatherBe_852x480_1500k_f.mp4

使用mp4dash命令处理这三个文件后,会在路径下生成/output文件夹,里面包含切分好的视频文件。

注意:运行Bento4命令时需要在python2.x环境下,如果系统默认python环境是3.x,会报奇怪的错误。
  可以安装anaconda工具,方便在不同的python版本间切换。安装anaconda后,可以通过命令python --version查看当前python环境,通过命令conda info --envs查看所有python环境,然后使用命令source activate python27切换到python2.x版本。

上一篇下一篇

猜你喜欢

热点阅读