Ambiente de Execução
- fluent-ffmpeg:
fluent-ffmpeg
é uma biblioteca Node.js que requer o FFmpeg instalado no sistema. Ela não funciona em ambientes de navegador, mas oferece uma interface poderosa para manipulação de mídia no lado do servidor. - ffmpeg-static:
ffmpeg-static
fornece uma versão pré-compilada do FFmpeg para Node.js, mas não é projetada para uso em navegadores. É ideal para aplicações de servidor que precisam do FFmpeg. - @ffmpeg/ffmpeg:
@ffmpeg/ffmpeg
também funciona em navegadores e Node.js, oferecendo uma implementação completa do FFmpeg que pode ser utilizada em qualquer lugar. - @ffmpeg/core:
@ffmpeg/core
é projetado para funcionar em ambientes de navegador e Node.js, tornando-o versátil para aplicações que precisam de processamento de mídia em ambos os contextos.
Facilidade de Uso
- fluent-ffmpeg:
fluent-ffmpeg
é conhecido por sua API intuitiva que facilita a construção de comandos FFmpeg complexos, tornando-o acessível para desenvolvedores de todos os níveis. - ffmpeg-static:
ffmpeg-static
é muito fácil de usar, pois fornece o executável do FFmpeg sem a necessidade de instalação adicional. - @ffmpeg/ffmpeg:
@ffmpeg/ffmpeg
fornece uma interface mais completa para trabalhar com o FFmpeg, mas pode ser complexa para iniciantes. - @ffmpeg/core:
@ffmpeg/core
oferece uma API simples e direta para manipulação de mídia, mas pode exigir algum conhecimento sobre como usar o FFmpeg.
Tamanho do Pacote
- fluent-ffmpeg:
fluent-ffmpeg
é relativamente leve, mas requer que o FFmpeg esteja instalado no sistema, o que pode variar em tamanho. - ffmpeg-static:
ffmpeg-static
adiciona um tamanho mínimo ao seu projeto, pois inclui apenas o executável do FFmpeg. - @ffmpeg/ffmpeg:
@ffmpeg/ffmpeg
é maior devido à sua implementação completa do FFmpeg, mas oferece mais funcionalidades. - @ffmpeg/core:
@ffmpeg/core
é um pacote leve, projetado para ser eficiente em termos de tamanho, especialmente para aplicações da Web.
Dependências do Sistema
- fluent-ffmpeg:
fluent-ffmpeg
requer que o FFmpeg esteja instalado no sistema, o que pode ser uma barreira para alguns usuários. - ffmpeg-static:
ffmpeg-static
elimina a necessidade de instalar o FFmpeg manualmente, fornecendo uma solução pronta para uso. - @ffmpeg/ffmpeg:
@ffmpeg/ffmpeg
também não tem dependências externas, mas requer um entendimento do FFmpeg para usá-lo efetivamente. - @ffmpeg/core:
@ffmpeg/core
não tem dependências externas, tornando-o fácil de integrar em qualquer projeto.
Exemplo de Código
- fluent-ffmpeg:
Exemplo de uso do
fluent-ffmpeg
para redimensionamento de vídeoconst ffmpeg = require('fluent-ffmpeg'); ffmpeg('input.mp4') .output('output.mp4') .videoCodec('libx264') .size('640x?') .on('end', () => console.log('Conversão concluída')) .on('error', (err) => console.error('Erro:', err)) .run();
- ffmpeg-static:
Exemplo de uso do
ffmpeg-static
para conversão de vídeoconst ffmpegPath = require('ffmpeg-static'); const { execFile } = require('child_process'); execFile(ffmpegPath, ['-i', 'input.mp4', 'output.mp4'], (err, stdout, stderr) => { if (err) throw err; console.log(stdout); console.error(stderr); });
- @ffmpeg/ffmpeg:
Exemplo de uso do
@ffmpeg/ffmpeg
para extração de áudioimport { createFFmpeg, fetchFile } from '@ffmpeg/ffmpeg'; const ffmpeg = createFFmpeg({ log: true }); (async () => { await ffmpeg.load(); ffmpeg.FS('writeFile', 'input.mp4', await fetchFile('input.mp4')); await ffmpeg.run('-i', 'input.mp4', '-q:a', '0', 'output.mp3'); const data = ffmpeg.FS('readFile', 'output.mp3'); const audio = new Audio(URL.createObjectURL(new Blob([data.buffer]))); audio.play(); });
- @ffmpeg/core:
Exemplo de uso do
@ffmpeg/core
para conversão de vídeoimport { createFFmpeg, fetchFile } from '@ffmpeg/core'; const ffmpeg = createFFmpeg({ log: true }); (async () => { await ffmpeg.load(); ffmpeg.FS('writeFile', 'input.mp4', await fetchFile('input.mp4')); await ffmpeg.run('-i', 'input.mp4', 'output.mp4'); const data = ffmpeg.FS('readFile', 'output.mp4'); const video = document.createElement('video'); video.src = URL.createObjectURL(new Blob([data.buffer])); document.body.append(video); video.controls = true; video.play(); });