,

Streaming and Editing Videos On-Demand in Web APIs with Node.js Streams and FFmpeg

Posted by






Consumindo e editando vídeos sob demanda em Web APIs usando Node.js Streams e FFmpeg

Consumindo e editando vídeos sob demanda em Web APIs usando Node.js Streams e FFmpeg

Hoje em dia, consumir e editar vídeos sob demanda em Web APIs se tornou uma tarefa comum para muitos desenvolvedores. Neste artigo, vamos explorar como podemos fazer isso usando Node.js Streams e FFmpeg.

Node.js Streams

Node.js Streams são uma forma eficiente de ler e processar dados de maneira assíncrona. Eles são particularmente úteis para lidar com grandes arquivos de vídeo, já que podemos processar os dados à medida que eles chegam, em vez de carregar o arquivo inteiro na memória.

FFmpeg

FFmpeg é uma poderosa ferramenta de linha de comando para manipulação de vídeos. Com ela, podemos realizar várias operações, como cortar, redimensionar, converter formatos e muito mais. Integrando o FFmpeg com Node.js, podemos criar aplicações que consomem e editam vídeos de forma eficiente e flexível.

Consumindo vídeos sob demanda

Para consumir um vídeo sob demanda em uma Web API usando Node.js Streams, podemos utilizar a biblioteca `request` para fazer a requisição HTTP e receber o vídeo em pedaços, que podem ser processados à medida que chegam.

Exemplo de código:

const request = require('request');
const fs = require('fs');

const videoUrl = 'https://example.com/video.mp4';
const outputStream = fs.createWriteStream('video.mp4');

request.get(videoUrl).pipe(outputStream);

Editando vídeos sob demanda

Para editar um vídeo sob demanda em uma Web API usando Node.js e FFmpeg, podemos utilizar a biblioteca `fluent-ffmpeg`, que fornece uma interface fácil de usar para integrar o FFmpeg com Node.js e realizar operações de edição de vídeo.

Exemplo de código:

const ffmpeg = require('fluent-ffmpeg');

ffmpeg('video.mp4')
  .size('320x240')
  .autopad()
  .save('video_320x240.mp4');

Conclusão

Consumir e editar vídeos sob demanda em Web APIs usando Node.js Streams e FFmpeg pode trazer muitos benefícios em termos de eficiência e flexibilidade. Com as ferramentas certas e um pouco de conhecimento, podemos criar aplicações poderosas que lidam com vídeo de forma eficiente e escalável.


0 0 votes
Article Rating
20 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Samuel Gelmini
1 year ago

O vídeo está funcionando corretamente no console, porém quando eu vou exibi-lo no front-end usando handlebars, ocorre um erro e ele não é exibido. Quando eu removo o res.writeHead(200, { 'Content-Type': 'video/mp4'}) ele é exibido mas não no formato mp4. Alguém sabe como resolver esse problema ?

Matheus Rodrigues Dos Santos
1 year ago

Parabéns mano, que vídeo rico em conteúdo aprendi dms para o meu projeto! Muito obg mesmo, orgulho de ter um br com essa qualidade

Jean dos Santos
1 year ago

Passei horas e não consegui fazer funcionar 🥲
Dia só de derrota.

André Padez
1 year ago

Que ferramenta está usando para monitorizar a memoria, no mac? (topo do ecrã). obrigado

Iury Lippo
1 year ago

Mas como que seta o tempo certo da duração do video desse jeito? reparei que não fica fixo

Balbino
1 year ago

Boa tarde, Erick Wendel!
Cadê seu curso para iniciantes?
Gostaria de fazer o curso avançado contigo, mas cadê o iniciante e intermediário primeiro?

lidia souza
1 year ago

A sua câmera esta tampando a visão dos códigos no terminal,então quando vc digita não da pra saber o que digitou ,procurei no github na pasta em que vc estava digitando em um momento do vídeo e não apareceu o código do terminal la ,seria muito produtivo que colocasse a câmera no lado oposto .

artur fornagieri
1 year ago

brabo demais

akita trainer
1 year ago

fico muito feliz de ter conteúdo desse nível em português

João Viitor
1 year ago

Shoow! começando agora esse.

Vogel Codes
1 year ago

Po se o Erick fuc*** Wendel não entendeu bem como usa o ffmpeg-stream então eu fico mais tranquilo de não ter entendido tb rsrs Sou editor de audiovisual e to querendo escrever scripts para automatizar tarefas usando ffmpeg. Acho q vou aprender muito nessa live. Obrigado pelo conteúdo gratuito.

Alessandro Victor
1 year ago

MUITO PICA

crodrigor
1 year ago

Tem como proteger vídeos de download? Com node ou javascript?

Jonaz
1 year ago

ensina a fazer ia com nodejs

Precival Víctor
1 year ago

Muito show!!!

Mário Guimarães - Negócios Digitais
1 year ago

Excelente conteúdo. Será que você pode fazer conteúdo de ffmpeg no browse, que você comentou na Live?

Fernando Ralha
1 year ago

E Erik é mt fera. Tenho acompanhado os conteúdos dele e é sempre mt top.
Uma dúvida aqui galera: to precisando fazer um gerador de imagens a partir desse stream ensinado.
Consegui o seguinte:
const ffmpegProcess = spawn('ffmpeg', [
'-i', 'pipe:0',
'-vf', 'fps=1',
'-f', 'image2',
'src/media/images/out%d.png'
],
{ stdio: ['pipe', 'pipe', 'pipe'] }
)
createReadStream('src/media/videos/video1.mp4').pipe(ffmpegProcess.stdin);
ffmpegProcess.stderr.on('data', msg => console.log('ERROR: ', msg.toString()));

Ele gera de boa no diretorio apontado. Mas, o que quero mesmo é tirar o path: 'src/media/images/out%d.png'' e jogar no pipe:1. A ideia é capturar esse cara em um buffer no stdout. Já tentei jogar o 'pipe:1' no lugar do path e deu mts erros e nao consigo achar o comando exato pra isso.

Alguma ideia de como resolver isso?

Carlos Morcerf
1 year ago

conteudo top

Mayk Brito
1 year ago

Show DEMAIS!! Seniorzaum! 🚀

Eduardo Paixão
1 year ago

foda demais ceh loko