返回

nodejs环境下如何获取MP4视频时长(二)

后端


本文将讨论以下内容:

  • 使用流媒体工具ffmpeg或ffprobe获取MP4时长
  • 使用Node.js的buffer模块快速解析出MP4时长等信息

使用流媒体工具ffmpeg或ffprobe获取MP4时长

const {spawn} = require('child_process');

const ffmpeg = spawn('ffmpeg', ['-i', 'input.mp4']);

ffmpeg.stderr.on('data', (data) => {
  // Parse the output of ffmpeg to get the duration of the video
  const duration = data.toString().match(/Duration: (\d+):(\d+):(\d+)\./);
  console.log(`Duration: ${duration[1]}:${duration[2]}:${duration[3]}`);
});

使用Node.js的buffer模块快速解析出MP4时长等信息

const fs = require('fs');
const buffer = fs.readFileSync('input.mp4');

// Check for the ftyp atom
if (buffer.slice(4, 8).toString() !== 'ftyp') {
  throw new Error('Invalid MP4 file');
}

// Get the size of the moov atom
const moovAtomSize = buffer.readUInt32BE(16);

// Get the offset of the moov atom
const moovAtomOffset = buffer.readUInt32BE(20);

// Get the moov atom
const moovAtom = buffer.slice(moovAtomOffset, moovAtomOffset + moovAtomSize);

// Check for the mvhd atom
if (moovAtom.slice(4, 8).toString() !== 'mvhd') {
  throw new Error('Invalid MP4 file');
}

// Get the duration of the video
const duration = moovAtom.readUInt32BE(20);

// Convert the duration from seconds to milliseconds
const durationMs = duration * 1000;

console.log(`Duration: ${durationMs} milliseconds`);

结语

在本文中,我们讨论了如何在nodejs环境下获取MP4视频时长。我们介绍了使用流媒体工具ffmpeg或ffprobe获取MP4时长的方法,以及使用Node.js的buffer模块快速解析出MP4时长等信息的方法。我希望本文对您有所帮助。