Łączenie kilku plików .mp3 w jeden plik .mp3

45

Jak sugerowano tutaj , używam catpolecenia, aby połączyć kilka plików .mp3 w jeden plik .mp3.

Wyobraź sobie, że mam następujące pliki .mp3 w bieżącym folderze:

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

lub tak:

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

Muszę połączyć te pliki .mp3 w kolejności rosnącej, tzn 001001.mp3+001002.mp3+001003.mp3+etc.

Aby połączyć te pliki .mp3 w jeden, wykonuję następujące polecenie w bieżącym folderze:

cat *.mp3 > final.mp3

Przetestowałem końcowy plik .mp3 i tego się spodziewam, ale muszę się upewnić, że powyższe polecenie wybiera pliki w kolejności rosnącej.

Czy mogę mieć pewność, że powyższe polecenie zawsze łączy pliki w kolejności rosnącej?

Dziękuję Sir !

Bakhtiyor
źródło

Odpowiedzi:

46

catnie jest odpowiednim narzędziem do tego zadania. Format MP3 zawiera wszelkiego rodzaju śmieci, które mogą czaić się z przodu i na końcu pliku, i należy to usunąć. mp3wrapjest tym, czego chcesz. Wykluczy to wszelkie metadane w plikach i sklei dźwięk.

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

Zanim to zrobisz, biegnij, ls *.mp3aby sprawdzić, czy są w odpowiedniej kolejności. Kiedy pierwotnie napisałem tę odpowiedź (ponad sześć lat temu!) Globalne symbole wieloznaczne najwyraźniej nie zachowywały się dobrze, ale myślę, że teraz.

Może zajść potrzeba zmiany nazw plików, jeśli na przykład są one ponumerowane, ale nie mają zerowania, {1-11}.mp3zostaną posortowane według 1 10 11 2 3 4 5 6 7 8 9. Można to łatwo naprawić .

Oli
źródło
2
Right-cat zmieni format pliku mp3, tworząc „matrycę” plików mp3 w jednym pliku mp3. Ale wydaje się, że działa, jeśli oprogramowanie odtwarzacza jest wystarczająco inteligentne.
To działało dla mnie lepiej, ponieważ obsługuje pliki mp3 ze spacjami w nazwie pliku:find . -maxdepth 1 -iname '*.mp3' -print0 | sort -z | xargs -0 mp3wrap output.mp3
bmaupin
@bmaupin Racja, ale nie jestem pewien, dlaczego nie użyłem po prostu rozszerzenia wieloznacznego Basha. *.mp3powinno wystarczyć (i działa ze spacjami).
Oli
Dostępne dla systemu Mac z menedżera pakietów parzenia ! $ brew install mp3wrap.
Rubens
1
W bash *.mp3gwarantuje zachowanie porządku alfabetycznego. Jeśli pliki są nazywane 09.mp3, 10.mp3, 11.mp3, to chyba to, co chcesz. Jeśli pliki są nazywane 9.mp3, 10.mp3, 11.mp3, że prawdopodobnie nie jest to, co chcesz, ale można to zrobić `ls *.mp3 | sort -n`.
Jo Liss,
26

mp3wrap wydaje się być całkiem przyzwoitym rozwiązaniem, ale kiedy odtworzyłem plik wynikowy, znacznik czasu był nieprawidłowy. Wygląda na to, że mp3wrap najlepiej jest stosować, gdy dołączasz mp3 do pliku, który chcesz podzielić później.

Chciałem po prostu na stałe połączyć niektóre pliki mp3 razem. Skończyło się na tym, że użyłem ffmpeg do połączenia plików:

  1. Najpierw zainstaluj ffmpeg

    • Ubuntu 15.04+

      sudo apt install ffmpeg
    • Ubuntu 14.10 i nowsze wersje
      Przejdź do http://ffmpeg.org/download.html , pobierz jedną ze statycznych wersji, rozpakuj ją i skopiuj do / usr / local / bin

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

Więcej informacji: https://trac.ffmpeg.org/wiki/Concatenate#protocol
https://superuser.com/a/314245

bmaupin
źródło
ffmpegbrakuje, ale avconvgo zastępuje: askubuntu.com/questions/432542/…
muru
2
Tak, używałem avconv przez jakiś czas, ale potem potrzebowałem pewnych funkcji, które miały ffmpeg i avconv, i od tego czasu go nie używałem. Obecnie wydaje się, że strata czasu polega na sprawdzeniu, czy avconv ma funkcje, których potrzebuję, kiedy już wiem, że ffmpeg ma.
bmaupin,
Zapraszamy do przyłączenia tego raportu bug dyskusji.
orschiro
Próbowałem tego i to nie działa świetnie; spróbuj uruchomić output.mp3przez a, mp3vala zobaczysz różnego rodzaju błędy, które spowodują problemy z odtwarzaniem w Chrome64 + (zobacz bugs.chromium.org/p/chromium/issues/detail?id=794782 i bugs.chromium.org/p/chromium/ problemy / szczegóły? id = 806601 # c10 )
Nino Škopac
niesamowite rozwiązanie. w każdym razie, aby znormalizować piosenki?
ar2015
8

Jak wcześniej sugerowano, mp3wrapjest dobrym rozwiązaniem. Jednak może nie działać przez cały czas. O ile mi wiadomo, mp3wrapzakłada, że ​​wszystkie pliki wejściowe mają takie same cechy, jak VBR vs CBR, szybkość transmisji i tak dalej. Jeśli to założenie nie zostanie spełnione, może się nie powieść. W takim przypadku jedynym rozwiązaniem byłoby zdekodowanie wszystkich plików mp3 do formatu surowego jak .wav, połączenie ich z programem podobnym soxi zakończenie przez ponowne zakodowanie wszystkich plików mp3.

Loevborg
źródło
Pamiętaj, że ponowne kodowanie plików mp3 (znane również jako „transkodowanie”) spowoduje utratę jakości. Nie polecałbym tego.
Martin Tournoij
5

Dokonuje sortowania alfabetycznego na podstawie pojedynczych znaków. Oznacza to, że „01” występuje przed „1”, ponieważ nic nie ma niższej wartości niż jeden.

Oto przykład. Mam katalog z plikami o nazwach 1, 2, 3, 04, 05 i 06. Są to pliki tekstowe zawierające własne nazwy plików:

test$ cat *
04
05
06
1
2
3

Tak, tak będzie; ale musisz upewnić się, że wszystkie pliki są odpowiednio „wypełnione”.

Ta fajna linia skryptu bash pozwala wizualnie porównać nazwy plików, dzięki czemu bardzo łatwo jest wykryć wszelkie błędy:

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

Jego dane wyjściowe będą wyglądały następująco:

   04
   05
   06
    1
    2
    3

Jeśli nie są, musisz wpisać nazwy plików: Skrypt Bash, aby wpisać nazwy plików na StackOverflow, wyjaśnia, jak to zrobić.


Edytować. Głosuj na odpowiedź Oli, jest znacznie lepiej. : P
Opuszczę moje, bo to coś dodaje, ale powinieneś skorzystać z jego rozwiązania,

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

Pamiętaj, że sortnadal posortujesz rzeczy w sposób opisany powyżej, nadal będziesz musiał uzupełniać nazwy plików, jeśli nie są one równej długości.

Stefano Palazzo
źródło
4

Większość ludzi sugeruje mp3wrap, ale ma to swoje wady: wygenerowany plik nie zgłasza pełnej długości w niektórych odtwarzaczach, a następnie nie można przeszukać tego punktu.

mp3catwykonuje pracę szybko i dobrze, o ile wiem. Można go pobrać w http://mulholland.xyz/dev/mp3cat/ i używać w następujący sposób:

mp3cat file1.mp3 file2.mp3 file3.mp3

inną możliwością byłoby sox

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

ale wydaje się bardzo wolny (możliwe, że dekoduje i ponownie koduje dźwięk?)

josinalvo
źródło
3

Uważam, że łącznik audio usługi online działa bardzo dobrze i zachowuje prawidłowy znacznik czasu (w przeciwieństwie do mp3wrap).

orschiro
źródło
0

Możesz spróbować użyć dedykowanego programu do edycji dźwięku (takiego jak Audacity )

Lawand
źródło
0

Uwielbiam komentarz bmaupin , ale może generować naturalne liczby (wersji) przy użyciu sort -V:

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

i nie musisz zajmować się znakami specjalnymi jak ' " () [] {}w nazwie pliku.

zhoux
źródło