ffmpeg でフォルダー内の mp3 ファイルペアを結合する

ffmpeg でフォルダー内の mp3 ファイルペアを結合する

フォルダー内に大量の mp3 ファイルがあり、各ペア (パート 1 とパート 2) を 1 つの mp3 ファイルに結合したいと考えています。すべてのファイルは同じ形式です。

私は2つのファイルでこれを実行できることがわかっています:

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

ペアになっていないファイルがある場合は無視されます。テスト目的で、echoffmpeg の前に追加してから最後の行を作成して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

関連情報