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.


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


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"
  1. Extraia o .rar

  2. Entre na pasta

cd .\libffppwin
  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';
}

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

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

pwsh -ExecutionPolicy Bypass -File build.ps1 main.cpp # Ou mais arquivos

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

No Debian/Ubuntu/Mint:

sudo apt install build-essential ffmpeg make cmake pkg-config git

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

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';
}

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

Compile e execute:

g++ main.cpp -lavformat -lavcodec -lavutil -lswscale -lffpp
./a.out

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");

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");

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';  

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

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

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


📹 Assista ao Vídeo


👀 Veja Também


cpp ffmpeg api


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!