天天看點

使用ffmpeg将MP4視訊轉換為m3u8格式

一、什麼是m3u8:

M3U8視訊格式也是一種M3U,隻是它的編碼格式是UTF-8格式。M3U用Latin-1字元集編碼。M3U8格式特點是帶有一個目錄資訊或檔案。

二、為什麼使用m3u8:

 随着客戶在移動端播放的需求日益強烈,我們的轉碼軟體開始輸出mp4格式檔案,經過測試,發現優秀的軟體壓縮mp4跟flv壓縮率幾乎相差無幾,于是我們把輸出格式統一為mp4,經過我們軟體處理後的mp4檔案能實作無緩沖拖拽播放(快進播放),也解決了部分視訊檔案有聲音無畫面的問題,赢得了客戶的好評。

随着客戶的增加,mp4檔案播放的弊端也日益凸顯,主要集中在兩個方面,一是當視訊時長比較長的時候,mp4的關鍵幀元素往往很大,需要加載很長時間才能開始播放,網速不好的情況緩沖加載就要20多秒的時間,客戶早已急不可耐。二是當使用者打開一個視訊播放的時候,浏覽器會持續請求下載下傳mp4檔案直到下載下傳完成,就算是使用者暫停視訊播放浏覽器也會持續這種下載下傳狀态,如果這個視訊檔案是500M則會請求伺服器下載下傳500M檔案,是1G則會不停下載下傳1G,給伺服器硬碟和寬帶造成很大浪費和壓力。

于是我們參考優酷洋芋等大型視訊網站系統的播放檔案,發現他們的視訊檔案都是分段播放的,即把一個大的視訊檔案按照一定大小或時長把一個視訊分為N段播放,這樣的優勢是打開視訊加載速度快,可以達到秒播,另外一個優勢是當視訊播放第N段的時候,浏覽器會下載下傳N+1段,N+2則不會下載下傳,大大緩解了伺服器硬碟和寬帶壓力,可知道高昂的寬帶成本才是視訊網站的最大壓力。這樣的視訊檔案處理方式得到了大量客戶的一緻好評。

可是很快我們又發現了一個很嚴重的問題,xml分段清單的視訊在IOS上面也是一籌莫展,為了讓視訊在IOS裝置播放還得保留mp4檔案給IOS裝置播放。于是m3u8播放清單登場了。

m3u8是蘋果公司開發的一項新型播放格式,這種播放格式支援目前市面的windows、androis、ios裝置主流的浏覽器,同樣的視訊檔案既可以在flash環境播放,又能在無flash的html5環境播放,它的優勢還不止于此,它可以實作多種碼率在不同網速下的自動切換,網速好自動切換高清晰度視訊,網速慢自動播放低清晰度檔案,還可以實作流加密(視訊檔案本身加密)、分段下載下傳播放、任意時間點拖拽播放、随機視訊檔案廣告插入等等優勢,是以最新版的雲轉碼視訊系統僅把m3u8作為唯一的播放格式而放棄了其他格式的輸出。

三、安裝ffmpeg:

首先下載下傳windows 可用的ffmpeg檔案

網址為:https://ffmpeg.zeranoe.com/builds/

1、下載下傳後直接解壓:

使用ffmpeg将MP4視訊轉換為m3u8格式

2、配置環境變量:

在系統變量的path中添加ffmpeg檔案夾中 bin 的路徑

使用ffmpeg将MP4視訊轉換為m3u8格式
使用ffmpeg将MP4視訊轉換為m3u8格式

配置完成後檢測是否配置成功

在CMD中輸入 ffmpeg -version,出現如下資訊則配置成功

使用ffmpeg将MP4視訊轉換為m3u8格式

四、開始轉換:

  1. 準備Mp4檔案
使用ffmpeg将MP4視訊轉換為m3u8格式

打開CMD

根據檔案位置在CMD中執行以下指令

ffmpeg -i E:\demo\demo.MP4 -profile:v baseline -level 3.0 -s 640x360 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls E:\demo\demo.m3u8

如出現以下提示則轉換成功

使用ffmpeg将MP4視訊轉換為m3u8格式

我們看一下轉換m3u8檔案夾中的檔案

檔案中包括一個m3u8檔案和多個ts檔案

使用ffmpeg将MP4視訊轉換為m3u8格式

我們打開m3u8檔案

使用ffmpeg将MP4視訊轉換為m3u8格式

發現檔案中其實就是指定了其他檔案的路徑。

個人的了解:轉換後的檔案就是幾個視訊的切片檔案(.ts檔案)組成的清單,在m3u8檔案中記錄了切片檔案的順序,當我們通路m3u8檔案時,會依次加載幾個小的視訊切片檔案。

當我們需要通路目前視訊的時候隻需要将位址直接指向目前m3u8檔案位址即可