Vou responder recomendando gstreamer. Você provavelmente vai odiar essa resposta, porque ela tecnicamente satisfaz seus requisitos, embora não seja baseada em GUI. Mas tudo bem, porque outra pessoa pode achar que esta é a melhor ferramenta para o trabalho para them.
Basicamente, se você obtiver uma versão do gstreamer com todos os codecs ativados, ele suporta uma enorme variedade de formatos de arquivo. Você pode usar o programa embutido gst-launch
(variadamente gst-launch-0.10
ou gst-launch-1.0
dependendo da versão que você tem) para construir "pipelines" personalizados que pegarão quase qualquer mídia de origem imaginável e a transformará em quase qualquer mídia de destino imaginável.
A melhor parte sobre essa configuração é que ela é tão flexível . Muitos programas de mídia baseados em GUI têm a desvantagem de implicitamente esperar ou assumir certos detalhes sobre os arquivos de entrada e, se os dados de entrada não atenderem a essas condições, ocorrerão erros. Com o gstreamer, basta fazer alguns ajustes em seu pipeline e você está pronto para a corrida.
O gstreamer SDK é uma nova compilação binária do gstreamer que fornece gst-launch
(entre outras coisas) em várias plataformas, e você não precisa mais compilar o gstreamer. É uma ferramenta de desenvolvimento de software poderosa por si só, mas você pode fazer quase qualquer conversão que você possa imaginar (ou até mesmo captura de vídeo / áudio ao vivo de uma webcam / microfone) por meio do gst-launch
sozinho. É realmente um canivete suíço.
As informações de depuração que ele fornece também são incríveis. Você pode usar o elemento decodebin
junto com a opção -v
(para verbose
) para obter uma grande quantidade de informações sobre como o gstreamer está tentando demux e, em seguida, decodifique seus dados de entrada, o que pode lhe dar uma visão profunda de como a mídia de origem está estruturada. Se a mídia de origem foi produzida por meio de algum dispositivo eletrônico de consumo, isso pode ser extremamente útil para descobrir em que consiste o arquivo de entrada e você pode usar o gstreamer diretamente, ou alguma outra ferramenta, para processá-lo na forma desejada para trabalhe mais com ele.
Existem muitos sites na web, se você pesquisar no Google, que fornecerão exemplos de pipelines para você começar, mas o formato geral que gosto de usar é:
gst-launch -v somesrc! umedemuxer! algum decodificador! algum processamento! algumencoding! somemux! somesink . Vamos enumerá-los em ordem:
- somesrc: uma fonte - de onde vêm os dados de entrada originais. Por exemplo,
filesrc
, que lê dados de um arquivo. - algumedemuxer: Um demuxer - a maioria, mas não todas, as mídias vêm combinadas em algum tipo de formato de contêiner . Por exemplo, você pode ter áudio Ogg / Vorbis e vídeo Ogg / Theora mixados juntos em um contêiner Matroska (mkv). O demuxer "remove" o contêiner, expondo seus fluxos internos de dados, que ainda estão codificados.
- algumedecoder: Um decodificador - isto é, por exemplo, um decodificador Vorbis ou um decodificador Theora. Você pode usar a ferramenta interna
gst-inspect
para obter uma lista de elementos de plug-in disponíveis e para inspecionar as propriedades de elementos individuais. Também existem documentos online para cada um.
- algum processamento: Normalmente, depois de decodificar os dados de entrada codificados (áudio, vídeo ou ambos) em um tipo de dados bruto (que é basicamente um fluxo de inteiros ou números de ponto flutuante; por exemplo, um dos tipos de dados brutos de áudio é PCM), você pode executar algum processamento nele. O processamento pode ser necessário para alterar seus aspectos (alterar a taxa de amostragem, resolução de vídeo, FPS, etc.) ou pode ser necessário para satisfazer os requisitos de elementos mais adiante no pipeline.
- alguma codificação: Normalmente, depois de decodificar e processar os dados brutos, você desejará codificar os dados brutos (áudio, vídeo ou ambos) em algum formato compactado, seja compactação sem perdas como áudio FLAC (para o melhor qualidade), ou compactação com perdas como MP3 ou H264 (para o melhor tamanho de arquivo).
- somemux: Agora que você tem os bits brutos codificados em seu formato compactado, você deseja colocá-los em algum tipo do recipiente. Os contêineres são bons porque podem conter metadados , como "Título", "Autor", "Copyright", "Álbum", "Ano", etc., bem como dados sobre qual áudio e vídeo codecs foram usados para codificar os dados. Muxers também tornam mais fácil misturar e combinar vários formatos de dados. Existem alguns formatos de contêiner que são extremamente flexíveis e permitem que você empacote quase qualquer formato codificado neles; Matroska é um exemplo, onde você poderia teoricamente colocar áudio Ogg / Vorbis e vídeo H264, ou vídeo VP8 e áudio FLAC! As possibilidades são infinitas e realmente depende do que você irá editar / visualizar.
- algumsink: Este é o destino final do arquivo. Como você realizará principalmente a conversão de um arquivo no disco para outro arquivo no disco, quase sempre usará
filesink location = C: / ....
aqui, espelhando o filesrc location = ....
no início do pipeline.
Gstreamer é muito mais simples de aprender e dominar do que escrever código C ou qualquer coisa tão complexa, mas fornece uma estrutura poderosa para usuários avançados para lidar com fluxos de áudio e vídeo de maneiras extremamente flexíveis.