Pergunta

Pergunta Original

Quero ser capaz de gerar um novo arquivo MP3 (totalmente válido) a partir de um arquivo MP3 existente para ser usado como uma visualização - estilo experimente antes de comprar.O novo arquivo deve conter apenas o primeiro n segundos da pista.

Agora, eu sei que poderia simplesmente "cortar o fluxo" em n segundos (calculando a partir da taxa de bits e do tamanho do cabeçalho) ao entregar o arquivo, mas isso é um pouco sujo e uma verdadeira PITA em uma trilha VBR.Gostaria de poder gerar um arquivo MP3 adequado.

Alguém tem alguma ideia?

Respostas

Ambos mp3split e ffmpeg são ambas boas soluções.Eu escolhi o ffmpeg porque ele é comumente instalado em servidores Linux e também é facilmente disponível para janelas.Aqui estão mais alguns bons parâmetros de linha de comando para gerar visualizações com ffmpeg

  • -t <seconds> cortar após um número especificado de segundos
  • -y forçar substituição de arquivo
  • -ab <bitrate> definir taxa de bits, por exemplo. -ab 96k
  • -ar <rate Hz> definir a taxa de amostragem, por ex. -ar 22050 para 22,05kHz
  • -map_meta_data <outfile>:<infile> copiar metadados da trilha do infile para o outfile

em vez de definir -ab e -ar, você pode copiar as configurações originais da trilha, como sugere Tim Farley, com:

  • -acodec copy
Foi útil?

Solução

Também recomendo o ffmpeg, mas a linha de comando sugerida por John Boker tem um efeito colateral não intencional:ele recodifica o arquivo para a taxa de bits padrão (que é 64 kb/s na versão que tenho aqui, pelo menos).Isso pode dar aos seus clientes uma falsa impressão sobre a qualidade dos seus arquivos de som e também leva mais tempo para ser feito.

Aqui está uma linha de comando que será dividida em 30 segundos sem transcodificação:

ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3

A opção -acodec diz ao ffmpeg para usar o codec especial de "cópia" que não transcodifica.É extremamente rápido.

OBSERVAÇÃO:o comando foi atualizado com base no comentário de Oben Sonne

Outras dicas

Se você deseja REMOVER os primeiros 30 segundos (e manter o restante), use isto:

ffmpeg -ss 30 -i inputfile.mp3 -acodec copy outputfile.mp3

tentar:

ffmpeg -t 30 -i inputfile.mp3 outputfile.mp3

você pode usar mp3cut:

cutmp3 -i foo.mp3 -O 30s.mp3 -a 0:00.0 -b 0:30.0

Está no repositório do Ubuntu, então apenas: sudo apt-get install cutmp3.

Este comando também funciona perfeitamente.Cortei meus arquivos de música de 20 a 40 segundos.

-você:forçar a substituição do arquivo de saída.

ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3

Você pode querer tentar Mp3Splt.

Eu já usei isso antes em um serviço C # que simplesmente envolveu o processo mp3splt.exe win32.Presumo que algo semelhante possa ser feito no seu cenário Linux/PHP.

Não usei para esse propósito específico, mas aposto ffmpeg pode fazer isso.

Eu tenho um erro ao fazer o mesmo

Invalid audio stream. Exactly one MP3 audio stream is required.
Could not write header for output file #0 (incorrect codec parameters     ?): Invalid argumentStream mapping:

A solução para mim foi:

ffmpeg -ss 00:02:43.00 -t 00:00:10 -i input.mp3 -codec:a libmp3lame out.mp3
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top