如何使用 FFmpeg 和 Node.JS 从视频中提取图像

有时,我们需要执行一些不同寻常的任务,例如,我们有一段视频,需要从中获取缩略图。在本文中,我们将使用 FFmpeg 和带有 Javascript 的 Node.JS 来完成这些任务。

首先,请确保您拥有 FFmpeg,如果您使用的是类 Debian 发行版,则可以使用 APT。FFmpeg 是一款强大的音频和视频处理工具。

sudo apt install ffmpeg

也可以访问此FFmpeg官网下载并安装适合您的操作系统的软件包。

现在,让我们从 Node.JS 子进程模块中导入 spawn 函数:

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

之后定义一些变量:

const file = 'input.mp4';
const output = 'output.png';
const takeAtSecond = '1';
const numberOfFrames = '1';

现在,使用 spawn 调用 FFmpeg 从视频中获取图像。spawn 方法会为我们生成一个流,FFmpeg 会将所有输出日志写入 stderr。下面我们来看看完整的代码。

const ffmpeg = spawn('ffmpeg', [
  '-ss',
  takeAtSecond,
  '-i',
  file,
  '-frames',
  '1',
  output,
]);

ffmpeg.stderr.on('data', (data) => {
  console.log(data);
});

ffmpeg.on('exit', () => {
  console.log(`Image generated successfully`);
});

看看传给 FFmpeg 的参数:

  • -ss: 表示我们要拍摄照片的视频位置,该位置必须是一个时间长度单位,例如 1 表示 1 秒,2ms 表示 2 毫秒。
  • -i:表示输入文件,可以是本地文件路径,也可以是互联网上的 HTTP 文件。
  • -y:覆盖已存在的输出文件。
  • -frames:帧数: 在本例中要写入的帧数,1。
  • output:生成图像的文件名。

下面是完整的代码:

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

const file = 'input.mp4';
const output = 'output.png';
const takeAtSecond = '1';
const numberOfFrames = '1';

const ffmpeg = spawn('ffmpeg', [
  '-ss',
  takeAtSecond,
  '-i',
  file,
  '-frames',
  numberOfFrames,
  output,
  '-y',
]);

ffmpeg.stderr.on('data', (data) => {
  console.log(data.toString());
});

ffmpeg.on('exit', () => {
  console.log(`Image generated successfully`);
});

因此,通过执行代码,我们将获得在项目文件夹中创建的输出文件。

就是这些,希望能对你有所帮助!

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/36450.html

(0)

相关推荐

发表回复

登录后才能评论