Ich habe jede Menge MP3-Dateien in einem Ordner und möchte jedes Paar (Teil 1 und Teil 2) zu einer einzigen MP3-Datei zusammenführen. Alle Dateien haben das gleiche Format.
Ich weiß, dass ich dies mit einem Dateipaar machen kann:
ffmpeg -i "concat:01 Snow White Part 1.mp3|01 Snow White Part 2.mp3" -acodec copy "01 Snow White.mp3"
.. aber wie mache ich das mit einem ganzen Ordner? Dies ist der Ordnerinhalt:
01 Snow White Part 1.mp3
01 Snow White Part 2.mp3
02 Jack and the Beanstalk Part 1.mp3
02 Jack and the Beanstalk Part 2.mp3
03 The Wizard of Oz Part 1.mp3
03 The Wizard of Oz Part 2.mp3
04 Thumbelina Part 1.mp3
04 Thumbelina Part 2.mp3
05 Puss in Boots Part 1.mp3
05 Puss in Boots Part 2.mp3
06 The Lions Glasses Part 1.mp3
06 The Lions Glasses Part 2.mp3
07 The Snow Queen Part 1.mp3
07 The Snow Queen Part 2.mp3
08 Alibaba and the Forty Thieves Part 1.mp3
08 Alibaba and the Forty Thieves Part 2.mp3
09 The Emperor's New Clothes Part 1.mp3
09 The Emperor's New Clothes Part 2.mp3
10 Little Red Riding Hood Part 1.mp3
10 Little Red Riding Hood Part 2.mp3
Antwort1
Angenommen, Sie verwenden Bash unter Linux und alle Dateipaare sind wie von Ihnen aufgelistet nummeriert, würde ich die Nummern mit einer For-Schleife durchlaufen.
for c in {1..10}; do
c=$(printf '%02.f' "$i")
fnames=$(find . -maxdepth 1 -name "${i}*" | sort)
parts=$(wc -l <<< "$fnames")
if [ "$parts" -gt 1 ]; then
fnameout="${fnames%% Part 1*}.mp3"
ffmpeg -i "concat: $f" -acodec copy "$fnameout"
fi
done
Wenn es Dateien gibt, die nicht gepaart sind, werden sie ignoriert. Zu Testzwecken würde ich es echo
vor ffmpeg hinzufügen und dann die letzte Zeile erstellen, done > test.txt
damit ich nach Fehlern oder genialen Ergebnissen suchen kann.
Ich hoffe das hilft.
Antwort2
So habe ich es in macOS/zsh gemacht. Ich bin sicher, es gibt einen einfacheren Weg
PART1FILES=( )
for f in *1.mp3; do
PART1FILES+=($f)
done
PART2FILES=( )
for f in *2.mp3; do
PART2FILES+=($f)
done
INDEX=0
for i in $PART1FILES; do
FILE1=$i
FILE2=$PART2FILES[INDEX+1]
NEWFILE="${FILE1:0:-11}.mp3"
ffmpeg -i "concat:$FILE1|$FILE2" -acodec copy "$NEWFILE"
let INDEX=${INDEX}+1
done