Przytnij MP3 do pierwszych 30 sekund

103

Oryginalne pytanie

Chcę mieć możliwość wygenerowania nowego (w pełni poprawnego) pliku MP3 z istniejącego pliku MP3 do wykorzystania jako podgląd - styl wypróbuj przed zakupem. Nowy plik powinien zawierać tylko pierwsze n sekund utworu.

Teraz wiem, że mogę po prostu „pociąć strumień” na n sekund (obliczając na podstawie bitrate i rozmiaru nagłówka) podczas dostarczania pliku, ale jest to trochę brudne i prawdziwy PITA na ścieżce VBR. Chciałbym mieć możliwość wygenerowania odpowiedniego pliku MP3.

Czy ktoś ma jakieś pomysły?

Odpowiedzi

Zarówno mp3spliti ffmpegto zarówno dobre rozwiązania. Wybrałem ffmpeg, ponieważ jest powszechnie instalowany na serwerach linux i jest również łatwo dostępny dla systemu Windows . Oto kilka dobrych parametrów wiersza poleceń do generowania podglądów za pomocą ffmpeg

  • -t <seconds> posiekaj po określonej liczbie sekund
  • -y wymuś nadpisanie pliku
  • -ab <bitrate>ustaw bitrate np. -ab 96k
  • -ar <rate Hz>ustaw częstotliwość próbkowania np. -ar 22050 na 22.05kHz
  • -map_meta_data <outfile>:<infile> skopiuj metadane ścieżki z pliku infile do pliku wyjściowego

zamiast ustawiania -ab i -ar, możesz skopiować oryginalne ustawienia ścieżki, jak sugeruje Tim Farley, za pomocą:

  • -acodec copy
Cheekysoft
źródło
Nie używałem go do tego konkretnego celu, ale założę się, że ffmpeg to potrafi.
grapefrukt
Tylko jedna myśl: możesz pominąć początek oryginalnej piosenki. Powiedzmy, że możesz użyć 30-sekundowego utworu, zaczynając od trzeciej części utworu. W niektórych piosenek, pierwsze 30 sekund nie powiedzieć, ile to tylko „ustawiania sceny” część - na przykład Pink Floyd „s Shine on you crazy Diamonda .
Tomas Sedovic
Tak jak uwaga, miałem naprawdę zły czas z ffmpeg, mptsplit i mp3cutter na CentOS, wszystkie z nich zgłaszały „Brak nagłówka”. Więc musiałem iść z klasą MP3 i trochę matematyki, aby wyciąć według rozmiaru pliku.
Gardner
Nie zdawałem sobie sprawy, że ffmpeg może to zrobić. Dziękuję Ci.
Sridhar Sarnobat

Odpowiedzi:

142

Polecam również ffmpeg, ale wiersz poleceń sugerowany przez Johna Bokera ma niezamierzony efekt uboczny: ponownie koduje plik do domyślnego bitrate (który wynosi 64 kb / sw wersji, którą tu mam). Może to dać klientom fałszywe wyobrażenie o jakości plików dźwiękowych, a także może to zająć więcej czasu.

Oto wiersz poleceń, który pokroi do 30 sekund bez transkodowania:

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

Przełącznik -acodec mówi ffmpeg, aby używał specjalnego kodeka „kopiującego”, który nie transkoduje. Jest błyskawiczny.

UWAGA: polecenie zostało zaktualizowane na podstawie komentarza Oben Sonne

Tim Farley
źródło
21
Najnowsze ffmpegwersje (przynajmniej od 0.10.6) interpretują opcje inaczej w zależności od pozycji. Opcje związane -i ...z danymi wejściowymi muszą pojawić się przed, a opcje związane z danymi wyjściowymi muszą pojawić się po -i .... Oznacza to, ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3że teraz byłaby poprawna odpowiedź.
Oben Sonne
Czy mogę wyodrębnić 30-sekundowy dźwięk z 15-sekundowego pliku wejściowego, oznacza to, że jeśli plik jest większy, to 30 sekund, a następnie wyodrębnia 30 sekund, ale jeśli plik 15 sekund, powtórz i wyodrębnij pełne 30 sekund.
Girish Patidar,
6
Jeśli chcesz ustawić czas rozpoczęcia (przesunięcie), możesz użyć -ss hh:mm:ss[.xxx]. Przykład: pokroiffmpeg -t 30 -ss 00:00:15.500 -i inputfile.mp3 -acodec copy outputfile.mp3 do 30 sekund, zaczynając od 00h 00m 15s 500ms .
patryk.beza
1
z jakiegoś powodu powyższe polecenie nie zadziałało, ale jeśli zmieniłem je na: ffmpeg -i inputfile.mp3 -t 30 -acodec copy outputfile.mp3to działa idealnie
Krishnendu
Dla mnie opcje -t i -s muszą być używane osobno w 2 poleceniach. Ale działa, dzięki!
Yan King Yin
57

Jeśli chcesz USUNĄĆ pierwsze 30 sekund (i zachować resztę), użyj tego:

ffmpeg -ss 30 -i inputfile.mp3 -acodec copy outputfile.mp3
plik.jxc
źródło
18

próbować:

ffmpeg -t 30 -i inputfile.mp3 outputfile.mp3
John Boker
źródło
12

To polecenie działa również doskonale. Przyciąłem swoje pliki muzyczne z 20 do 40 sekund.

-y: wymusza nadpisanie pliku wyjściowego.

ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3
Rahul Chauhan
źródło
1
Idealny! Dzięki za udostępnienie tego.
HerrimanCoder
11

możesz użyć mp3cut:

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

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

Michał Šrajer
źródło
6

Możesz spróbować Mp3Splt .

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

Ryan Duffield
źródło
2
Używany MP3Split z powodzeniem do cięcia mp3
Freshblood
0

Mam błąd, robiąc to samo

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

Naprawiono dla mnie:

ffmpeg -ss 00:02:43.00 -t 00:00:10 -i input.mp3 -codec:a libmp3lame out.mp3
Mithun Cheriyath
źródło
0

medipack to bardzo prosta aplikacja wiersza poleceń, która jest opakowaniem ffmpeg.

możesz przyciąć wideo za pomocą tych poleceń:

medipack trim input.mp3 -s 00:00 -e 00:30 -o output.mp3
medipack trim input.mp3 -s 00:00 -t 00:30 -o output.mp3

możesz przeglądać opcje podkomendy trim jako:

srb@srb-pc:$ medipack trim -h
usage: medipack trim [-h] [-s START] [-e END | -t TIME] [-o OUTPUT] [inp]

positional arguments:
  inp                   input video file ex: input.mp4

optional arguments:
  -h, --help            show this help message and exit
  -s START, --start START
                        start time for cuting in format hh:mm:ss or mm:ss
  -e END, --end END     end time for cuting in format hh:mm:ss or mm:ss
  -t TIME, --time TIME  clip duration in format hh:mm:ss or mm:ss
  -o OUTPUT, --output OUTPUT

możesz również zbadać inne opcje za pomocą medipack -h

srb@srb-pc:$ medipack --help
usage: medipack.py [-h] [-v] {trim,crop,resize,extract} ...

positional arguments:
  {trim,crop,resize,extract}

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         Display version number

możesz odwiedzić https://github.com/srbcheema1/medipack i przykłady realizacji transakcji w README.

srbcheema1
źródło
1
Jaka jest zaleta tego opakowania? Ponieważ nie wydaje się to prostsze niżffmpeg -i input -ss <start time> -to <end time> output
llogan
Dodałem również opcję, -tktórej można używać alternatywnie, -eco oznacza, że ​​przypuszczam, że mam przyciąć następne 4 min 36 s wideo, nie muszę się martwić dodawaniem tych czasów ręcznie, również zapewniłem podobną łatwość podczas przycinania filmów, zobacz przykłady w README dowiesz się, dlaczego jego CLI jest łatwiejsze niż zwykłe ffmpeg. Zgadzam się, że nie jest to tak potężne, ale dla normalnego człowieka jego poręczne narzędzie.
srbcheema1
2
ffmpegma -toopcję, którą -tprawdopodobnie robi.
llogan
co z opcją upraw% wieku wymienioną w README pod opcją upraw, czy jest ona również dostępna? Właśnie stworzyłem to narzędzie na żądanie przez kogoś, kto zapłacił mi kilka dolarów, ponieważ nie chcą się martwić o dużą listę opcji CLI, po prostu chcieli narzędzia, które z łatwością wykonałoby określone zadania, nawet jeśli są wszystkie opcje w ffmpeg, ale nadal byłoby trudno noobowi znaleźć je wszystkie w sekcji pomocy dotyczącej wiersza poleceń. to narzędzie ma prostą sekcję pomocy łatwą do zrozumienia dla
noobów
Jasne,-vf "crop=iw*0.1:ih*0.1:0:0"
llogan