首页 > 解决方案 > FFmpeg节点js将视频文件(.mp4)转换为m3u8:输出格式m3u8不可用

问题描述

我想在 nodeJs 中将视频文件(如 .mp4 或 .avi)转换为 .m3u8。我尝试使用 ffmpeg 和 node-js 来做到这一点,但这不起作用:'输出格式 m3u8 不可用'。

这是我的nodeJs代码:

const ffmpegInstaller = require('@ffmpeg-installer/ffmpeg');
const ffmpeg = require('fluent-ffmpeg');

var cmd = ffmpeg('./flir_20191202T174341.mp4')
    .setFfmpegPath(ffmpegInstaller.path)
    .videoBitrate(1024)
    .videoCodec('divx')
    .format('m3u8')
    .on('end', () => {
        // ...
    })
    .on('error', err => {
        console.error(err);
    })
    .save('./file-out.m3u8');
console.log('Hello !');
console.log(cmd);

你知道我该怎么做吗?

提前致谢。

杰里米。

标签: node.jsffmpegmp4m3u8

解决方案


我找到了解决方案:

var fs = require('fs');
var ffmpeg = require('fluent-ffmpeg');

// open input stream
var infs = new ffmpeg

infs.addInput('video.mp4').outputOptions([
    '-map 0:0',
    '-map 0:1',
    '-map 0:0',
    '-map 0:1',
    '-s:v:0 2160x3840',
    '-c:v:0 libx264',
    '-b:v:0 2000k',
    '-s:v:1 960x540',
    '-c:v:1 libx264',
    '-b:v:1 365k',
    // '-var_stream_map', '"v:0,a:0 v:1,a:1"',
    '-master_pl_name master.m3u8',
    '-f hls',
    '-max_muxing_queue_size 1024',
    '-hls_time 1',
    '-hls_list_size 0',
    '-hls_segment_filename', 'v%v/fileSequence%d.ts'
]).output('./video.m3u8')
    .on('start', function (commandLine) {
        console.log('Spawned Ffmpeg with command: ' + commandLine);
    })
    .on('error', function (err, stdout, stderr) {
        console.log('An error occurred: ' + err.message, err, stderr);
    })
    .on('progress', function (progress) {
        console.log('Processing: ' + progress.percent + '% done')
    })
    .on('end', function (err, stdout, stderr) {
        console.log('Finished processing!' /*, err, stdout, stderr*/)
    })
    .run()

推荐阅读