Concatenar com ffmpeg

Olá, tem como concatenar arquivos wav com ffmpeg?

Tenho N’s arquivos em wav e outro chamado por ex: extra.wav
assim:
extra.wav
file1.wav
file2.wav
file…
e assim por diante.
Preciso que cada arquivo file tenho no final o som do arquivo extra.wav

já tentei fazer com ffmpeg mas o máximo que consegui foi arquivos vazios ou o som original ou o som do extra.wav

Como são muitos arquivos fazer manualmente fica inviável

1 curtida

Olá @dajoso :wave:t2:

Como se fosse pegar uma vinheta e colocar em todas entrevistas, matérias mas sem precisar fazer isso 1 a 1.

No Linux, será que o WinFF que é um GUI do ffmpeg, não conseguiria fazer os procedimentos?

Eu fazia isso com um aplicativo onde eu trabalhava, para informações de preços dos produtos na rádio da loja, então tinha vários arquivos que tinham de concatenar as vinhetas. O problema que o aplicativo é de propriedade da empresa específica, então tem de pagar pelos serviços deles, estou tentando lembrar o nome do aplicativo…

Não seria uma ideia colocá-los no VLC e criar um arquivo de playlist .m3u?

1 curtida

daria, mas ainda seria um processo manual

printf "file '%s'\n" *.wav > concatenados &&
ffmpeg -f concat -i concatenados -c copy saida.wav

Adaptado de Concatenate – FFmpeg

Note que todos os arquivos tem que ter o mesmo formato/codec. Aí está garantido (tudo WAV), mas fica o aviso para quem for fazer com outros formatos. Especialmente vídeo, em que arquivos com a mesma extensão podem ter codecs diferentes (por exemplo, mkv com áudio MP3, ou com áudio AAC, etc.)

1 curtida

isso, so que o extra.wav ficaria no final de cada arquivo file.wav. quem fosse escutar cada file.wav ouviria no final o extra.wav

1 curtida

O Capezotte mostrou o caminho, é um pouco complicado no começo mas depois fica fácil. É como se fosse criar uma estrutura for ou while, neste caso a estrutura for é melhor. Se preferir podemos tentar juntos.

:pray:t2:

Ah, entendi agora.

Seria:

# Para cada arquivo file[sei lá o q].wav:
for i in file*.wav; do
    # Criar uma list que o FFMpeg pode ler,
    # criando/substituindo inteiro um arquivo chamado 'conc'
    printf "file '%s'\n" "$i" extra.wav > conc 
    # Formato do conc: linhas "file 'arquivo'", na ordem que serão concatenados.
    # O printf é meio complicado demais para explicar num post só,
    # Mas aqui ele basicamente repete o padrão que eu disse lá em cima para o arquivo file
    # e para o extra.wav.

    # Agora só mandar o ffmpeg fazer o arquivo prometido, usando as informações do conc.
    ffmpeg -f concat -i conc -c copy "$i"comextra.wav
done
2 curtidas

Obrigado a todos pela ajuda. O código que deu certo foi esse último do @Capezotte. A princípio não estava funcionando, mas depois de alguns testes percebi que os meus waves estavam com espaços em branco ou caracteres como o sinal de mais “+” ou “#”. Foi só tirar que funcionou. Agora cada file.wav tem no final dele incluido o extra.wav

Muito obrigado A TODOS pela ajuda. Agora vou poder dar prosseguimento com meus projetos.

2 curtidas