2008-09-04 15 views
73

oryginalne pytanieCrop MP3 do pierwszych 30 sekund

Chcę być w stanie wygenerować nowy (całkowicie poprawny) plik MP3 z istniejącego pliku MP3 do wykorzystania jako podgląd - try-before-you -kupiony styl. Nowy plik powinien zawierać tylko pierwsze sekundy utworu.

Teraz wiem, może po prostu „posiekać Stream” w n sekund (licząc od przepływności i nagłówka rozmiaru) podczas dostarczania pliku, ale to jest trochę brudny i realne PITA na torze VBR. Chciałbym móc wygenerować odpowiedni plik MP3.

ktoś jakieś pomysły?

odpowiedzi

Zarówno mp3split i ffmpeg są zarówno dobre rozwiązania. Wybrałem ffmpeg, ponieważ jest ono często instalowane na serwerach linuksowych i jest również easily available for windows. Oto kilka dobrych parametrów wiersza polecenia do generowania podglądów z ffmpeg

  • -t <seconds> kotlet po określonej liczbie sekund
  • -y plik siła nadpisywania
  • -ab <bitrate> zestaw bitrate np -ab 96k
  • -ar <rate Hz> ustaw częstotliwość próbkowania np. -ar 22050 dla 22.05kHz
  • -map_meta_data <outfile>:<infile> kopia metadanych utwór z pliku wejściowego do plik_wy

zamiast ustawiania -ab i -ar, można kopiować oryginalne ustawienia toru, jak sugeruje Farley Tim, z :

  • -acodec copy
+0

Nie wiedziałem, że ffmpeg może to zrobić. Dziękuję Ci. –

Odpowiedz

99

Polecam także ffmpeg, ale linia poleceń sugerowana przez Johna Bokera ma niezamierzony efekt uboczny: ponownie koduje plik do domyślnej szybkości transmisji bitów (czyli 64 kb/s w wersji, którą mam tutaj przynajmniej). To może dać Twoim klientom fałszywe wrażenie jakości plików dźwiękowych, a także zajmuje więcej czasu.

Oto wiersz poleceń, które będą pokroić na 30 sekund bez transkodowania:

ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3 

Przełącznik -acodec mówi ffmpeg użyć specjalnego kodeka „Kopiuj”, która nie transkodowanie. Jest błyskawicznie szybki.

UWAGA: komenda została zaktualizowana na podstawie uwag od oben Sonne

+18

Ostatnie wersje 'ffmpeg' (przynajmniej od 0.10.6) interpretują opcje inaczej w zależności od pozycji. Opcje związane z wejściami muszą pojawiać się przed opcjami -i, a opcje wyjściowe muszą pojawiać się po opcjach -i. Oznacza to, że 'ffmpeg -t 30 -i plik_wejściowy.mp3 -acodec copy outputfile.mp3' teraz * teraz * będzie poprawną odpowiedzią. –

+0

Czy mogę wyodrębnić 30-sekundowy dźwięk z 15-sekundowego pliku wejściowego, oznacza to, że jeśli plik jest większy niż 30 sekund, wówczas wyodrębnij 30 sekund, ale jeśli plik trwa 15 sekund, powtórz i wyodrębnij pełne 30 sekund. –

+2

Jeśli chcesz ustawić czas rozpoczęcia (przesunięcie), możesz użyć opcji ['-ss hh: mm: ss [.xxx]'] (https://ffmpeg.org/ffmpeg.html#Main-options). Przykład: 'ffmpeg -t 30 -ss 00: 00: 15.500 -i plik_wejściowy.mp3 -acodec copy plik_pliku wyjściowego.mp3' będzie wycinany na * 30 sekund * zaczynając od * 00h 00m 15s 500ms *. –

2

Nie użyłem go do tego konkretnego celu, ale założę się, że może to zrobić ffmpeg.

15

try:

ffmpeg -t 30 -i inputfile.mp3 outputfile.mp3 
5

Możecie spróbować Mp3Splt.

Używam go wcześniej w usłudze C#, która po prostu opakowała proces win32 mp3splt.exe. Zakładam, że coś podobnego można zrobić w twoim scenariuszu Linux/PHP.

+2

Używane MP3Split z sukcesem na mp3 cut – Freshblood

5

tylko myśl: może chcesz pominąć początek oryginalnego utworu. Załóżmy, że możesz użyć 30-sekundowego fragmentu zaczynając od trzeciej utworu.
W niektórych utworach pierwsze 30 sekund nie mówi zbyt wiele, ponieważ jest to tylko część "ustawiająca scenę" - na przykład Różowa Floyd 's Shine On You Crazy Diamond.

+4

+1 świetna piosenka! – alex

+0

się za różowy floyd –

42

Jeśli chcesz usunąć pierwsze 30 sekund (i zachować resztę), a następnie użyj tego:

ffmpeg -ss 30 -i inputfile.mp3 -acodec copy outputfile.mp3 
8

można użyć mp3cut :

cutmp3 -i foo.mp3 -O 30s.mp3 -a 0:00.0 -b 0:30.0 

jest w ubuntu repo, więc po prostu: sudo apt-get install cutmp3.

1

Zauważyłem, że miałem bardzo ciężki czas z ffmpeg, mptsplit i mp3cutter na CentOS, wszystkie z nich zgłaszają "Header Missing". Musiałem więc iść z klasą MP3 i kilkoma matematykami, żeby przeciąć pliki.

0

Mam błąd robiąc ten sam

Invalid audio stream. Exactly one MP3 audio stream is required. 
Could not write header for output file #0 (incorrect codec parameters  ?): Invalid argumentStream mapping: 

Fix dla mnie było: ffmpeg -p 00: 02: 43,00 -t 00:00:10 -i input.mp3 -codec: a libmp3lame out.mp3

2

To polecenie działa również idealnie. Skopiowałem moją muzykę z 20 sekund na 40 sekund.

-y: wymuszenie pliku wyjściowego do nadpisania.

ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3 
Powiązane problemy