Jak dołączyć / połączyć wiele plików mp3?

59

Przeszukując Google, jak dołączyć / połączyć wiele plików mp3, sugeruję, że powinienem po prostu catje razem.

To może „działać”, ale najwyraźniej nie jest to właściwy sposób, ponieważ każdy nagłówek i zestaw tagów IDv3 również zostaną połączone.

Czy istnieje program dla Linuksa, który można skryptować, aby dołączyć / połączyć wiele plików mp3?

Czy mplayer / mencoder / ffmpeg może to zrobić?

Sandra
źródło

Odpowiedzi:

78

Spowoduje to konkatenację dwóch plików mp3, a wynikowe metadane będą tymi z pierwszego pliku:

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

Wynika to z faktu, że w przypadku ffmpeg cała część „concat:” jest pojedynczym „plikiem wejściowym”, a jej metadane będą dotyczyły pierwszego skonkatenowanego pliku. Jeśli zamiast tego chcesz użyć metadanych z drugiego pliku, musisz dodać go jako fikcyjny plik wejściowy i odwzorować jego metadane na dane wyjściowe:

ffmpeg -i "concat:file1.mp3|file2.mp3" -i file2.mp3 -acodec copy test.mp3 -map_metadata 0:1

Jeśli chcesz skonstruować swoje metadane z dwóch metadanych, musisz to zrobić ręcznie. Możesz zrzucić metadane pliku

ffmpeg -i file1.mp3 -f ffmetadata file1.metadata

Po zrzuceniu obu metadanych i skonstruowaniu nowych metadanych, możesz dodać go do pliku wyjściowego za pomocą -metadatai możesz wyłączyć kopiowanie metadanych poprzez ustawienie -map_metadataodwzorowania z ujemnego numeru pliku wejściowego. To ustawia wartość nazwy i żadnych innych metadanych:

ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy -metadata "title=Some Song" test.mp3 -map_metadata 0:-1
Ambroz Bizjak
źródło
Do Twojej wiadomości wymagana jest pewna wersja ffmpeg. Jeśli wyświetla się komunikat, że nie znaleziono pliku concat ... spróbuj zaktualizować i uruchomić go ponownie
Sameer
Działa dobrze w ffmpeg 0.10.4 w Gentoo. Czego używasz? Czy na pewno nie pomyliłeś polecenia?
Ambroz Bizjak
1
Chciałem tylko wyjaśnić kilka rzeczy dla innych: -acodecoznacza, że ​​będzie używany kodek audio i copyoznacza, że ​​będzie tylko multipleksowanie i demultipleksowanie, ale nie kodowanie / transkodowanie (tj. Bardzo szybkie i bez utraty jakości)
Housemd
1
Byłoby wspaniale, gdyby istniał program GUI, w którym mogę przeciągać i upuszczać wiele plików (np. Posortowane chronologicznie dla nagrań nagranych sekwencyjnie i być może niektóre pliki poddane edycji), a następnie wyprowadza jeden plik.
James Ray
1
To dobra odpowiedź, jednak w prawie każdym przypadku wynikowy plik MP3 ma krótką (poniżej sekundy) przerwę między miejscem połączenia plików. Więc jeśli próbujesz scalić ścieżki MP3, aby stworzyć płynny album / zestaw / cokolwiek, to nie działa całkiem dobrze.
Jaszczurka,
13

Mp3Wrap - narzędzie wiersza polecenia, które pakuje wiele plików MP3 w jeden, odtwarzany plik MP3, bez utraty nazw plików lub informacji ID3 i bez ponownego kodowania . Obsługuje również archiwizację danych innych niż audio, takich jak listy odtwarzania, pliki informacyjne i obrazy okładek wewnątrz plików MP3. Pliki te można później rozpakować (np. Przy pomocy mp3splt); zwykłe dekodery MP3 mogą odtwarzać cały strumień audio jako jedną długą ścieżkę.

lig
źródło
1
Dzięki za tę rekomendację .. znacznie lżejsze / prostsze rozwiązanie niż ffmpeg, ponieważ łączyłem ponad 100 plików mp3 i chciałem opcji podziału z powrotem na oryginały.
joshbaptiste
Ta właściwość już nie działa - spróbuj połączyć kilka plików i sprawdź plik wyjściowy mp3val- zgłosi błędy synchronizacji. Oznacza to, że nie będzie odtwarzany po pierwszym fragmencie w Chrome 64+ (zobacz bugs.chromium.org/p/chromium/issues/detail?id=794782 i bugs.chromium.org/p/chromium/issues/detail?id = 806601 # c10 )
Housemd
Nie działa w systemie Windows. Brak zachowanych metadanych.
Gruber
9

Spowoduje to połączenie folderu pełnego MP3 w pojedynczy plik MP3:

1) Zapisz listę plików MP3 do konkatenacji, np.

$ cat mylist.txt
file '/tmp/01.mp3'
file '/tmp/02.mp3'
file '/tmp/03.mp3'
file '/tmp/04.mp3'
file '/tmp/05.mp3'
file '/tmp/06.mp3'
file '/tmp/07.mp3'

2) Uruchom następującą komendę ( nie-safe 0 jest wymagana, jeśli plik mylist.txt używa ścieżek względnych ):

$ ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp3
Miles Wolbe
źródło
3

Jeśli chcesz konkatować wszystkie pliki mp3 bieżącego katalogu:

function join_by { local IFS="$1"; shift; echo "$*"; }
files=(*.mp3)
ffmpeg -i "concat:`join_by "|" $files`" -acodec copy output.mp3
hansaplast
źródło
0

Jeśli potrzebujesz skryptów, prawdopodobnie lepiej jest użyć rozwiązania ffmpeg. Jednak jeśli kiedykolwiek potrzebujesz aplikacji do wykonywania takich czynności, możesz wypróbować Audacity . Jest to oprogramowanie typu open source i wieloplatformowe. Nie używałem go do dołączania plików mp3, ale użyłem go do wycinania fragmentów z mp3 i wyciszania ich na końcu. Jestem gotów się założyć, że możesz dołączyć do mp3 i przenikać je ze sobą.

Brandon
źródło
4
Audacity, o ile mi wiadomo, działa na surowych danych dźwiękowych, a połączenie z nimi plików mp3 spowoduje pogorszenie z powodu transkodowania.
Ambroz Bizjak
0

zsh:

audio-join() ffmpeg -i "concat:${(j:|:)@[2,-1]}" -acodec copy $1

audio-join output.mp3 *.mp3
Szczęśliwa twarz
źródło
Oczekujemy, że odpowiedzi będą zawierać wyjaśnienia. (Nie wszystkie odpowiedzi na tej stronie są dobrym przykładem.)
Scott,
0

W oparciu o odpowiedź Milesa Wolbe, oto jedna linijka, która działała dla mnie:

ls *.mp3 | \
    sed -e "s/\(.*\)/file '\1'/" | \
    ffmpeg -protocol_whitelist 'file,pipe' -f concat -i - -c copy output.mp3
Andy Balaam
źródło