Cortar MP3 nos primeiros 30 segundos

103

Questão 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 amostra - no estilo experimente antes de comprar. O novo arquivo deve conter apenas os primeiros n segundos da faixa.

Agora, eu sei que poderia apenas "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 um verdadeiro PITA em uma trilha VBR. Eu gostaria de poder gerar um arquivo MP3 adequado.

Alguém tem alguma ideia?

Respostas

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

  • -t <seconds> cortar após determinado número de segundos
  • -y forçar sobrescrever arquivo
  • -ab <bitrate>definir taxa de bits, por exemplo -ab 96k
  • -ar <rate Hz>definir taxa de amostragem, por exemplo, -ar 22050 para 22,05 kHz
  • -map_meta_data <outfile>:<infile> copiar metadados de trilha de infile para outfile

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

  • -acodec copy
Cheekysoft
fonte
Não o usei para esse propósito específico, mas aposto que o ffmpeg pode fazer isso.
grapefrukt,
Apenas um pensamento: você pode querer pular o início da música original. Digamos, você pode usar uma peça de 30 segundos começando no terceiro da música. Em algumas músicas, os primeiros 30 segundos não dizem muito, pois são apenas uma parte de "preparar a cena" - por exemplo , Shine On You Crazy Diamond do Pink Floyd .
Tomas Sedovic,
Apenas como nota, eu tive um momento muito ruim com ffmpeg, mptsplit e mp3cutter no CentOS, todos eles relatando "Header Missing". Então, eu tive que ir com MP3 Class e alguma matemática para cortar pelo tamanho do arquivo.
Gardner
Não sabia que o ffmpeg poderia fazer isso. Obrigado.
Sridhar Sarnobat

Respostas:

142

Eu também recomendo ffmpeg, mas a linha de comando sugerida por John Boker tem um efeito colateral não intencional: ela 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 a seus clientes uma falsa impressão sobre a qualidade de seus arquivos de som e também leva mais tempo para fazer.

Esta é uma linha de comando que divide 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. É rápido como um relâmpago.

NOTA: o comando foi atualizado com base no comentário de Oben Sonne

Tim Farley
fonte
21
As ffmpegversões recentes (pelo menos desde 0.10.6) interpretam as opções de maneira diferente com base na posição. As opções relacionadas à entrada devem aparecer antes -i ...e as opções relacionadas à saída devem aparecer depois -i .... Isso significa ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3que agora seria a resposta correta.
Oben Sonne
Posso extrair 30 segundos de áudio de um arquivo de entrada de 15 segundos, isso significa que se o arquivo for maior, 30 segundos, extrair 30 segundos, mas se o arquivo for 15 segundos, repita e extraia 30 segundos completos.
Girish Patidar
6
Se você deseja definir a hora de início (deslocamento), você pode usar -ss hh:mm:ss[.xxx]. Exemplo: ffmpeg -t 30 -ss 00:00:15.500 -i inputfile.mp3 -acodec copy outputfile.mp3cortará para 30 segundos a partir de 00h 00m 15s 500ms .
patryk.beza
1
por algum motivo, o comando acima não funcionou para mim, mas se eu alterei para: ffmpeg -i inputfile.mp3 -t 30 -acodec copy outputfile.mp3então está funcionando perfeitamente
Krishnendu
Para mim, as opções -t e -s devem ser usadas separadamente em 2 comandos. Mas funciona, obrigado!
Yan King Yin de
57

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

ffmpeg -ss 30 -i inputfile.mp3 -acodec copy outputfile.mp3
the.jxc
fonte
18

experimentar:

ffmpeg -t 30 -i inputfile.mp3 outputfile.mp3
John Boker
fonte
12

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

-y: força 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
Rahul Chauhan
fonte
1
Perfeito! Obrigado por compartilhar isso.
HerrimanCoder
11

você pode usar mp3cut:

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

É no Ubuntu repo, então apenas: sudo apt-get install cutmp3.

Michał Šrajer
fonte
6

Você pode querer experimentar o Mp3Splt .

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

Ryan Duffield
fonte
2
MP3Split usado com sucesso para corte de mp3
Freshblood de
0

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 correção para mim foi:

ffmpeg -ss 00:02:43.00 -t 00:00:10 -i input.mp3 -codec:a libmp3lame out.mp3
Mithun Cheriyath
fonte
0

medipack é um aplicativo de linha de comando muito simples como um wrapper ffmpeg.

você pode conseguir cortar seu vídeo usando estes comandos:

medipack trim input.mp3 -s 00:00 -e 00:30 -o output.mp3
medipack trim input.mp3 -s 00:00 -t 00:30 -o output.mp3

você pode ver as opções do subcomando trim como:

srb@srb-pc:$ medipack trim -h
usage: medipack trim [-h] [-s START] [-e END | -t TIME] [-o OUTPUT] [inp]

positional arguments:
  inp                   input video file ex: input.mp4

optional arguments:
  -h, --help            show this help message and exit
  -s START, --start START
                        start time for cuting in format hh:mm:ss or mm:ss
  -e END, --end END     end time for cuting in format hh:mm:ss or mm:ss
  -t TIME, --time TIME  clip duration in format hh:mm:ss or mm:ss
  -o OUTPUT, --output OUTPUT

você também pode explorar outras opções usando medipack -h

srb@srb-pc:$ medipack --help
usage: medipack.py [-h] [-v] {trim,crop,resize,extract} ...

positional arguments:
  {trim,crop,resize,extract}

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         Display version number

você pode visitar https://github.com/srbcheema1/medipack e ver exemplos em README.

srbcheema1
fonte
1
Qual é a vantagem deste invólucro? Porque não parece mais simples do queffmpeg -i input -ss <start time> -to <end time> output
llogan
Também adicionei uma opção -tque pode ser usada alternativamente, o -eque significa suponha que eu deva cortar o próximo vídeo de 4min 36s, não preciso me preocupar em adicionar esses tempos manualmente, também forneci facilidade semelhante ao cortar os vídeos, veja os exemplos em README você entenderá porque sua CLI é mais fácil do que o simples ffmpeg. Eu concordo que não é tão poderoso, mas para uma pessoa normal é uma ferramenta útil.
srbcheema1
2
ffmpegtem a -toopção que você -tprovavelmente faz.
llogan
e a opção de cultura% idade mencionada no README sob a subopção cultura, isso também está disponível ?? Acabei de criar essa ferramenta sob demanda por alguém que me pagou alguns dólares, pois eles não querem se preocupar com a grande lista de opções cli, apenas eles queriam uma ferramenta que pudesse fazer certas tarefas com facilidade, mesmo que haja todas as opções no ffmpeg, mas ainda seria difícil para noob encontrar todos eles em sua seção de ajuda de linha de comando. esta ferramenta tem uma seção de ajuda simples de fácil compreensão para um
novato
Claro,-vf "crop=iw*0.1:ih*0.1:0:0"
llogan