簡體   English   中英

在 Node Js 中使用 FFMPEG 進行 HLS 轉碼的多種分辨率

[英]Multiple resolutions for HLS transcoding using FFMPEG in Node Js

我在一個 node.js 項目上工作,使用 FFMPEG 將上傳的 mp4 文件轉換為 HLS 格式 (.m3u8)。

我開發了這樣的 function,

 ffmpeg('test.mp4', { timeout: 432000 }).addOptions([ "-profile:v baseline", "-level 3.0", "-start_number 0", "-hls_time 10", "-hls_list_size 0", "-master_pl_name master.m3u8", "-f hls" ]).output("videos/output.m3u8")

問題:這個 function 按預期工作。 但現在我希望視頻以 360、480、720 和 1080 的多種格式進行轉碼,並期望 output of.m3u8 主文件有點像

 #EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=72000,CODECS="mp4a.40.5" output_64k_audio.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=620000,RESOLUTION=640x360,CODECS="avc1.4d001e,mp4a.40.2" output_360.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=812000,RESOLUTION=854x480,CODECS="avc1.4d001e,mp4a.40.2" output_480.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1272000,RESOLUTION=1280x720,CODECS="avc1.4d001f,mp4a.40.2" output_720.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1627000,RESOLUTION=1920x1080,CODECS="avc1.4d0028,mp4a.40.2" output_1080.m3u8

請幫我解決這個問題。

我找到了一個 package simple-hls解決了這個問題,

這是最終的解決方案:

 const { Transcoder } = require('simple-hls'); const customRenditions = (name) => { return [ { width: 640, height: 360, profile: 'main', hlsTime: '10', bv: '800k', maxrate: '856k', bufsize: '1200k', ba: '96k', ts_title: `${name}_360p`, master_title: `${name}_360p` }, { width: 640, height: 480, profile: 'main', hlsTime: '10', bv: '1400k', maxrate: '1498', bufsize: '2100k', ba: '128k', ts_title: `${name}_480p`, master_title: `${name}_480p` }, { width: 1280, height: 720, profile: 'main', hlsTime: '10', bv: '2800k', maxrate: '2996k', bufsize: '4200k', ba: '128k', ts_title: `${name}_720p`, master_title: `${name}_720p` }, { width: 1920, height: 1080, profile: 'main', hlsTime: '10', bv: '5000k', maxrate: '5350k', bufsize: '7500k', ba: '192k', ts_title: `${name}_1080p`, master_title: `${name}_1080p` } ] }; try { const transcode = new Transcoder(newFileName, fileDestFolder + '/', { renditions: customRenditions(fileName), showLogs: false }); transcode.transcode(); console.log('Successfully Transcoded Video'); } catch (e) { console.log('Something went wrong: ' + e); }

請注意,此 package 要求您在您的機器上安裝 FFmpeg 軟件。 就我而言,我找到了一種無需安裝 FFmpeg 即可使用 simple-hls 的方法,方法是使用另一個 package @ffmpeg-installer/ffmpeg並編輯包的節點模塊文件/node_modules/simple-hls/lib/index.js

const ffmpegPath = require('@ffmpeg-installer/ffmpeg').path;
const ls = (0, child_process_1.spawn)(ffmpegPath, commands)

生成 child_process 時,將'ffmpeg'替換為 npm package 中的 FFmpeg 安裝程序的路徑,它工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM