FFmpeg 节点 js 将视频文件 (.mp4) 转换为 m3u8:输出格式 m3u8 不可用
FFmpeg node js convert video file (.mp4) to m3u8 : Output format m3u8 is not available
我想在 nodeJs 中将视频文件(如 .mp4 或 .avi)转换为 .m3u8。我试着用 ffmpeg 和 node-js 来做,但是那行不通:'Output format m3u8 is not available'.
这是我的 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);
你知道我怎样才能正确地做到这一点吗?
提前致谢。
杰里米。
我找到了解决方案:
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()
第 1 步:打开您的终端并为 OS X 安装包管理器 Homebrew。如果您的 PC 上没有它,您可以 运行 下面的命令来安装它.
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
第二步:当Homebrew安装完成后,运行下面的命令代码安装ffmpeg。
Brew 安装 ffmpeg
第三步:现在你可以使用ffmpeg来转换文件了。你需要做的是输入如下所示的命令行,然后点击回车键,系统就会响应你的请求。
ffmpeg -i input.mp4 -profile:v baseline -level 3.0 -s 640x360 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls index.m3u8
我想在 nodeJs 中将视频文件(如 .mp4 或 .avi)转换为 .m3u8。我试着用 ffmpeg 和 node-js 来做,但是那行不通:'Output format m3u8 is not available'.
这是我的 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);
你知道我怎样才能正确地做到这一点吗?
提前致谢。
杰里米。
我找到了解决方案:
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()
第 1 步:打开您的终端并为 OS X 安装包管理器 Homebrew。如果您的 PC 上没有它,您可以 运行 下面的命令来安装它.
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
第二步:当Homebrew安装完成后,运行下面的命令代码安装ffmpeg。
Brew 安装 ffmpeg
第三步:现在你可以使用ffmpeg来转换文件了。你需要做的是输入如下所示的命令行,然后点击回车键,系统就会响应你的请求。
ffmpeg -i input.mp4 -profile:v baseline -level 3.0 -s 640x360 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls index.m3u8