Obtenha o comprimento do MP3 no Linux / FreeBSD

24

Eu tenho um monte de arquivos mp3 com vários tamanhos. Eu quero reduzir para 50% -60% de comprimento. Diz, de 1 minuto até 30 segundos. Deve ser trivial usando o ffmpeg. Mas, eu não sei como determinar o comprimento original dele como base para processamento usando o ffmpeg.

Alguém tem uma ideia?

    
por ariefbayu 31.10.2009 / 02:34

8 respostas

26

Com o ffmpeg, não sei como obter o comprimento como uma variável que você pode usar em um script. Mas mp3info faz.

mp3info -p "%S" sample.mp3   // total time in seconds
    
por 31.10.2009 / 04:35
22

ffmpeg imprimirá tudo o que sabe sobre o arquivo se você não fornecer outros argumentos. Use grep para remover tudo, exceto a "Duração":

$ ffmpeg -i foo.mp3 2>&1 | grep Duration
  Duration: 01:02:20.20, start: 0.000000, bitrate: 128 kb/s

Você também pode usar mplayer . Grep for line "ID_LENGTH=":

$ mplayer -ao null -identify -frames 0 foo.mp3 2>&1 | grep ID_LENGTH
ID_LENGTH=3740.00
    
por 31.10.2009 / 05:07
9

Curiosamente, o aplicativo EXIFTool oferece a duração do MP3 como a última linha!

$ exiftool somefile.mp3
ExifTool Version Number         : 7.98
File Name                       : somefile.mp3
Directory                       : .
File Size                       : 49 MB
File Modification Date/Time     : 2009:09:10 11:04:54+05:30
File Type                       : MP3
MIME Type                       : audio/mpeg
MPEG Audio Version              : 2.5
Audio Layer                     : 3
Audio Bitrate                   : 64000
Sample Rate                     : 8000
Channel Mode                    : Single Channel
MS Stereo                       : Off
Intensity Stereo                : Off
Copyright Flag                  : False
Original Media                  : True
Emphasis                        : None
ID3 Size                        : 26
Genre                           : Blues
Duration                        : 1:47:46 (approx)
    
por 31.10.2009 / 04:29
3

Apenas outra maneira de obter a duração usando somente ffmpeg e grep :

# ffmpeg -i rara.mp3 2>&1 |grep -oP "[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{2}"
00:03:49.12
    
por 20.09.2012 / 21:33
1

Eu pessoalmente uso o Mplayer para extrair as informações, principalmente porque eu já o tenho instalado e não posso ser incomodado para instalar um novo software desnecessariamente. A vantagem disso é que ele não está limitado a arquivos mp3 em particular, e deve funcionar com qualquer arquivo de mídia que o Mplayer possa manipular. O seguinte one-liner retornará o comprimento da trilha em segundos.

mplayer -identify -ao null -vo null -frames 0 Filename.mp3 | grep ^ID_LENGTH= | cut -d = -f 2
    
por 31.10.2009 / 05:07
1

Você pode usar o ffmpeg para obter a duração do arquivo. Apenas use:

ffmpeg -i <infile> 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,//
    
por 25.06.2012 / 12:34
1

As soluções que usam ffmpeg me parecem um pouco frágeis, pois estão analisando a saída que não é bem projetada como uma interface. Dito isso, eles provavelmente continuarão a trabalhar por vários anos, independentemente disso.

ffmpeg vem com uma ferramenta ffprobe para obter informações sobre arquivos de áudio (muitos formatos, incluindo mp3) e pode produzir saída legível por máquina. O comando a seguir obtém a duração da música.

ffprobe -show_streams -print_format json song.mp3 -v fatal | jq '.streams[0].duration'
    
por 08.01.2017 / 19:54
0

Eu tive o mesmo problema e descobri que o comando mplayer (goldPseudo) funcionava bem, mas descobri que, se você abrir um álbum no RhythmBox, verá sua linha de status indicando o número de faixas, o tempo total de reprodução e o tamanho do disco.

    
por 28.05.2014 / 19:36