Использование плагина ffmpeg в узле

Node.js

FFmpeg — это бесплатное программное обеспечение, которое может выполнять функции записи, преобразования и потоковой передачи в нескольких форматах аудио и видео, включая libavcodec, библиотеку декодеров для аудио и видео в нескольких проектах, и libavformat, библиотеку преобразования форматов аудио и видео. «FF» в слове «FFmpeg» означает «Перемотка вперед».ffmpegПлагин предоставляет набор функций и утилит для абстрагирования использования ffmpeg из командной строки.

Когда вы обнаружите, что в реальной разработке будут всевозможные странные требования, загрузка файлов и тому подобное считаются тривиальными вещами, и вы можете найти способ добиться только таких вещей, как захват кадров из видео 😢. К счастью, библиотека подключаемых модулей узла очень богата, и подключаемый модуль ffmpeg может удовлетворить некоторые из наших основных потребностей в работе с видео.Согласно моему простому анализу, подключаемый модуль должен вызывать метод excu() узла subprocess и напрямую вызывать программное обеспечение ffmpeg.Консольные команды для методов, не предусмотренных другими плагинами, вы можете обратиться к этой идее.

1. Установите ffmpeg

  1. Установите программное обеспечение ffmpeg Чтобы использовать подключаемый модуль ffmpeg, вам сначала потребуется программная среда ffmpeg на вашем компьютере, а для установки ffmpeg потребуется среда brew.
  • Чтобы установить brew, выполните следующую команду/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"Этот процесс немного медленный без vpn, вы можете поискать другие способы установки, которые здесь подробно не обсуждаются.

  • установить ffmpeg

    brew install ffmpeg

    Этот процесс тоже должен много чего установить, немного долго, также можно зайти на официальный сайт, чтобы скачать установочный пакет, но его нужно настроить, самостоятельно погуглить.

  1. Установить плагин 在项目中执行下面 👇 的命令

    npm install ffmpeg

  2. Внедрить плагины

    var ffmpeg = require('ffmpeg');

  3. Создайте экземпляр с плагином Все методы плагина ffmpeg можно вызывать с помощью функций обратного вызова или промисов.

  • функция обратного вызова
  new ffmpeg('/path/to/your_movie.avi', function (err, video) {
  if (!err) {
  console.log('The video is ready to be processed');
  } else {
  console.log('Error: ' + err);
  }
  });

  • Обещай путь
  var process = new ffmpeg('/path/to/your_movie.avi');
  process.then(function (video) {
    console.log('The video is ready to be processed');
  }, function (err) {
    console.log('Error: ' + err);
  });

2. Видеообъект

свойства видео объекта

Каждый раз, когда создается новый экземпляр, эта библиотека предоставляет новый объект для получения информации о видео, конфигурации ffmpeg и всех методов для выполнения необходимых преобразований:

var process = new ffmpeg('/path/to/your_movie.avi');
process.then(function (video) {
console.log(video.metadata); // Video metadata
console.log(video.metadata.duration.seconds) // Video 的时长
console.log(video.info_configuration); // FFmpeg configuration
}, function (err) {
console.log('Error: ' + err);
});

методы видеообъекта

Объект видео предустановляет набор методов, которые могут работать независимо от предустановленной конфигурации.

  1. video.fnExtractSoundToMP3(имя файла назначения, обратный вызов)Этот метод извлечет аудиопоток видео в mp3-файл.

параметр:

  • destinationFileName: Полный путь к экспортируемому файлу:

/path/to/your_audio_file.mp3

  • callback: (необязательно) Если указать в конце процесса, он вернет путь к новому аудиофайлу:

function (error, file)

пример:

  var process = new ffmpeg('/path/to/your_movie.avi');
  process.then(function (video) {
    // Callback mode
   video.fnExtractSoundToMP3('/path/to/your_audio_file.mp3', function (error, file) {
    if (!error)
    console.log('Audio file: ' + file);
  });
  }, function (err) {
   console.log('Error: ' + err);
  });
  1. video.fnExtractFrameToJPG(destinationFolder,settings, callback)Этот метод является основным методом, помогающим выполнить это требование, он может перехватывать один или несколько кадров видео и возвращать нам массив изображений.

    параметр:

  • destinationFolder: папка назначения сгенерированных кадров.

    /path/to/you_file

  • настройка: (необязательно) настройка для изменения настройки по умолчанию:

  {
  start_time: number, // 开始的时间,不太支持
  duration_time: number, // 持续的时间
  frame_rate: number, // 每秒的帧数
  keep_aspect_ratio: false, // 保持宽高比
  size: number, // 截取图片的尺寸 不太支持
  number: number, // 要截取的帧数
  every_n_frames: number, // 间隔几帧截取
  every_n_seconds: number, // 间隔几秒截取,不太支持
  every_n_percentage: number,// 间隔百分比截取,不太支持
  keep_pixel_aspect_ratio: true,// Mantain the original pixel video aspect ratio
  padding_color: 'black', // Padding color
  file_name: null,
  }

  • callback: (необязательно) если указано в конце процесса, вернет список путей к созданным фреймам:

function (error, file)

пример:

  video.fnExtractFrameToJPG('/path/to/save_your_frames', {
      frame_rate : 1,
      number : 5,
      file_name : 'my_frame_%t_%s'
    }, function (error, files) {
      if (!error)
          console.log('Frames: ' + files);
  });
  1. video.fnAddWatermark (путь водяного знака, новый путь к файлу, настройки, обратный вызовЭтот метод отвечает за добавление водяного знака в разрабатываемое видео. Вы можете указать точное местоположение изображения.

    параметр:

  • watermarkPath: полный путь, где хранится изображение

    /path/to/retrieve/watermark_file.png

  • newFilepath: (необязательно) Имя нового видео. Если не указано, будет создано этой функцией./path/to/save/your_file_video.mp4

  • настройки: (необязательно) Настройки для изменения настроек по умолчанию.

  {
  position: "SW", // Position: NE NC NW SE SC SW C CE CW
  margin_nord: null, // Margin nord
  margin_sud: null, // Margin sud
  margin_east: null, // Margin east
  margin_west: null, // Margin west
  };
  • обратный вызов: (необязательно) Если указать в конце процесса, он вернет путь к новому видео, содержащему водяной знак.

    function (error, file)

    пример:

  video.fnAddWatermark('/path/to/retrieve/watermark_file.png', '/path/to/save/your_file_video.mp4', {
  position : 'SE'
  }, function (error, file) {
  if (!error)
  console.log('New video file: ' + file);
  });

  1. См. npm для других методовffmpeg.