如何生成m3u8文件?
我想使用Node.js生成m3u8文件,但不是直接使用ffmpeg命令(ffmpeg -i xxx -f hls index.m3u8)。
即使我添加了 -hls_time 10 参数,我也注意到 ffmpeg 生成的 m3u8 文件中每个片段的持续时间并不是一致的 10 秒,所以我不能简单地写#EXTINF:10。
根据我的研究,这种不一致似乎与 I 帧有关。我尝试使用 ffprobe 检索视频的 I 帧,但没有收到任何输出数据。
ffprobe -v error -skip_frame nokey -select_streams v:0 -show_entries frame=pkt_pts_time -of csv=print_section=0 xxx.mkv
我正在使用 .mkv 文件,希望获得一些帮助。
要在 Node.js 中生成具有一致分段持续时间的 M3U8 文件而不直接使用 ffmpeg,您可以使用 fluid-ffmpeg 等库来处理视频处理和分段。以下是如何实现此目标的基本示例:
const ffmpeg = require('fluent-ffmpeg');
const fs = require('fs');
const inputFilePath = 'input.mkv';
const outputDirectory = 'output_folder';
// Ensure the output directory exists
if (!fs.existsSync(outputDirectory)) {
fs.mkdirSync(outputDirectory);
}
// Run ffmpeg to segment the video
ffmpeg(inputFilePath)
.outputOptions([
'-hls_time 10', // Set segment duration to 10 seconds
'-hls_list_size 0', // Allow an unlimited number of playlist entries
'-hls_segment_filename ' + outputDirectory + '/segment_%03d.ts' // Define segment filename pattern
])
.output(outputDirectory + '/playlist.m3u8')
.on('end', function() {
console.log('Segmentation complete');
})
.on('error', function(err) {
console.error('Error during segmentation:', err);
})
.run();
该脚本使用 Fluent-ffmpeg 将 inputFilePath 指定的视频分割成 10 秒的片段。这些片段保存在 outputDirectory 中,并通过引用这些片段创建 M3U8 播放列表文件 (playlist.m3u8)。
确保您的 Node.js 项目中安装了 Fluent-ffmpeg:
npm install fluent-ffmpeg
确保将 input.mkv 替换为输入视频文件的路径。
这种方法应该可以让您更好地控制分段过程,并有助于在 M3U8 文件中保持一致的分段持续时间。