Thanks to visit codestin.com
Credit goes to github.com

Skip to content

mini-ffmpeg é um projeto educacional que demonstra como extrair áudio de vídeos com FFmpeg em C e aplica filtros de volume otimizados em Assembly SIMD, oferecendo uma CLI simples e medições de performance para comparação entre implementações em C e Assembly.

Notifications You must be signed in to change notification settings

samuka7abr/mini-FFmpeg

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 

Repository files navigation

mini-FFmpeg

Estudo de Processamento de Áudio em C e Assembly SIMD


📖 Descrição

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.


🚀 Tecnologias Utilizadas

C Assembly FFmpeg GCC NASM Linux

  • 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)


⚙️ Pré-requisitos

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

🛠️ Instalação e Setup

  1. Clone o repositório

    git clone https://github.com/samuka7abr/mini-FFmpeg.git
    cd mini-FFmpeg
  2. Execute o script de setup

    chmod +x setup.sh
    ./setup.sh
  3. Adicione seu vídeo de entrada Copie o arquivo entrada.mp4 para:

    mini-FFmpeg/
    └── videos/entrada.mp4
    

📂 Estrutura de Diretórios

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

▶️ Uso Básico

  1. Dentro de mini-FFmpeg/, execute o script de conversão:

    ./src/run.sh
  2. Padrões

    • Entrada: videos/entrada.mp4
    • Saída: audios/saida.mp3
    • Volume: 1.0
    • Engine: c
  3. Opções Para ver todas as flags:

    ./src/run.sh --help
  4. Exemplo com Assembly e volume

    ./src/run.sh -i ../videos/entrada.mp4 \
                 -o ../audios/entrada_aumentada.mp3 \
                 -v 1.5 \
                 -e asm

📚 Bibliografia & Referências

  1. FFmpeg Documentation

  2. NASM Manual

  3. Intel 64 and IA-32 Architectures Software Developer’s Manual

    • Volumes 1–3 (SSE2/AVX intrinsics)
  4. Digital Signal Processing (DSP)

    • Conceitos de PCM, sample rate, channel layout, saturação (clipping)
  5. System V AMD64 ABI

    • Convenção de chamadas (passagem de registradores, stack frame)

✍️ Autor

Samuel Abrão

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.

About

mini-ffmpeg é um projeto educacional que demonstra como extrair áudio de vídeos com FFmpeg em C e aplica filtros de volume otimizados em Assembly SIMD, oferecendo uma CLI simples e medições de performance para comparação entre implementações em C e Assembly.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published