Мне нужно обработать видео в одном из моих проектов, поэтому я начал искать библиотеку, которая могла бы работать в Node.js. Затем я нашел ffmpeg.

Как настроить ffmpeg

Вам необходимо установить ffmpeg на свой компьютер, прежде чем вы сможете управлять им через JS с помощью модуля npm.

Устанавливаю ffmpeg через Homebrew:



CompilationGuide / MacOSX - FFmpeg
git clone http://source.ffmpeg.org/git/ffmpeg.git ffmpeg cd ffmpeg ./configure --prefix = / usr / local --enable-gpl… trac.ffmpeg.org



Затем я использую «node-fluent-ffmpeg» в качестве промежуточного программного обеспечения, чтобы я мог запускать команду ffmpeg в моем проекте Node.js.



Как читать команду ffmpeg

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

Я рекомендую вам начать со ссылки ниже (по крайней мере, проверьте первые четыре раздела).



Документация ffmpeg
ffmpeg читает из произвольного количества входных« файлов
(которые могут быть обычными файлами, каналами, сетевыми потоками, захватом… ffmpeg.org»



Он знакомит с базовой структурой типичной командной строки ffmpeg, такой как ‘-i’, ‘-c’, ‘-vf’, ‘-map’ и т. Д., Которую я понятия не имел, когда начинал изучать. (Поиск Google по «ffmpeg -map» совершенно не помогает !!!)

Ниже приведен пример команды ffmpeg.

ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[1:v]colorkey=0x3BBD1E:0.3:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.mp4

Команда применяет цветовую манипуляцию RGB с использованием сложного фильтра. ссылка: http://ffmpeg.org/ffmpeg-filters.html#colorkey

  • -i объявить, что является входным файлом, поэтому есть два входных файла
  • здесь используется сложный фильтр
  • 0x3BBD1E - цвет, 0,3 - сходство, 0,2 - смешение
  • [1: v] означает видеоисточник второго видео, то есть video2.mp4, а [0: v] означает видеоисточник первого видео, то есть video1.mp4 (это нумерация с нуля).
  • [0: v] означает видеоисточник первого видео, а [0: a] означает аудиоисточник первого видео.
  • [ckout] - результат применения цветовой кодировки на video2.mp4
  • [0: v] и [ckout] являются входными данными для фильтра «overlay», [out] - выходными

Ссылки ниже содержат примеры того, как составлена ​​команда ffmpeg.





документ о фильтре ffmpeg:



установите его на Heroku

Когда я разверну проект на heroku для хостинга, я нашел buildpack для включения бинарного файла ffmpeg в мой heroku dyno.





Команда для добавления пакета сборки вместе с пакетом node.js:

heroku buildpacks:add --index 1 https://github.com/jonathanong/heroku-buildpack-ffmpeg-latest.git

Команда для просмотра сборок:

heroku buildpacks

нажатие на зеленый экран:



маска изображения







размытие на видео:



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

ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex overlay=shortest=1 output.mp4

решение проблемы отсутствия звука:



Поскольку в качестве формата видео я использую mp4, для достижения наилучшего результата я должен использовать acc в качестве аудиокодека. К сожалению, libfdk_aac, кодек высшего качества, не включен в бесплатную версию из-за несовместимости его лицензии с GPL. ссылка: https://trac.ffmpeg.org/wiki/Encode/AAC

libmp3lame можно использовать в качестве кодека для вывода видео в формате mp4. Но проигрыватель Quicktime на Mac воспроизводит полученное видео без звука. (Кстати, VLC может воспроизводиться со звуком) Аудиоканал не может быть распознан, потому что видео mp4 обычно идет с аудио с кодировкой acc.

Наконец, я использую устаревший кодек acc. Тогда все играет правильно, и меня не очень заботит качество звука.

Команда, которую я использую для кодирования аудио:

ffmpeg -i video1.mp4 -i video2.mp3 -filter_complex "overlay=shortest=1" -map 0:a -c:a aac -shortest output.mp4

Он сопоставляет результирующее видео из сложного фильтра со звуком из первого входного видеоисточника. Затем «-c: a» удаляет кодек, используемый для аудио, как «acc».

версия node-fluent-ffmpeg:

ffmpeg()
    .input('./video1.mp4')
    .input('./video2.mp4')
    .complexFilter([
        {
            filter: 'overlay', options: {shortest: 1},
            inputs: ['0:v', 'ckout'], outputs: 'output'
        },
    ], 'output')
    .outputOptions(['-map 0:a', '-c:a aac'])
    .save('./output.mp4');

Похвальный отзыв

В проекте see-thru он использует ffmpeg для подготовки видеоисточника.

Пакет поставляется со сценарием CLI (seethru-convert), который автоматически подготовит для вас источники видео. Просто передайте видео с альфа-информацией (сжатые с помощью анимации .movs должны работать здесь лучше всего - также убедитесь, что видео действительно содержит информацию об альфа-канале), и оно автоматически разделит альфа- и RGB-информацию и отобразит их бок о бок в целевой файл.



Почетное упоминание 2

Простая утилита для node / io.js для создания простых видеослайд-шоу на основе изображений с использованием ffmpeg с дополнительными функциями, такими как звук, субтитры и постепенное появление / исчезновение переходов между слайдами.





Почетное упоминание 3

Diaporama - это движок слайд-шоу изображений / видео / контента, обеспечивающий высококачественные анимационные эффекты, включая эффект Кенбернса и Переходы GLSL.



демонстрационный сайт:



Интересный подход к тому, чтобы запечатлеть то, что есть на сайте:



Связанных с работой: