Pergunta

Eu estou procurando um recurso em python ou bash que vai torná-lo fácil de tomar, por exemplo, um arquivo mp3 X e arquivo m4a Y e dizer "copiar marcas de X para Y".

módulo "mutagen" do Python é ótimo para manupulating marcas em geral, mas não há nenhum conceito abstrato de "campo de artista" que abrange diferentes tipos de tag; Eu quero uma biblioteca que lida com todos os bits complicados e sabe equivalências fieldName. Para que as coisas nem todos os sistemas de tag podem expressar, eu estou bem com informações que estão sendo perdidos ou best-adivinhou.

(Caso de uso: Eu codificar arquivos sem perdas para mp3, em seguida, ir usar os mp3s para audição Cada mês ou assim, eu quero ser capaz de atualizar os arquivos lossless 'mestre' com qualquer tag alterações que fiz ao. mp3s. estou cansado de arrancando meus dedos sobre as diferenças de implementação entre os formatos.)

Foi útil?

Solução

Eu precisava dessa coisa exata, e eu, também, percebeu rapidamente que mutagênico não é uma abstração distante o suficiente para fazer esse tipo de coisa. Felizmente, os autores do mutagen precisava para o seu media player QuodLibet .

Eu tive que escavar através da fonte QuodLibet para descobrir como usá-lo, mas uma vez eu entendi, eu escrevi um utilitário chamado sequitur que se destina a ser uma linha de comando equivalente a exfalso (componente marcação de QuodLibet). Ele usa este mecanismo de abstracção e fornece algum abstracção adicionado e funcionalidade.

Se você quiser verificar a fonte, aqui está um link para o último tarball . O pacote é na verdade um conjunto de três scripts de linha de comando e um módulo de interface com QL. Se você deseja instalar a coisa toda, você pode usar:

easy_install QLCLI

Uma coisa a ter em mente sobre exfalso / quodlibet (e consequentemente sequitur) é que eles realmente implementar metadados de áudio corretamente, o que significa que todas as tags suportar vários valores (a menos que o tipo de arquivo proíbe, que não há muitos que Faz). Então, fazer algo como:

print qllib.AudioFile('foo.mp3')['artist']

não será emitido uma única corda, mas a produção vontade uma lista de strings como:

[u'The First Artist', u'The Second Artist']

A maneira que você pode usá-lo para copiar as tags seria algo como:

import os.path
import qllib  # this is the module that comes with QLCLI

def update_tags(mp3_fn, flac_fn):
    mp3 = qllib.AudioFile(mp3_fn)
    flac = qllib.AudioFile(flac_fn)
    # you can iterate over the tag names
    # they will be the same for all file types
    for tag_name in mp3:
        flac[tag_name] = mp3[tag_name]
    flac.write()

mp3_filenames = ['foo.mp3', 'bar.mp3', 'baz.mp3']

for mp3_fn in mp3_filenames:
    flac_fn = os.path.splitext(mp3_fn)[0] + '.flac'
    if os.path.getmtime(mp3_fn) != os.path.getmtime(flac_fn):
        update_tags(mp3_fn, flac_fn)

Outras dicas

Eu tenho um script que faz exatamente isso, atwat-tagger . Ele suporta arquivos FLAC, MP3, OGG e mp4.

usage: `atwat-tagger.sh inputfile.mp3 outputfile.ogg`

Eu sei que o seu projeto já está concluído, mas alguém que encontra esta página através de um motor de busca pode encontrá-lo útil.

Aqui está um código de exemplo, um script que eu escrevi para copiar tags entre arquivos usando classes de formato de música de Quod Libet (não mutagênico do!). Para correr -lo, basta fazer copytags.py src1 dest1 src2 dest2 src3 dest3, e irá copiar as tags na SEC1 para dest1 (após a exclusão de quaisquer etiquetas existentes em dest1!), e assim por diante. Observe a lista negra, o que você deve ajustar a sua preferência. A lista negra não só irá impedir determinadas marcas sejam copiados, mas também irá impedir que possam ser derrotado em o arquivo de destino.

Para ser claro, a marcação formato agnóstico de Quod Libet não é uma característica de mutagênico; ele é implementado em cima mutagênico. Então se você quer marcação formato agnóstico, você precisa usar quodlibet.formats.MusicFile para abrir seus arquivos em vez de mutagen.File.

O código pode agora ser encontrada aqui: https://github.com/DarwinAwardWinner/copytags

Se você também quer fazer transcodificação, ao mesmo tempo, use este: https://github.com/ DarwinAwardWinner / transfercoder

Um detalhe importante para mim foi que as classes de formato de música de Quod Libet Esperar configuração do QL a ser carregado, portanto, a linha config.init na minha roteiro. Sem isso, eu recebo todos os tipos de erros ao carregar ou salvar arquivos.

Eu testei esse script para copiar entre flac, ogg e mp3, com etiquetas de "padrão", bem como tags arbitrárias. Tem funcionado perfeitamente até agora.

Quanto ao razão que eu não uso QLLib, não funcionou para mim. Eu suspeito que estava recebendo os mesmos erros relacionados à configuração como eu estava, mas foi silenciosamente ignorá-los e simplesmente não ter etiquetas de escrita.

Você pode simplesmente escrever um aplicativo simples com um mapeamento de cada nome de tag em cada formato de um tipo de "tag abstrato", e, em seguida, a sua fácil de converter de um para o outro. Você nem sequer tem que saber todos os tipos disponíveis -. Apenas aqueles que você está interessado em

Parece-me que um tipo-projeto de fim de semana de investimento de tempo, possivelmente menos. Divirta-se, e eu não me importaria de tomar uma olhada em sua implementação e até mesmo usá-lo -. Se você não vai se importar de liberá-lo, é claro :-)

Há também tagpy, que parece funcionar bem.

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