Cortar MP3 nos primeiros 30 segundos
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
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