Pergunta

Eu estou procurando alguns conselhos gerais sobre o formato mp3 antes de eu começar um pequeno projeto para ter certeza que eu não estou em uma busca infrutífera.

O meu entendimento dos internos do formato MP3 é mínima. Idealmente, eu estou procurando uma biblioteca que faria abstrato os detalhes de distância. Eu preferiria usar Python (mas poderia ser convencido do contrário).

Eu gostaria de modificar um conjunto de arquivos de mp3, de uma forma bastante simples. Eu não estou muito interessado nas tags ID3, mas no próprio áudio. Eu quero ser capaz de excluir seções (por exemplo queda de 10 segundos a partir do terceiro minuto), e inserção seções (por exemplo, adicionar créditos até o fim.)

O meu entendimento é que o formato MP3 é com perdas, e assim decodificá-lo para o formato PCM (por exemplo), fazendo as modificações, e em seguida, codificação-lo novamente para MP3 irá diminuir a qualidade de áudio. (Eu gostaria de ouvir que estou errado.)

I conjectura que se eu ficar em formato mp3, haverá algum tipo de quadro mínimo ou pacote de tamanho de lidar, de modo a granularidade das operações podem ser mais grosso. Eu posso viver com isso, contanto que eu conseguir uma precisão de dentro de um par de segundos.

Eu olhei PyMedia , mas me obriga a migrar para PCM para processar os dados. Da mesma forma, LAME quer me ajudar a codificar, mas não acessar os dados no lugar. Eu vi várias outras bibliotecas que lidam apenas com as ID3 tags.

Alguém pode recomendar uma biblioteca de MP3 Python? Alternativamente, você pode desiludir-me da minha suposição de que vai PCM e volta é ruim e evitável?

Foi útil?

Solução 2

Eu tenho três respostas de qualidade, e eu agradeço a todos (e upvoted todos vocês) para eles. Eu não ter escolhido qualquer como a resposta aceita, porque cada abordado um aspecto, então eu quis escrever um resumo.

Você precisa trabalhar em MP3?

  • A transcodificação para PCM e de volta para MP3 é pouco provável que resulte em uma queda na qualidade.

  • não otimizar áudio-qualidade prematuramente; testá-lo com um protótipo simples e ouvi-la.

Trabalho em MP3

  • A Wikipedia tem um resumo do MP3 Formato de arquivo .

  • quadros MP3 são curtos (1152 amostras, ou apenas alguns milissegundos) que permitem a precisão moderada a esse nível.

  • No entanto, Wikipedia adverte que "Os quadros não são itens independentes (" byte reservatório ") e, portanto, não pode ser extraído em limites do quadro arbitrárias."

  • bibliotecas existentes não são susceptíveis de ser de assistência, se eu realmente quero evitar a decodificação.

Trabalho em PCM

Existem várias bibliotecas a este nível:

  • LAME (última versão: outubro 2017)
  • PyMedia (mais recente lançamento: Fevereiro 2006)
  • PyMad (apenas Linux Decoder única Última versão:? Janeiro de 2007)

Trabalho em um nível superior

  • Eco Ninho Remix API (Mac ou Linux única, no momento) é uma API para um serviço web que suporta operações muito sofisticadas (por exemplo, encontrar os locais das batidas da música e ritmo, etc.)

  • mp3DirectCut (somente para Windows) é uma interface gráfica que aparentemente desempenha a operações que quero, mas como um aplicativo. Não é open-source. (Tentei executá-lo, tenho um erro instalador acesso negado, e não deu seguimento. A GUI não é adequadamente para mim, como eu quero correr repetidamente essas operações em uma biblioteca de mudança de arquivos.)

Meu plano é agora para começar no PyMedia, utilizando PCM. Obrigado a todos por sua ajuda.

Outras dicas

Se você quer fazer as coisas de baixo nível, utilize pymad . Acontece MP3s em um buffer de dados de exemplo.

Se você quer algo um pouco de nível superior, utilize o Ninho eco Remix API (divulgação: Eu escrevi parte dele para o meu dayjob). Ele inclui alguns exemplos. Se você olhar para o cowbell exemplo (ou seja, MoreCowbell.dj ), você verá um garfo de pymad que lhe dá uma NumPy matriz em vez de um tampão. Esse tipo de dados torna mais fácil para cortar as seções e fazer contas sobre eles.

Mp3 é com perdas, mas é com perdas de uma maneira muito específica. Os algoritmos utilizados como projetado a certas partes de descarte do áudio que seus ouvidos são incapazes de ouvir (ou são muito difíceis de ouvir). Re-fazendo o processo de compressão, ao mesmo nível de compressão mais e mais é provável que o rendimento quase resultados idênticos para uma determinada peça de áudio. No entanto, algumas perdas adicionais podem lentamente acumular. Se você estiver indo para ser modificar arquivos muito, isso pode ser uma má idéia. Também seria uma má idéia se você estava preocupado com a qualidade, mas, em seguida, usando MP3, se você está preocupado com a qualidade é uma má idéia sobre tudo.

Você poderia construir um teste usando um codificador e um decodificador para recodificar alguns mp3 arquivos diferentes algumas vezes e ver como eles mudam, isso poderia ajudar a determinar a taxa de deterioração e descobrir se ele é aceitável para você . Parece que você tem bibliotecas que você pode usar para executar este teste simples já.

arquivos MP3 são compostos de "quadros" de áudio e por isso deve ser possível, com algum esforço, para remover quadros inteiros com processamento mínimo (remover o quadro, atualizar alguns pequenos detalhes no cabeçalho do arquivo). Eu acredito que os quadros são bastante curto (alguns milissegundos cada) que daria a precisão que você está procurando. Assim fazendo algumas leituras sobre o formato de arquivo MP3 deve dar-lhe informações suficientes para código sua própria biblioteca python para fazer isso. Esta é uma feira pouco diferente do "processamento de áudio" tradicional (desde que você não se preocupam com precisão) e assim que você é improvável encontrar uma biblioteca existente que faz isso. A maioria, como você encontrou, irá descomprimir o áudio primeiramente assim que você pode ter total controle de grão fino.

Como para remover ou extrair segmentos mp3 de um arquivo mp3, enquanto permanecer no domínio MP3 (isto é, sem conversão para o formato PCM e volta), há também o pacote open source pyMp3Cut .

Como para arquivos MP3 splicing juntos (adicionando, por exemplo 'créditos' ao final ou no início de um arquivo mp3) eu encontrei você pode simplesmente concatenar os arquivos MP3 desde que os arquivos têm a mesma taxa de amostragem (por exemplo, 44,1) e o mesmo número de canais (por exemplo ambos são estéreo ou cada um deles mono).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top