Estudo de Processamento de Áudio em C e Assembly SIMD
O mini-FFmpeg é um projeto “hands-on” voltado ao aprendizado de:
- Manipulação de containers e streams multimídia com FFmpeg (libavformat, libavcodec, libswresample, libavutil)
- Processamento de áudio em C puro e Assembly SIMD (SSE2/AVX)
- Integração de código C e Assembly no mesmo pipeline
- Medição de performance de rotinas de processamento (benchmark em tempo real)
- Criação de uma CLI simples para converter vídeo em MP3 com filtro de volume
É ideal para quem deseja entender de forma prática como bibliotecas de baixo nível funcionam, como otimizar código de processamento digital de sinais (DSP) e como ligar rotinas em Assembly dentro de um projeto em C.
-
Linguagens: C, Assembly x86-64 (NASM)
-
Bibliotecas:
- libavformat – leitura/escrita de containers (MP4, MP3…)
- libavcodec – codificação e decodificação de áudio
- libswresample – conversão de formatos e taxas de amostragem
- libavutil – utilitários de buffer, tipos e I/O
-
Ferramentas:
- GCC (GNU Compiler Collection)
- NASM (Netwide Assembler)
- pkg-config
-
Ambiente: Linux (Debian/Ubuntu)
Instale as dependências:
sudo apt-get update
sudo apt-get install -y \
build-essential gcc pkg-config make \
libavformat-dev libavcodec-dev libswresample-dev libavutil-dev \
nasm-
Clone o repositório
git clone https://github.com/samuka7abr/mini-FFmpeg.git cd mini-FFmpeg -
Execute o script de setup
chmod +x setup.sh ./setup.sh
-
Adicione seu vídeo de entrada Copie o arquivo
entrada.mp4para:mini-FFmpeg/ └── videos/entrada.mp4
mini-FFmpeg/
├──dev_script
├── git-commit.sh ← script para automação de commits
├── remove.sh ← script para remover executáveis
├── setup.sh ← script de setup
├── videos/ ← coloque seus vídeos aqui
├── audios/ ← o MP3 gerado aparecerá aqui
└── src/
├── convert.c
├── convert.h
├── main.c
├── run.sh ← script de execução e conversão
└── filters/
├── filters.h
├── volume.c
└── volume.s ← filtro SIMD em Assembly
-
Dentro de
mini-FFmpeg/, execute o script de conversão:./src/run.sh
-
Padrões
- Entrada:
videos/entrada.mp4 - Saída:
audios/saida.mp3 - Volume:
1.0 - Engine:
c
- Entrada:
-
Opções Para ver todas as flags:
./src/run.sh --help
-
Exemplo com Assembly e volume
./src/run.sh -i ../videos/entrada.mp4 \ -o ../audios/entrada_aumentada.mp3 \ -v 1.5 \ -e asm
-
FFmpeg Documentation
-
NASM Manual
-
Intel 64 and IA-32 Architectures Software Developer’s Manual
- Volumes 1–3 (SSE2/AVX intrinsics)
-
Digital Signal Processing (DSP)
- Conceitos de PCM, sample rate, channel layout, saturação (clipping)
-
System V AMD64 ABI
- Convenção de chamadas (passagem de registradores, stack frame)
Samuel Abrão
- GitHub: https://github.com/samuka7abr
- Portfólio: https://portifolio-lyart-three-23.vercel.app/
Projeto desenvolvido para estudo e aperfeiçoamento em tratamento de arquivos multimídia, integração C ↔ Assembly e otimização de DSP em baixo nível.