Skip to content

Instantly share code, notes, and snippets.

@Makio64
Last active May 28, 2022 03:16
Show Gist options
  • Save Makio64/d062a2271857deb3ec664d60dc2ef78e to your computer and use it in GitHub Desktop.
Save Makio64/d062a2271857deb3ec664d60dc2ef78e to your computer and use it in GitHub Desktop.
Convert mp4 to dash and hls fragmented video in Nodejs
const path = require('path')
const fs = require('fs')
const util = require('util')
const exec = util.promisify(require('child_process').exec)
// https://www.bento4.com/downloads/
const BENTO4Folder = 'D:/Bento4-SDK-1-6-0-639.x86_64-microsoft-win32/bin'
const mp4dash = BENTO4Folder + '/mp4dash'
const mp4fragment = BENTO4Folder + '/mp4fragment'
async function fragmentVideo (file, directory, name) {
const command = `${mp4fragment} ${file} ${directory}/${name}.mp4`
const { stdout, stderr } = await exec(command)
console.log('stdout:', stdout)
console.log('stderr:', stderr)
}
async function convertToDashAndHLS (file, directory) {
const command = `${mp4dash} --hls -o ${directory} -f ${file}`
const { stdout, stderr } = await exec(command)
console.log('stdout:', stdout)
console.log('stderr:', stderr)
}
async function convertVideo (file) {
const name = path.parse(file).name
const directory = path.dirname(file) + '/' + name
// create a repository for all new files
if (!fs.existsSync(directory)) {
fs.mkdirSync(directory)
}
// Fragment the video
await fragmentVideo(file, directory, name)
// Convert all new files to DASH and HLS
await convertToDashAndHLS(`${directory}/${name}.mp4`, directory)
// Cleanup temporaly file
fs.unlinkSync(`${directory}/${name}.mp4`)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment