여러 .mp3 파일을 하나의 .mp3으로 연결


45

여기 에서 제안한 것처럼 cat여러 .mp3 파일을 하나의 .mp3 파일로 연결 하는 명령을 사용하고 있습니다.

현재 폴더에 다음 .mp3 파일이 있다고 상상해보십시오.

001001.mp3 001002.mp3 001003.mp3 001004.mp3 001005.mp3

또는 다음과 같이 :

096001.mp3 096002.mp3 096003.mp3 096004.mp3

이 .mp3 파일을 오름차순으로 연결해야합니다. 즉 001001.mp3+001002.mp3+001003.mp3+etc.

이 .mp3 파일을 하나로 결합하기 위해 현재 폴더에서 다음 명령을 실행 중입니다.

cat *.mp3 > final.mp3

최종 .mp3 파일을 테스트 했는데 예상 한 것이지만 위 명령이 파일을 오름차순으로 선택 하는지 확인해야 합니다.

위의 명령이 항상 오름차순으로 파일을 연결하는지 확인할 수 있습니까?

감사합니다 선생님 !

답변:


46

cat이 작업에 적합한 도구가 아닙니다. MP3 형식에는 파일의 앞과 끝에 숨어있을 수있는 모든 종류의 정크가 포함되어 있으며이를 제거해야합니다. mp3wrap당신이 원하는 것입니다. 파일의 모든 메타 데이터를 제외하고 오디오를 함께 붙입니다.

sudo apt-get install mp3wrap
mp3wrap output.mp3 *.mp3

그렇게하기 전에 ls *.mp3올바른 순서인지 확인하십시오. 원래 6 년 전에이 답변을 썼을 때 와일드 카드 글롭은 제대로 작동하지 않았지만 지금은 그렇게 생각합니다.

예를 들어 파일 번호가 매겨져 있지만 0으로 채워지지 않은 경우 파일을 {1-11}.mp3정렬 하면 파일 이름을 바꿔야 할 수도 있습니다 1 10 11 2 3 4 5 6 7 8 9. 이것은 쉽게 고칠 수 있습니다 .


2
맞습니다-cat은 단일 mp3 파일 내에서 mp3 파일의 "배열 만들기"(있는 그대로)를 사용하여 mp3 파일 형식을 엉망으로 만듭니다. 그러나 플레이어 소프트웨어가 충분히 똑똑하다면 작동하는 것 같습니다.

파일 이름에 공백이있는 mp3를 처리하기 때문에이 방법이 더 효과적이었습니다.find . -maxdepth 1 -iname '*.mp3' -print0 | sort -z | xargs -0 mp3wrap output.mp3
bmaupin

@bmaupin 적절한 지적이지만 왜 Bash의 와일드 카드 확장을 사용하지 않았는지 잘 모르겠습니다. *.mp3충분해야하며 공백과 함께 작동합니다.
Oli

추출 패키지 관리자 에서 Mac 용으로 사용 가능 ! $ brew install mp3wrap.
Rubens

1
bash에서는 *.mp3알파벳 순서를 유지합니다. 파일의 이름을 지정하는 경우 09.mp3, 10.mp3, 11.mp3, 그것은 당신이 원하는 아마. 파일의 이름을 지정하는 경우 9.mp3, 10.mp3, 11.mp3, 그것은 당신이 원하는 아마도 아니지만, 당신은 할 수 있습니다 `ls *.mp3 | sort -n`.
Jo Liss

26

mp3wrap 은 충분한 해결책으로 보이지만 결과 파일을 재생할 때 타임 스탬프가 올바르지 않습니다. mp3wrap은 mp3를 나중에 분리하고 싶은 파일로 결합 할 때 가장 잘 사용되는 것 같습니다.

단순히 일부 mp3를 영구적으로 연결하고 싶었습니다. 파일을 연결하기 위해 ffmpeg를 사용했습니다.

  1. 먼저 ffmpeg를 설치하십시오

    • 우분투 15.04+

      sudo apt install ffmpeg
    • Ubuntu 14.10 이하 http://ffmpeg.org/download.html로
      이동 하여 정적 빌드 중 하나를 다운로드하고 압축을 풀고 / usr / local / bin에 복사하십시오.

  2. ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy output.mp3

추가 정보 : https://trac.ffmpeg.org/wiki/Concatenate#protocol
https://superuser.com/a/314245


ffmpeg실종이지만, avconv그것을 대체 askubuntu.com/questions/432542/...
muru은

2
예, 잠시 동안 avconv를 사용했지만 ffmpeg가 가지고 있고 avconv 가하지 않은 몇 가지 기능이 필요했으며 그 이후로는 사용하지 않았습니다. 요즘 avconv에 ffmpeg가 이미 알고있을 때 필요한 기능이 있는지 확인하는 데 시간을 낭비하는 것처럼 느껴집니다.
bmaupin

버그 보고서 토론에 참여해 주시기 바랍니다 .
orschiro

나는 이것을 시도했지만 훌륭하게 작동하지 않습니다. output.mp3a를 통해 실행 mp3val하면 Chrome64 이상에서 재생 문제를 일으키는 모든 종류의 오류가 표시됩니다 ( bugs.chromium.org/p/chromium/issues/detail?id=794782bugs.chromium.org/p/chromium/ 참조) issues / detail? id = 806601 # c10 )
Nino Škopac

멋진 솔루션. 어쨌든 노래도 정상화?
ar2015

8

이전에 제안했듯이 mp3wrap좋은 솔루션입니다. 그래도 항상 작동하지 않을 수 있습니다. 내가 아는 한, mp3wrap모든 입력 파일은 VBR과 CBR, 비트 전송률 등과 같은 동일한 특성을 가지고 있다고 가정합니다. 이 가정이 충족되지 않으면 실패 할 수 있습니다. 이 경우 유일한 해결책은 모든 mp3 파일을와 같은 원시 형식으로 디코딩하고 같은 .wav프로그램으로 연결하고 soxmp3로 모두 다시 인코딩하여 완료하는 것입니다.


mp3 파일을 다시 인코딩하면 ( "트랜스 코딩"이라고도 함) 품질이 떨어집니다. 나는 그것을 추천하지 않을 것입니다.
마틴 Tournoij

5

단일 문자를 기준으로 알파벳순으로 정렬합니다. naught는 1보다 낮은 값이므로 "01"은 "1"앞에옵니다.

다음은 예입니다. 이름이 1, 2, 3, 04, 05 및 06 인 파일이있는 디렉토리가 있습니다. 이들은 고유 한 파일 이름을 포함하는 텍스트 파일입니다.

test$ cat *
04
05
06
1
2
3

그래서, 그것은 것; 그러나 모든 파일이 올바르게 채워져 있는지 확인해야합니다.

이 멋진 bash 스크립트 줄을 사용하면 파일 이름을 시각적으로 비교하여 실수를 쉽게 발견 할 수 있습니다.

for f in $(ls); do printf "%05s\n" "$f"; done

출력은 다음과 같습니다.

   04
   05
   06
    1
    2
    3

그렇지 않은 경우 파일 이름 을 채워야합니다. StackOverflow에서 파일 이름 을 채우는 Bash 스크립트가 파일 이름지정 하는 방법을 설명합니다.


편집하다. Oli의 답변에 투표하면 훨씬 좋습니다. : P
나는 무언가를 추가하기 때문에 내 것을 떠날 것이지만, 그의 해결책을 사용해야한다.

mp3wrap output.mp3 `ls -1 *.mp3 | sort`

sort위에서 설명한 방식으로 항목을 정렬 한다는 점을 명심하십시오. 파일 이름의 길이가 같지 않으면 여전히 파일 이름을 채워야합니다.


4

대부분의 사람들이 제안 mp3wrap하고 있지만 단점이 있습니다. 생성 된 파일이 일부 플레이어에서 전체 길이를보고하지 않으므로 해당 지점을 지나갈 수 없습니다.

mp3cat내가 알 수있는 한, 일을 빠르고 잘 수행합니다. http://mulholland.xyz/dev/mp3cat/ 에서 다운로드 할 수 있으며 다음과 같이 사용됩니다.

mp3cat file1.mp3 file2.mp3 file3.mp3

또 다른 가능성은 sox

sudo apt-get install sox libsox-fmt-mp3
sox file1.mp3 file2.mp3 target.mp3

그러나 그것은 매우 느린 것 같습니다 (아마도 오디오를 디코딩하고 다시 인코딩합니까?)



0

당신은 전용 오디오 편집 프로그램을 (같은 사용 싶어 시도 할 수 있습니다 대담 )


0

나는 bmaupin의 주석을 좋아 하지만 다음을 사용하여 자연스러운 종류의 (버전) 숫자를 생성 할 수 있습니다 sort -V.

find . -maxdepth 1 -iname '*.mp3' -print0 | sort -Vz | xargs -0 mp3wrap ../tmp.mp3

' " () [] {}파일 이름 과 같은 특수 문자를 다룰 필요가 없습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.