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.