我的資料夾中有大量 mp3 文件,我想將每一對(第 1 部分和第 2 部分)合併到一個 mp3 檔案中。所有文件都具有相同的格式。
我知道我可以對一對文件執行此操作:
ffmpeg -i "concat:01 Snow White Part 1.mp3|01 Snow White Part 2.mp3" -acodec copy "01 Snow White.mp3"
..但是我該如何在整個資料夾上執行此操作?這是資料夾內容:
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
答案1
假設您在 Linux 上使用 bash,並且假設所有檔案對都按照您列出的方式進行編號,我將使用 for 迴圈來迭代這些數字。
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
如果有任何未配對的文件,它們將被忽略。出於測試目的,我會echo
在 ffmpeg 之前添加,然後添加最後一行,done > test.txt
以便我可以檢查錯誤或精彩。
我希望這有幫助。
答案2
我在 macOS/zsh 中就是這樣做的。我確信有一個更簡單的方法
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