DEV Community

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

Posted on

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

Top comments (0)