Adicione 1 segundo de silêncio ao áudio através do FFmpeg

14

Eu tenho um arquivo de áudio 5.1 do AC3 no qual gostaria de inserir x segundos de áudio silencioso no início. Isso não tem nada a ver com o muxing de vídeo; portanto, seu deslocamento é inútil, pois parece funcionar apenas com um fluxo de áudio que acompanha um vídeo. Eu gostaria de conseguir isso com o ffmpeg. Alguma ideia?

Makaveli84
fonte
ffmpeg vai acrescentar ou juntar o mesmo codec mesma taxa de coisas?
Psycogeek 06/04
Eu suponho ... @Psycogeek
Makaveli84
E é capaz de gerar um arquivo de áudio silencioso exatamente da mesma taxa e canal de codec? ffmpeg.org/ffmpeg-filters.html#Examples-34 ? Eu mesmo uso métodos GUI, mas fazer o que você pede deve ser bastante fácil e rápido, desde que os parâmetros sejam os mesmos. Aqui é onde é mostrado adicionando-o a um Mov. stackoverflow.com/questions/12368151/... nas respostas
Psycogeek
Use o Ardour para adicionar o que quiser. Se você quiser efeitos assim baixar os plugins Bezerro ..
painel

Respostas:

23

Usando o desmuxador concat (adicione silêncio ao início e / ou final)

Use o desmuxador concat se desejar evitar recodificar o segmento principal. Este método funciona para adicionar silêncio ao começo ou ao fim (ou ambos).

  1. Use o filtro de fonte de áudio anullsrc para criar o áudio silencioso. Você precisará corresponder ao formato, layout do canal e taxa de amostragem do arquivo de áudio principal. Exemplo para criar um canal de 5,1 canais, taxa de amostragem de 48000 Hz e um segundo arquivo de áudio AC3 silencioso (como esse era o formato da pergunta):

    ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 1 silence.ac3
    
  2. Agora crie um arquivo de texto chamado input.txtque lista os arquivos a serem concatenados:

    file 'silent.ac3'
    file 'main.ac3'
    

    Se você quiser o silêncio no final, basta alterar a ordem dos arquivos input.txt.

  3. Agora você pode concatenar os arquivos usando o desmuxer concat :

    ffmpeg -f concat -i input.txt -codec copy output.ac3
    

Usando o filtro concat (adicione silêncio ao início e / ou final)

Use o filtro concat se desejar fazer tudo em um comando ou se desejar gerar um formato diferente da entrada (pois esse método é recodificado de qualquer maneira). Este método funciona para adicionar silêncio ao começo ou ao fim ou a ambos.

Exemplo para adicionar 1 segundo de silêncio ao início de uma entrada estéreo com taxa de amostragem de 44100 Hz:

ffmpeg -f lavfi -t 1 -i anullsrc=channel_layout=stereo:sample_rate=44100 -i audio.oga -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" output.m4a
  • A filtragem resultará na recodificação enquanto o desmuxador concat não.

  • No anullsrc, é recomendável combinar o layout do canal e a taxa de amostragem da entrada.

  • Se você deseja adicionar silêncio até o fim, em vez basta mudar a ordem das entradas dadas ao filtro concat: [1:a][0:a]concat=n=2:v=0:a=1.


Usando o filtro adelay (adicione silêncio ao início)

Use o filtro de áudio adelay se desejar fazer tudo em um comando ou se desejar gerar um formato diferente da entrada (pois esse método é recodificado de qualquer maneira). Isso funciona apenas para adicionar silêncio ao início de um arquivo.

Este exemplo adicionará 1 segundo de silêncio ao início de uma entrada estéreo:

ffmpeg -i input.flac -af "adelay=1000|1000" output.opus
  • A filtragem resultará na recodificação enquanto o desmuxador concat não.
  • O valor está em milissegundos. Usuários de versões recentes (git master atual ou algo mais novo que o FFmpeg 4.1) podem usar 1spor um segundo.
  • Cada canal precisa de seu próprio atraso. Por exemplo, uma entrada mono usaria adelay=1000, enquanto uma entrada 5.1 usaria adelay=1000|1000|1000|1000|1000|1000.

Usando o filtro apad (adicione silêncio até o fim)

Use o filtro de áudio apad se desejar fazer tudo em um comando ou se desejar gerar um formato diferente da entrada (pois esse método é recodificado de qualquer maneira). Isso funciona apenas para adicionar silêncio ao final de um arquivo.

Este exemplo adicionará 1 segundo de silêncio ao final:

ffmpeg -i input.wav -af "apad=pad_dur=1" output.m4a
  • A filtragem resultará na recodificação enquanto o desmuxador concat não.

  • A pad_duropção foi adicionada após o lançamento do FFmpeg 4.1, portanto, você precisará usar uma compilação recente a partir da ramificação principal do git ou aguardar o FFmpeg 4.2.

llogan
fonte
5
[Parsed_aevalsrc_0 @ 000000000195fec0] This syntax is deprecated. Use '|' to sep arate the list items.A nova sintaxe é-i "aevalsrc=0|0|0|0|0|0:d=1"
Steven Penny #
Posso fazer isso para vários arquivos de uma vez?
Aaron Franke
@AaronFranke Sim, mas o ffmpeg não possui esse recurso por si só. Você precisaria usar seu shell ou uma linguagem de script para fazer um loop do comando. Seu sistema operacional é desconhecido, por isso não posso fornecer uma solução pronta para uso, mas consulte Como você converte um diretório inteiro com o ffmpeg? para algumas informações gerais (pule a resposta aceita, pois é desnecessariamente complexa e ineficiente).
Llogan 20/03/19