Qual comando devo usar para converter um mp3arquivo wavcuja taxa de bits é variável. Ou melhor, como eu saberia se a fonte de áudio é fixedbitrate ou variable?
Eu não acho que o formato de arquivo WAV suporta taxas de bits variáveis. Como todos os decodificadores de MP3 devem suportá-lo para estar em conformidade com os padrões, você deve poder converter qualquer arquivo MP3 em um WAV de taxa de bits fixa, embora seus resultados variem dependendo da qualidade do MP3 de origem e da taxa de bits fixa escolhida para o WAV criada. A maioria dos softwares de reprodução de MP3 oferece uma maneira de visualizar as propriedades do arquivo que está sendo reproduzido, para que você possa usá-lo para ver com que tipo de arquivo de origem está lidando.
martineau
E o comando? O que você recomenda?
Soham Dasgupta
Por favor, leia a resposta de martineau novamente. Corrigi alguns erros. Notavelmente, você não pode definir a taxa de bits para arquivos WAV codificados por PCM.
slhck
Respostas:
36
Você pode obter algumas informações sobre a taxa de bits dos seus arquivos de entrada usando o ffprobe song.mp3comando No entanto, isso indica apenas a taxa de bits do primeiro quadro. O VBR em arquivos MP3 geralmente é implementado simplesmente alterando a taxa de bits de cada quadro, portanto, se o uso não pode ser determinado, basta ler o cabeçalho do primeiro quadro. Normalmente, uso outro software de reprodutor de arquivos de áudio para determinar se o VBR está sendo usado, pois muitos o exibirão (Foobar2000 faz, por exemplo).
Quando você usa codecs de saída com perdas (como MPEG-1 Camada III ou AAC), o ffmpeg escolhe uma taxa de bits padrão para o fluxo de saída ou uma taxa de bits variável. Depende do próprio codificador.
Para codecs sem perda, você não pode definir uma taxa de bits variável, pois cada amostra recebe um número predefinido de bits. ffmpeg -i song.mp3 song.wavportanto, você recebe um arquivo WAV codificado em PCM com taxa de amostragem de 44.100 Hz e 16 bits por amostra. Isso resulta em cerca de 1411 kBit / s para todo o contêiner, provavelmente muito, muito maior que o arquivo de entrada MP3.
Se você deseja um tamanho de arquivo menor para o arquivo WAV codificado em PCM, defina um formato de amostra com menos profundidade de bits (consulte a -encodersopção para obter uma lista completa deles) e / ou escolha uma taxa de amostragem mais baixa ( -ar 22050usaria 22,05 kHz, por exemplo).
Se você codificar o áudio PCM em um contêiner WAV, não poderá definir a taxa de bits. Isso não faz sentido. PCM é um formato não compactado - você não pode dizer para usar mais ou menos bits por segundo. A única maneira de ajustar o tamanho é usar um tamanho de amostra diferente (consulte a -sample_fmtsopção). -ar 128ksignifica que a taxa de amostragem será de 128.000 Hz, em vez dos habituais 44,1 ou 48 kHz.
slhck
12
Você provavelmente está melhor ffmpeg -i song.mp3 song.wav, pois isso escolherá a taxa de bits apropriada (que provavelmente é 44,1 kHz). Se você estiver convertendo para wav, provavelmente não está querendo perder mais informações ..
naught101 24/04/15
@ naught101 estava certo, de fato, é melhor ffpmegescolher a taxa de bits de amostragem correta de acordo com os song.mp3dados de entrada. Dessa maneira, o wavarquivo de bitmap de saída terá a melhor taxa de bits. Isto significa btw que o tamanho do arquivo será grande, mas com a overfitting da data: `Corrente # 0: 0: Áudio: mp3, 44100 Hz, aparelho de som, s16p, 128 kb / s`
loretoparisi
1
É bastante seguro assumir que o objetivo do solicitante é gravar os arquivos WAV resultantes em um CD de áudio. A única frequência adequada para isso é 44100 Hz, portanto -ar 44100é obrigatória, mesmo que o ffmpeg use automaticamente um codec de 16 bits adequado.
9787 Mikhail T.
3
De acordo com o comentário naught101, eu seguiria esse processo para detectar o melhor acodec:
$ ffmpeg -formats | grep PCM
DE f32be PCM 32-bit floating-point big-endian
DE f32le PCM 32-bit floating-point little-endian
DE f64be PCM 64-bit floating-point big-endian
DE f64le PCM 64-bit floating-point little-endian
DE s16be PCM signed 16-bit big-endian
DE s16le PCM signed 16-bit little-endian
DE s24be PCM signed 24-bit big-endian
DE s24le PCM signed 24-bit little-endian
DE s32be PCM signed 32-bit big-endian
DE s32le PCM signed 32-bit little-endian
DE u16be PCM unsigned 16-bit big-endian
DE u16le PCM unsigned 16-bit little-endian
DE u24be PCM unsigned 24-bit big-endian
DE u24le PCM unsigned 24-bit little-endian
DE u32be PCM unsigned 32-bit big-endian
DE u32le PCM unsigned 32-bit little-endian
Neste ponto, considere sua plataforma para escolher entre big-endian, little-endiana escolher o bitrate:
$ ffmpeg -i sample.mp3
[mp3 @ 0x7fb33180da00] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from 'sample.mp3':
Metadata:
title : Saturday
artist : Winterwood
album : Love In The Heart
track : 2/15
TPA : 1/1
encoded_by : iTunes 11.0.1
genre : Country & Folk
date : 1997
Duration: 00:04:27.76, start: 0.000000, bitrate: 128 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
Podemos ver que esse arquivo de áudio é um mp3(isso não é óbvio, apesar da extensão do arquivo de entrada, basta verificar os bytes) tem uma taxa de bits 128 kb/s, o codec foi s16pamostrado em 44100 Hz, então escolhemos de acordo:
$ ffmpeg -i sample.mp3 -acodec pcm_s16le -ar 44100 sample.wav
Input #0, mp3, from 'sample.mp3':
Metadata:
title : Saturday
artist : Winterwood
album : Love In The Heart
track : 2/15
TPA : 1/1
encoded_by : iTunes 11.0.1
genre : Country & Folk
date : 1997
Duration: 00:04:27.76, start: 0.000000, bitrate: 128 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
File 'sample.wav' already exists. Overwrite ? [y/N] y
Output #0, wav, to 'sample.wav':
Metadata:
INAM : Saturday
IART : Winterwood
IPRD : Love In The Heart
IPRT : 2/15
TPA : 1/1
ITCH : iTunes 11.0.1
IGNR : Country & Folk
ICRD : 1997
ISFT : Lavf56.4.101
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
Metadata:
encoder : Lavc56.1.100 pcm_s16le
Stream mapping:
Stream #0:0 -> #0:0 (mp3 (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
size= 46125kB time=00:04:27.75 bitrate=1411.2kbits/s
video:0kB audio:46125kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000457%
Se você estiver no mac, pode verificar o áudio se não houver white noiseno início / fim (quando o áudio original do mp3 não tiver áudio por alguns ms / s):
$ afplay sample.wav
e, claro, você pode verificar o bitmap:
$ ffmpeg -i sample.wav
Input #0, wav, from 'sample.wav':
Metadata:
artist : Winterwood
date : 1997
genre : Country & Folk
title : Saturday
album : Love In The Heart
track : 2/15
encoder : Lavf56.4.101
encoded_by : iTunes 11.0.1
Duration: 00:04:27.76, bitrate: 1411 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s
Use ffmpeg para converter a mídia, verifique primeiro a especificação do arquivo usando ffprobe. use este comando
ffmpeg -i kimberly.wav -acodec pcm_s16le -ar 16000 -ac 1 song.wav
Onde
-pcm_s16le is codec 16 bit conversion
-ar is sampling rate (16000samples/sec)
-ac no of audio channel
Respostas:
Você pode obter algumas informações sobre a taxa de bits dos seus arquivos de entrada usando o
ffprobe song.mp3
comando No entanto, isso indica apenas a taxa de bits do primeiro quadro. O VBR em arquivos MP3 geralmente é implementado simplesmente alterando a taxa de bits de cada quadro, portanto, se o uso não pode ser determinado, basta ler o cabeçalho do primeiro quadro. Normalmente, uso outro software de reprodutor de arquivos de áudio para determinar se o VBR está sendo usado, pois muitos o exibirão (Foobar2000 faz, por exemplo).Quando você usa codecs de saída com perdas (como MPEG-1 Camada III ou AAC), o ffmpeg escolhe uma taxa de bits padrão para o fluxo de saída ou uma taxa de bits variável. Depende do próprio codificador.
Para codecs sem perda, você não pode definir uma taxa de bits variável, pois cada amostra recebe um número predefinido de bits.
ffmpeg -i song.mp3 song.wav
portanto, você recebe um arquivo WAV codificado em PCM com taxa de amostragem de 44.100 Hz e 16 bits por amostra. Isso resulta em cerca de 1411 kBit / s para todo o contêiner, provavelmente muito, muito maior que o arquivo de entrada MP3.Se você deseja um tamanho de arquivo menor para o arquivo WAV codificado em PCM, defina um formato de amostra com menos profundidade de bits (consulte a
-encoders
opção para obter uma lista completa deles) e / ou escolha uma taxa de amostragem mais baixa (-ar 22050
usaria 22,05 kHz, por exemplo).Aqui está um exemplo de fazer as duas coisas:
fonte
-sample_fmts
opção).-ar 128k
significa que a taxa de amostragem será de 128.000 Hz, em vez dos habituais 44,1 ou 48 kHz.ffmpeg -i song.mp3 song.wav
, pois isso escolherá a taxa de bits apropriada (que provavelmente é 44,1 kHz). Se você estiver convertendo para wav, provavelmente não está querendo perder mais informações ..ffpmeg
escolher a taxa de bits de amostragem correta de acordo com ossong.mp3
dados de entrada. Dessa maneira, owav
arquivo de bitmap de saída terá a melhor taxa de bits. Isto significa btw que o tamanho do arquivo será grande, mas com a overfitting da data: `Corrente # 0: 0: Áudio: mp3, 44100 Hz, aparelho de som, s16p, 128 kb / s`-ar 44100
é obrigatória, mesmo que o ffmpeg use automaticamente um codec de 16 bits adequado.De acordo com o comentário naught101, eu seguiria esse processo para detectar o melhor
acodec
:Neste ponto, considere sua plataforma para escolher entre
big-endian
,little-endian
a escolher o bitrate:Podemos ver que esse arquivo de áudio é um
mp3
(isso não é óbvio, apesar da extensão do arquivo de entrada, basta verificar os bytes) tem uma taxa de bits128 kb/s
, o codec fois16p
amostrado em44100 Hz
, então escolhemos de acordo:Se você estiver no mac, pode verificar o áudio se não houver
white noise
no início / fim (quando o áudio original do mp3 não tiver áudio por alguns ms / s):e, claro, você pode verificar o bitmap:
fonte
Use ffmpeg para converter a mídia, verifique primeiro a especificação do arquivo usando ffprobe. use este comando
ffmpeg -i kimberly.wav -acodec pcm_s16le -ar 16000 -ac 1 song.wav
Onde
-pcm_s16le is codec 16 bit conversion -ar is sampling rate (16000samples/sec) -ac no of audio channel
fonte