DEV Community

Cover image for Como utilizar o FFmpeg com C++ (Windows e GNU/Linux)
Marcos Oliveira
Marcos Oliveira

Posted on

2

Como utilizar o FFmpeg com C++ (Windows e GNU/Linux)

📺 Criei uma Biblioteca Dinâmica com C++ para a API do FFmpeg em C para facilitar a integração para aplicativos gráficos e com mais velocidade.


ffpp é uma biblioteca dinâmica escrita em C++ com API para a maioria das tarefas principais com FFmpeg. Muito mais rápida para interfaces gráficas do que usar processos.

ffpp

Executando no Windows.


ffpp

Executando no GNU/Linux.


Uso no Windows

Requer Clang

  1. Baixe o libffppwin
Invoke-WebRequest -Uri "https://bit.ly/libffppwin" -OutFile "libffppwin.rar"
Enter fullscreen mode Exit fullscreen mode
  1. Extraia o .rar

  2. Entre na pasta

cd .\libffppwin
Enter fullscreen mode Exit fullscreen mode
  1. Crie um código básico, exemplo: main.cpp
#include "ffpp/ffpp.hpp"
#include <memory>

int main(){
  auto ffpp = std::make_unique<FFPP>();
  std::cout << "Duração: " 
    << ffpp->ffpp_info(FFPP_INFO::DURATION, "video.mp4") << '\n';
}
Enter fullscreen mode Exit fullscreen mode

Se quiser, use este vídeo como exemplo: video.mp4

  1. Compile e execute:
# PowerShell
pwsh build.ps1 main.cpp # Ou mais arquivos

# Ou: Windows [PowerShell](https://terminalroot.com.br/tags#powershell)
powershell build.ps1 main.cpp # Ou mais arquivos

# Ou diretamente
.\build.ps1 main.cpp # Ou mais arquivos
Enter fullscreen mode Exit fullscreen mode

Se o Windows Defender bloquear a execução, permita o script:

pwsh -ExecutionPolicy Bypass -File build.ps1 main.cpp # Ou mais arquivos
Enter fullscreen mode Exit fullscreen mode

O script build.ps1 compila e executa o binário gerado. A saída fornece, por exemplo, a duração do vídeo: Duração: 00:00:05

Se quiser baixar o libffmpeg e compilar a dll do zero, veja este arquivo: build-win.md.


No GNU/Linux

Dependências:

No Arch:

sudo pacman -S gcc ffmpeg make cmake pkg-config git
Enter fullscreen mode Exit fullscreen mode

No Debian/Ubuntu/Mint:

sudo apt install build-essential ffmpeg make cmake pkg-config git
Enter fullscreen mode Exit fullscreen mode

Compilar e instalar

Execute todos os comandos abaixo:

git clone https://github.com/terroo/ffpp
cd ffpp
cmake . -B build
cmake --build build
sudo cmake --install build
# Importante após a instalação
# Algo como: export LD_LIBRARY_PATH=/usr/local/lib
# Mas para todo o sistema:
echo /usr/local/lib | sudo tee /etc/ld.so.conf.d/ffpp.conf
sudo ldconfig
Enter fullscreen mode Exit fullscreen mode

Crie um código básico, exemplo: main.cpp

#include <ffpp/ffpp.hpp>
#include <memory>

int main(){
  auto ffpp = std::make_unique<FFPP>();
  std::cout << "Duração: " 
    << ffpp->ffpp_info(FFPP_INFO::DURATION, "video.mp4") << '\n';
}
Enter fullscreen mode Exit fullscreen mode

Se quiser, use este vídeo como exemplo: video.mp4

Compile e execute:

g++ main.cpp -lavformat -lavcodec -lavutil -lswscale -lffpp
./a.out
Enter fullscreen mode Exit fullscreen mode

Exemplo de saída: Duração: 00:00:05.


Exemplos da API

Assumindo que você criou o objeto no heap (auto ffpp = std::make_unique<FFPP>();).

01. Converter MP4 para WMV:

ffpp->ffpp_convert("video.mp4", "new.wmv");
Enter fullscreen mode Exit fullscreen mode

Converte apenas entre extensões de vídeo: .mp4, .flv, .wmv e .mov


02. Extrair quadros:

ffpp->ffpp_extract_frames("video.mp4", "my_frames_dir");
Enter fullscreen mode Exit fullscreen mode

Imagens .ppm serão geradas na pasta fornecida (my_frames_dir/).


03. Obter informações de um vídeo:

std::cout << "Duração: " 
  << ffpp->ffpp_info(FFPP_INFO::DURATION, "video.mp4") << '\n';
std::cout << "Taxa de bits: " 
  << ffpp->ffpp_info(FFPP_INFO::BITRATE, "video.mp4") << '\n';
std::cout << "FPS: " 
  << ffpp->ffpp_info(FFPP_INFO::FPS, "video.mp4") << '\n';
std::cout << "Frequência do áudio: " 
  << ffpp->ffpp_info(FFPP_INFO::AUDIO_FREQUENCY, "video.mp4") << '\n';
std::cout << "Resolução: " 
  << ffpp->ffpp_info(FFPP_INFO::RESOLUTION, "video.mp4") << '\n';  
Enter fullscreen mode Exit fullscreen mode

04. Cortar um vídeo de um tempo até um certo comprimento:

ffpp->ffpp_cut("video.mp4", "00:00:10", 6, "output.mp4");
Enter fullscreen mode Exit fullscreen mode

O corte começa após 10 segundos do vídeo e dura 6 segundos.


📹 Assista ao Vídeo

Como utilizar o FFmpeg com C++ (Windows e GNU/Linux)


👀 Veja Também

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

Top comments (0)

Tiger Data image

🐯 🚀 Timescale is now TigerData: Building the Modern PostgreSQL for the Analytical and Agentic Era

We’ve quietly evolved from a time-series database into the modern PostgreSQL for today’s and tomorrow’s computing, built for performance, scale, and the agentic future.

So we’re changing our name: from Timescale to TigerData. Not to change who we are, but to reflect who we’ve become. TigerData is bold, fast, and built to power the next era of software.

Read more

👋 Kindness is contagious

Sign in to DEV to enjoy its full potential—unlock a customized interface with dark mode, personal reading preferences, and more.

Okay