node.js - 使用 Fluent-ffmpeg 在 Node.js 上处理 ffmpeg 命令

标签 node.js video ffmpeg fluent-ffmpeg

我正在编写一个使用nodejs将MP4转换为HLS的工具,我正在尝试使用fluence-ffmpeg来转换它,但是我在给出“outputOptions”时遇到了一些错误。

我的代码:

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

// open input stream
var infs = new ffmpeg

infs.addInput('./data/test3.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',
    '-hls_time 1',
    '-hls_list_size 0',
    '-hls_segment_filename', '"v%v/fileSequence%d.ts"'
]).output('./data/v%v/prog_index.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()

我得到的错误是

Error: ffmpeg exited with code 1: v:1,a:1": Invalid argument
Unable to find a suitable output format for 'v:1,a:1"'

我尝试打印出 Fluent-ffmpeg 生成的命令,我得到了

fmpeg -i ./data/test3.mp4 -y -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 -hls_time 1 -hls_list_size 0 -hls_segment_filename "v%v/fileSequence%d.ts" ./data/v%v/prog_index.m3u8

我将此命令粘贴到终端中,我可以成功将 mp4 转换为 hls。

我应该如何处理我的代码才能使其成功转换?

流利的 ffmpeg 版本:2.1.2

ffmpeg版本:4.2.1

最佳答案

编辑:根据此 fluence-ffmpeg 问题 comment ,用单引号引用 vsm arg,并使用双引号作为外引号。


var_stream_map arg 应该是一个字符串,即

'"v:0,a:0 v:1,a:1"',

关于node.js - 使用 Fluent-ffmpeg 在 Node.js 上处理 ffmpeg 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59659359/

相关文章:

javascript - 在 JavaScript 中查找具有较大数字的 LCM 时出错

python - 如何在视频中添加音频?

ffmpeg 和 2 :35:1 aspect ratio

php - 为什么带有 2 个视频的 ffmpeg concat 会丢失第二个音频?

ffmpeg - 使用 ffmpeg 合并视频后更改背景颜色

node.js - FileSync 找不到我的文件

Node.JS 合并和 Swig

javascript - 如何在 Mongoose 中扩展查询对象

java - 如何在Android中创建一个简单的视频播放器?

javascript - 使用 JavaScript 包装 HTML5 视频元素会破坏 iOS 中的视频播放器