Frage

Ursprüngliche Frage

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

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

Hat jemand eine Idee?

Antworten

Beide mp3split Und ffmpeg sind beides gute Lösungen.Ich habe mich für ffmpeg entschieden, da es häufig auf Linux-Servern installiert wird und dies auch der Fall ist leicht verfügbar für Fenster.Hier sind einige weitere gute Befehlszeilenparameter zum Generieren von Vorschauen mit ffmpeg

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

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

  • -acodec copy
War es hilfreich?

Lösung

Ich empfehle auch ffmpeg, aber die von John Boker vorgeschlagene Befehlszeile hat einen unbeabsichtigten Nebeneffekt:Es kodiert die Datei auf die Standardbitrate neu (die in der Version, die ich hier habe, zumindest 64 kb/s beträgt).Dies könnte Ihren Kunden einen falschen Eindruck von der Qualität Ihrer Sounddateien vermitteln und es dauert außerdem länger.

Hier ist eine Befehlszeile, die ohne Transkodierung auf 30 Sekunden reduziert wird:

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

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

NOTIZ:Der Befehl wurde basierend auf einem Kommentar von Oben Sonne aktualisiert

Andere Tipps

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

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

versuchen:

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

Sie können mp3cut verwenden:

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

Es ist im Ubuntu-Repo, also einfach: sudo apt-get install cutmp3.

Auch dieser Befehl funktioniert einwandfrei.Ich habe meine Musikdateien von 20 auf 40 Sekunden gekürzt.

-y:Überschreiben der Ausgabedatei erzwingen.

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

Vielleicht möchten Sie es versuchen Mp3Splt.

Ich habe es bereits zuvor in einem C#-Dienst verwendet, der einfach den Win32-Prozess mp3splt.exe umschließt.Ich gehe davon aus, dass in Ihrem Linux/PHP-Szenario etwas Ähnliches durchgeführt werden könnte.

Ich habe es nicht für diesen speziellen Zweck verwendet, aber ich wette ffmpeg kann es tun.

Ich habe einen Fehler erhalten, als ich das Gleiche tat

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top