FFmpeg — это бесплатное программное обеспечение, которое может выполнять функции записи, преобразования и потоковой передачи в нескольких форматах аудио и видео, включая libavcodec, библиотеку декодеров для аудио и видео в нескольких проектах, и libavformat, библиотеку преобразования форматов аудио и видео. «FF» в слове «FFmpeg» означает «Перемотка вперед».ffmpegПлагин предоставляет набор функций и утилит для абстрагирования использования ffmpeg из командной строки.
Когда вы обнаружите, что в реальной разработке будут всевозможные странные требования, загрузка файлов и тому подобное считаются тривиальными вещами, и вы можете найти способ добиться только таких вещей, как захват кадров из видео 😢. К счастью, библиотека подключаемых модулей узла очень богата, и подключаемый модуль ffmpeg может удовлетворить некоторые из наших основных потребностей в работе с видео.Согласно моему простому анализу, подключаемый модуль должен вызывать метод excu() узла subprocess и напрямую вызывать программное обеспечение ffmpeg.Консольные команды для методов, не предусмотренных другими плагинами, вы можете обратиться к этой идее.
1. Установите ffmpeg
- Установите программное обеспечение 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
Этот процесс тоже должен много чего установить, немного долго, также можно зайти на официальный сайт, чтобы скачать установочный пакет, но его нужно настроить, самостоятельно погуглить.
-
Установить плагин 在项目中执行下面 👇 的命令
npm install ffmpeg
-
Внедрить плагины
var ffmpeg = require('ffmpeg');
-
Создайте экземпляр с плагином Все методы плагина 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);
});
методы видеообъекта
Объект видео предустановляет набор методов, которые могут работать независимо от предустановленной конфигурации.
- 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);
});
-
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);
});
-
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);
});
- См. npm для других методовffmpeg.