Beschneiden Sie MP3 auf die ersten 30 Sekunden

103

Ursprüngliche Frage

Ich möchte in der Lage sein, eine neue (vollständig gültige) MP3-Datei aus einer vorhandenen MP3-Datei zu generieren, die als Vorschau verwendet werden soll - versuchen Sie es vor dem Kauf. Die neue Datei sollte nur die ersten n Sekunden des Tracks enthalten.

Jetzt weiß ich, dass ich bei der Übermittlung der Datei den Stream in n Sekunden (berechnet aus Bitrate und Header-Größe) "zerhacken" könnte , aber das ist ein bisschen schmutzig und eine echte PITA auf einer VBR-Spur. Ich möchte in der Lage sein, eine richtige MP3-Datei zu generieren.

Hat jemand irgendwelche Ideen?

Antworten

Beides mp3splitund ffmpegbeides sind gute Lösungen. Ich habe mich für ffmpeg entschieden, da es üblicherweise auf Linux-Servern installiert ist und auch für Windows leicht verfügbar ist . Hier sind einige weitere gute Befehlszeilenparameter zum Generieren von Vorschauen mit ffmpeg

  • -t <seconds> nach der angegebenen Anzahl von Sekunden hacken
  • -y Datei überschreiben erzwingen
  • -ab <bitrate>Bitrate einstellen zB -ab 96k
  • -ar <rate Hz>Stellen Sie die Abtastrate ein, z. B. -ar 22050 für 22,05 kHz
  • -map_meta_data <outfile>:<infile> Kopieren Sie Track-Metadaten von Infile nach Outfile

Anstatt -ab und -ar zu setzen, können Sie die ursprünglichen Spureinstellungen kopieren, wie Tim Farley vorschlägt, mit:

  • -acodec copy
Cheekysoft
quelle
Ich habe es nicht für diesen speziellen Zweck verwendet, aber ich wette, ffmpeg kann es tun.
Grapefrukt
Nur ein Gedanke: Vielleicht möchten Sie den Anfang des ursprünglichen Songs überspringen. Angenommen, Sie können ab dem dritten Teil des Songs ein 30-Sekunden-Stück verwenden . In einigen Songs, hat die ersten 30 Sekunden werden Sie nicht viel sagen , da es nur eine ist „die Szene einrichten“ Teil - zum Beispiel Pink Floyd ‚s Shine On Sie Crazy Diamond .
Tomas Sedovic
Ich hatte eine wirklich schlechte Zeit mit ffmpeg, mptsplit und mp3cutter unter CentOS, die alle "Header Missing" meldeten. Also musste ich mit MP3-Klasse und etwas Mathe gehen, um nach Dateigröße zu schneiden.
Gardner
Ich wusste nicht, dass ffmpeg das kann. Danke dir.
Sridhar Sarnobat

Antworten:

142

Ich empfehle auch ffmpeg, aber die von John Boker vorgeschlagene Befehlszeile hat einen unbeabsichtigten Nebeneffekt: Sie codiert die Datei auf die Standardbitrate neu (die in der Version, die ich hier mindestens habe, 64 kb / s beträgt). Dies kann Ihren Kunden einen falschen Eindruck von der Qualität Ihrer Sounddateien vermitteln und dauert auch länger.

Hier ist eine Befehlszeile, die ohne Transcodierung auf 30 Sekunden aufgeteilt wird:

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

Der Schalter -acodec weist ffmpeg an, den speziellen "Kopier" -Codec zu verwenden, der nicht transkodiert. Es ist blitzschnell.

HINWEIS: Der Befehl wurde basierend auf dem Kommentar von Oben Sonne aktualisiert

Tim Farley
quelle
21
Neuere ffmpegVersionen (mindestens seit 0.10.6) interpretieren Optionen je nach Position unterschiedlich. Eingabebezogene Optionen müssen vor -i ...und ausgabebezogene Optionen müssen nach angezeigt werden -i .... Dieses Mittel ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3wäre jetzt die richtige Antwort sein.
Oben Sonne
Kann ich 30-Sekunden-Audio aus einer 15-Sekunden-Eingabedatei extrahieren? Wenn die Datei reift, dann 30 Sekunden, dann 30 Sekunden, aber wenn die Datei 15 Sekunden, dann wiederholen und 30 Sekunden vollständig extrahieren.
Girish Patidar
6
Wenn Sie die Startzeit (Offset) einstellen möchten, können Sie verwenden -ss hh:mm:ss[.xxx]. Beispiel: ffmpeg -t 30 -ss 00:00:15.500 -i inputfile.mp3 -acodec copy outputfile.mp3wird ab 00h 00m 15s 500ms auf 30 Sekunden geschnitten .
patryk.beza
1
Aus irgendeinem Grund hat der obige Befehl bei mir nicht funktioniert, aber wenn ich ihn geändert habe in: ffmpeg -i inputfile.mp3 -t 30 -acodec copy outputfile.mp3dann funktioniert er perfekt
Krishnendu
Für mich müssen die Optionen -t und -s in 2 Befehlen separat verwendet werden. Aber es funktioniert, danke!
Yan King Yin
57

Wenn Sie die ersten 30 Sekunden ENTFERNEN möchten (und den Rest behalten möchten), verwenden Sie Folgendes:

ffmpeg -ss 30 -i inputfile.mp3 -acodec copy outputfile.mp3
the.jxc
quelle
18

Versuchen:

ffmpeg -t 30 -i inputfile.mp3 outputfile.mp3
John Boker
quelle
12

Dieser Befehl funktioniert auch einwandfrei. Ich habe meine Musikdateien von 20 auf 40 Sekunden zugeschnitten.

-y: Erzwingt das Überschreiben der Ausgabedatei.

ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3
Rahul Chauhan
quelle
1
Perfekt! Vielen Dank für das Teilen.
HerrimanCoder
11

Sie können mp3cut verwenden:

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

Es ist in Ubuntu Repo, also nur : sudo apt-get install cutmp3.

Michał Šrajer
quelle
6

Vielleicht möchten Sie Mp3Splt ausprobieren .

Ich habe es zuvor in einem C # -Dienst verwendet, der einfach den win3-Prozess mp3splt.exe umschlossen hat. Ich gehe davon aus, dass in Ihrem Linux / PHP-Szenario etwas Ähnliches getan werden könnte.

Ryan Duffield
quelle
2
Verwendet MP3Split mit Erfolg für MP3-Schnitt
Freshblood
0

Ich habe dabei einen Fehler erhalten

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 für mich war:

ffmpeg -ss 00:02:43.00 -t 00:00:10 -i input.mp3 -codec:a libmp3lame out.mp3
Mithun Cheriyath
quelle
0

medipack ist eine sehr einfache Befehlszeilen-App als Wrapper ffmpeg.

Mit den folgenden Befehlen können Sie Ihr Video zuschneiden:

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

Sie können die Optionen des Unterbefehls "Trimmen" wie folgt anzeigen:

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

Sie können auch andere Optionen mit erkunden 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

Sie können https://github.com/srbcheema1/medipack besuchen und Beispiele in README auschecken.

srbcheema1
quelle
1
Was ist der Vorteil dieses Wrappers? Weil es nicht einfacher zu sein scheint alsffmpeg -i input -ss <start time> -to <end time> output
llogan
Ich habe auch eine Option hinzugefügt -t, die alternativ verwendet werden kann, -ewas bedeutet, dass ich das nächste 4-minütige 36-sekündige Video zuschneiden soll. Ich muss mir keine Sorgen machen, diese Zeiten manuell hinzuzufügen. Außerdem habe ich beim Zuschneiden der Videos eine ähnliche Leichtigkeit bereitgestellt, siehe Beispiele In README erfahren Sie, warum die CLI einfacher ist als das einfache ffmpeg. Ich bin damit einverstanden, dass es nicht so mächtig ist, aber für normale Menschen sein handliches Werkzeug.
srbcheema1
2
ffmpeghat die -toOption, was Ihr -twahrscheinlich tut.
Llogan
Was ist mit der in README unter Crop Suboption genannten Option für das prozentuale Erntegut? Ist das auch verfügbar? Ich habe dieses Tool gerade auf Anfrage von jemandem erstellt, der mir ein paar Dollar bezahlt hat, da er sich keine Sorgen um die große Liste der CLI-Optionen machen möchte. Er wollte nur ein Tool, das bestimmte Aufgaben problemlos ausführen kann, selbst wenn alle Optionen in ffmpeg vorhanden sind. Trotzdem wäre es für Noob schwierig, alle in der Befehlszeile zu finden. Dieses Tool hat einen einfachen
Hilfeabschnitt, den ein Neuling
Sicher,-vf "crop=iw*0.1:ih*0.1:0:0"
llogan