Sie können das folgende Bash-Skript verwenden:
numFiles=3 maxStart=10 idx=1 for randomStart in $(jot -r $numFiles 0 $maxStart); do ffmpeg -y -ss "$randomStart" -i "track$.mp3" -t 10 -c:a copy "track$-chunk.mp3" idx=$((idx + 1)) done
Hier müssen Sie die Anzahl der Dateien ( track1
durch track3
) und die maximale Startposition angeben (z. B. wenn Ihre Dateien nur 20 Sekunden lang sind, sollten Sie höchstens um 00:00:10 beginnen).
Das jot
Dienstprogramm wird zum Erstellen von Zufallszahlen zwischen 0 und $maxStart
10 (im obigen Beispiel 10) verwendet. Unter Linux jot
nicht verfügbar; stattdessen verwenden shuf -n $numFiles -i 0-$maxStart
.
Verketten Sie dann die Chunks (siehe den Eintrag im FFmpeg-Wiki ):
ffmpeg -f concat -safe 0 -i <(for f in ./*-chunk.mp3; do echo "file '$PWD/$f'"; done) -c copy output.mp3
Es verwendet eine spezielle Shell-Syntax, um eine temporäre Verkettungsdatei zu erstellen. Dadurch werden die Bitstreams kopiert, sodass keine Neucodierung durchgeführt wird.