Combinando vários arquivos MP3 de um dia específico

3

Todos os dias tenho cerca de 10 arquivos mp3 diferentes criados no meu servidor. O que eu gostaria de fazer é configurar um cronjob para rodar à noite e combinar as faixas atuais em uma faixa mp3. Eu não me importo muito com as informações da ID3, embora se esse método tiver a capacidade de mesclar essas informações, isso seria ideal.

Manter tudo simples aqui é o que preciso fazer:

  • Combine arquivos .mp3 do dia atual
  • Exclua os arquivos individuais depois, pois só preciso do mp3 combinado

Estou aberto a usar o Python ou um script Bash para fazer isso, no entanto, qualquer outra solução funcionaria também. Isso é possível fazer?

    
por ComputerLocus 08.10.2013 / 01:50

1 resposta

2

Solução usando o protocolo de concat do ffmpeg

Você deve primeiro encontrar os arquivos que deseja mesclar (mais recentes que um dia)

find path/to/files -name '*.mp3' -mtime -1

E mescle-os conforme descrito em outra pergunta . Finalmente, a string usada para concatinação deve ser modificada para ser válida para rm (aspas em vez de canos, etc.).

O script final é então:

#!/bin/bash
concat=$(echo -n "concat:" && find path/to/files -name '*.mp3' -mtime -1 -exec echo -n "{}|" \;)
ffmpeg -i "${concat%|}" -acodec copy output.mp3

IFS=$'\n'
for i in $(echo $concat | sed -e 's/^concat://' -e 's/|$//' -e 's/|/\n/g');
    do rm -i $i
done

${concat%|} retira o canal final da variável e a expressão sed cria uma lista de arquivos (um por linha) a serem excluídos por rm .

Solução classificável (precisa do ffmpeg 1.1 ou mais recente)

Com versões mais recentes de ffmpeg , os arquivos que devem ser concatenados podem ser lidos de um arquivo . Isso permite uma classificação fácil dos snippets.

#!/bin/bash

IFS=$'\n'

concatlist=$(find /path/to/files -name '*.mp3' -mtime -1 -printf "file '%p'\n" | sort)

ffmpeg -f concat -i <(echo "$concatlist") -c copy output.mp3

for i in $(echo "$concatlist" | sed -e "s/^file '//" -e "s/'$//"); do
    rm -i "$i"
done

Esta solução falha se um dos nomes de arquivo contiver uma aspa simples ( ' ). Se alguém souber como corrigir isso, altere-o.

    
por 08.10.2013 / 08:31