ffmpeg를 사용하여 폴더에 mp3 파일 쌍 결합

ffmpeg를 사용하여 폴더에 mp3 파일 쌍 결합

폴더에 많은 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

페어링되지 않은 파일이 있으면 무시됩니다. 테스트 목적으로 ffmpeg 앞에 추가한 다음 실수나 훌륭함을 확인할 수 있도록 echo마지막 줄을 만듭니다 .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

관련 정보