我用过:
ffmpeg.setFfprobePath(ffprobeBin.path);
ffmpeg.setFfmpegPath(ffmpegPath);
ffmpeg(audioPath, {timeout: 432000})
.audioCodec('aac')
.audioBitrate('128k')
.outputOptions(['-hls_time 10', '-hls_list_size 0'])
.format('hls')
.output(`${folderPath}/${streamName}`).on('end', () => {
console.log(`Finished processed ${streamName} for video Id: ${folderName}`);
Audio.findByIdAndUpdate(nameFile.split('.')[0], {
streamUrl: streamName
}
但它不适用于我的音频文件(mp3)。我认为原因是这个mp3文件有图像或版权。
我尝试了其他音频编解码器(aac、libmp3lame),但仍然不起作用。
使用选项映射0-a来拾取文件中的声音;
ffmpeg(audioPath, {timeout: 432000}).addOptions([
'-map 0:a',
'-c:a aac',
'-b:a 128k',
'-f hls',
'-hls_time 10',
'-hls_list_size 0'
])
当有多个流时,hls 编码器可能不会自动选择音频流。作为预防措施,请使用
-map
选项选择第一个音频流。
将其添加到代码中的
audioBitrate
方法之后:
.addOptions(['-map 0:a'])
注意:我们从 ffmpeg cli 中得知,没有专门的 -map 和其他流操作方法。 这就是为什么我们必须使用
outputOptions
方法。