【发布时间】:2021-01-13 20:19:54
【问题描述】:
index.js
const ffmpegPath = require('@ffmpeg-installer/ffmpeg').path;
const ffmpeg = require('fluent-ffmpeg');
const process = require('process');
const args = process.argv.slice(2);
if (args.length !== 4) {
console.error('Incorrect number of arguments');
process.exit(1);
}
const startTime = args[0];
const timeDuration = args[1];
const inputFile = args[2];
const outputFile=args[3];
ffmpeg.setFfmpegPath(ffmpegPath);
ffmpeg(inputFile)
.setStartTime(startTime)
.setDuration(timeDuration)
.output(outputFile)
.outputOptions('-hls_list_size 0')
.on('end', function(err) {
if(!err) { console.log('conversion Done') }
})
.on('error', function(err){
console.log('error: ', err)
}).run();
这是 index.js,我通过在终端上点击命令来运行它
node index.js 5 40 ./input.mp4 ./output.m3u8这里 5 是开始时间,40 是持续时间,以秒为单位。该过程使用 ts 文件创建 m3u8,但未正确创建第一个 ts 文件。它以 kb 格式创建,而所有其他文件以 mb 格式创建。
output_test0 没有正确生成,这就是为什么在播放 m3u8 文件时,前几秒只是静态图片。此问题仅发生在第一个 ts 输出中。有什么技巧可以解决吗?
【问题讨论】:
-
您确定不是视频播放器的问题吗?尝试直接在终端执行ffmpeg命令排除node.js,看看结果是否不同。
-
我在命令行中试过这个``` ffmpeg -i f1.mp4 -profile:v baseline -level 3.0 -s 640x360 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls index.m3u8` ``它工作得很好。我也尝试在节点 js 中设置输出选项,但第一个 ts 文件仍然无法正常工作
-
使用the start event 打印命令行并配置您的node.js 代码以获得与您已知的命令行等效的命令行。
-
我发现了问题。这是正确的命令行“ffmpeg -i test.m3u8 -ss 6.2 -y -t 45 -profile:v baseline -level 3 -start_number 0 -hls_list_size 0 -f hls output_test.m3u8”。但是节点js在命令行中传递这个“ffmpeg -ss 6.2 -i test.m3u8 -y -t 45 -profile:v baseline -level 3 -start_number 0 -hls_list_size 0 -f hls output_test.m3u8”基本上是-ss [start_time ] 应该在 -i [input] 之后。任何技巧如何解决这个问题?该命令需要输出搜索。这里是文档链接trac.ffmpeg.org/wiki/Seeking
标签: node.js express ffmpeg fluent-ffmpeg