Adicionar silêncio ao final de um MP3

8

Algum de vocês sabe de uma maneira de adicionar silêncio de uma duração fixa ao final de um MP3, no Linux? Por exemplo, usando MEncoder, FFmpeg, etc?

Ele precisa ser uma linha de comando, pois será roteirizado e executado em nosso servidor.

Eu pesquisei isso e o melhor que pude fazer é usar a função pad em SoX , mas isso não funcionará com MP3s.

Eu poderia convertê-lo para WAV, usar o SoX, convertê-lo novamente para MP3 e copiar os metadados (menos a duração) do original para o novo MP3. Mas, antes de escrever um roteiro para isso, pensei em ver se há uma solução de sucesso único.

    
por Max Williams 15.01.2013 / 15:06

2 respostas

6

Você pode fazer isso facilmente com o argumento pad do SoX e a seguinte sintaxe:

sox <oldfile> <newfile> pad <silence at beginning of file> <silence at end of file>

Exemplo:

sox mp3.mp3 mp3withsilence.mp3 pad 0 1

Esses silêncios estão em segundos. (Outros usos são possíveis usando uma sintaxe diferente, para inserir esses silêncios em posições específicas. Veja a documentação do SoX para mais.)

    
por 01.04.2014 / 06:17
11

Com o ffmpeg, você pode usar o filtro aevalsrc para gerar silêncio e, em um segundo comando, usar o protocolo concat para combiná-los sem perdas:

ffmpeg -filter_complex aevalsrc=0 -t 10 10SecSilence.mp3
ffmpeg -i "concat:input.mp3|10SecSilence.mp3" -c copy output.mp3

Você pode controlar a duração do silêncio alterando -t 10 para qualquer hora em segundos que preferir. Claro, você só precisa gerar o silêncio uma vez, então você pode manter o arquivo ao redor e usá-lo para preencher cada um dos arquivos que você deseja. Você também pode procurar o demuxer de concat - é um pouco mais intensivo no processador, mas você pode achar mais fácil usar um shell script.

Se você quiser fazer isso em um único comando, pode usar o filtro de concatenação - isso exigirá que você recodifique o áudio (pois os filtros são incompatíveis com -codec copy ), portanto a opção acima provavelmente será melhor para voce. Mas isso pode ser útil para quem trabalha com PCM bruto, procurando adicionar silêncio ao final antes de codificar o áudio:

ffmpeg -i input.mp3 \
-filter_complex 'aevalsrc=0::d=10[silence];[0:a][silence]concat=n=2:v=0:a=1[out]' \
-map [out] -c:a libmp3lame -q:a 2 output.mp3

Controle a duração do silêncio alterando d=10 para qualquer hora (em segundos) desejada. Se você usa este método, você pode encontrar este FFmpeg MP3 guia de codificação útil.

    
por 15.01.2013 / 16:13