81 Stimmen

Wie schneidet man eine mp3 von x auf x+n mit ffmpeg zu?

Unter diese Frage Ich beschloss, ffmpeg zum Beschneiden von MP3s zu verwenden. Auf weitere Frage Ich habe diesen Weg gefunden, es zu tun:

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

Das Problem ist, dass ich nicht die ersten 30 Sekunden beschneiden möchte, sondern von x bis x+n, also von 30s bis 100s. Wie würde ich gehen und dies tun?

Ich lese gerade die man für ffmpeg aber das ist nicht wirklich einfach, zumal ich gerade erst ffmpeg entdeckt habe und mich mit Audio-/Videobearbeitungsprogrammen nicht auskenne, daher wäre ich für jeden Hinweis dankbar.

123voto

Michael Madsen Punkte 52883

Schauen Sie sich die Argumente -t und -ss an. Sie sollten das tun, was Sie wollen.

-t Dauer

Einschränkung des transkodierten/aufgenommenen Videos Sequenz auf die Dauer, die in Sekunden. Die Syntax hh:mm:ss[.xxx] wird ebenfalls unterstützt.

-ss-Stellung'

Suche nach der angegebenen Zeitposition in Sekunden. Die Syntax hh:mm:ss[.xxx] wird ebenfalls unterstützt.

Zum Beispiel, ffmpeg -ss 30 -t 70 -i inputfile.mp3 -acodec copy outputfile.mp3 sollte für den von Ihnen genannten Bereich (30s-100s) ausreichen.

25voto

Pau Coma Ramirez Punkte 3311

Um die Antwort von Michael Madsens ein wenig zu ergänzen:

Ich habe eine der folgenden Methoden zum Trimmen meiner Audiodateien für zufriedenstellend befunden:

  • ffmpeg -ss <Startposition> -t <Laufzeit> -i inputfile -c:a copy outputfile
  • ffmpeg -ss <Startposition> -i inputfile -t <Laufzeit> -c:a copy outputfile

Anmerkung: -acodec ist ein Alias für codec:a die auch als c:a

Wie in der Hauptoptionen FFMPEG-Dokumentation

-t duration (input/output)

  • Bei Verwendung als Eingabeoption (vor -i) wird die Dauer der aus der Eingabedatei gelesenen Daten begrenzt.
  • Bei Verwendung als Ausgabeoption (vor einer Ausgabe-URL) wird das Schreiben der Ausgabe gestoppt, wenn ihre Dauer duration erreicht.

-ss position (input/output)

  • Wenn es als Eingabeoption (vor -i) verwendet wird, sucht es in dieser Eingabedatei nach der Position.
  • Bei Verwendung als Ausgabeoption (vor einer Ausgabe-URL) wird die Eingabe dekodiert, aber verworfen, bis die Zeitstempel die Position erreichen.

duration y position folgen Sie den Zeit Dauer Syntax :

  • [-][HH:]MM:SS[.m...] o [-]S+[.m...][s|ms|us]

Nebenbemerkung: Eine Antwort auf Wie man mit FFMPEG Pausen erkennt kann ebenfalls von Interesse sein.


Unterschiede zwischen Suche und Dauer als Input oder Output

Beachten Sie, dass es bei den meisten Formaten nicht möglich ist, exakt zu suchen, so dass ffmpeg den nächstgelegenen Suchpunkt vor der Position ansteuert. Wenn Transkodierung und -accurate_seek aktiviert ist (die Voreinstellung), wird dieses zusätzliche Segment zwischen dem Suchpunkt und der Position dekodiert und verworfen. Beim Kopieren von Streams oder wenn -noaccurate_seek verwendet wird, bleibt es erhalten.

Ich habe ein paar Tests mit der folgenden Datei durchgeführt:

Input #0, mp3, from 'test16s.mp3':
  Duration: 00:00:16.20, start: 0.025057, bitrate: 128 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/s

Ich habe die Ausgänge in Audacity im Vergleich zum Original abgeglichen und folgendes erhalten:

  • ffmpeg -ss 3 -t 5 -i test16s.mp3 -c:a copy out.mp3
    • Start: 3s+00756Proben (3.017142857s)
    • Ende: 8s+02062Samples (8.04675737s)
    • Dauer: 5s+01306Samples (5.029614512s)
  • ffmpeg -ss 3 -i test16s.mp3 -t 5 -c:a copy out.mp3
    • Start: 3s+00756Proben (3.017142857s)
    • Ende: 8s+00910Samples (8.020634921s)
    • Dauer: 5s+00154Samples (5.003492063s)
  • ffmpeg -i test16s.mp3 -ss 3 -t 5 -c:a copy out.mp3
    • Warnung : Dadurch wurde eine Datei erzeugt, bei der einige mp3-Decoder beim Versuch, sie zu öffnen, eine Fehlermeldung ausgaben.
    • Start: 2s+42184Samples (2,956553288s)
    • Ende: 8s+01071Samples (8.024285714s)
    • Dauer: 5s+02987Samples (5.067732426s)
  • ffmpeg -t 5 -i test16s.mp3 -ss 3 -c:a copy out.mp3
    • Warnung : Dadurch wurde eine Datei erzeugt, bei der einige mp3-Decoder beim Versuch, sie zu öffnen, eine Fehlermeldung ausgaben.
    • Start: 2s+42184Samples (2,956553288s)
    • Ende: 5s+02043Samples (5.046326531s)
    • Dauer : 2s+03959Samples (2.089773243)

Bei einem Versuch, den Suchsprung zu sehen, fand ich interessante Ergebnisse unter Verwendung von :

  • ffmpeg -ss <sek> -i test16s.mp3 -t 5 -c:a copy out.mp3

    • <Sek> = 3, 2.99, 2.98, 2.97
      • Start: 3s+00756Samples (3.017142857s), Dauer:5s+00154
    • <Sekunden> = 2,96
      • Start: wie oben, Dauer: 4s+41951
    • <Sekunden> = 2,95
      • Start: 2s+43704 (2.991020408), Ende:7s+42707 Dauer:4s+43103
    • <Sek> = 2.94,2.93
      • Start: wie oben, Dauer: 4s+41951
    • <Sekunden> = 2,92
      • Start: 2s+42552 (2.964897959s), Dauer: 4s+43103
  • ffmpeg -ss <sek> -t 5 -i test16s.mp3 -c:a copy out.mp3

    • <Sekunden> = 3
      • Start: 3s+00756 (3.017142857s), Dauer: 5s+01306 (5.029614512s)
    • <Sek> = 2.99, 2.98, 2.97
      • Start: gleich, Dauer: 5s+00155
    • <Sekunden> = 2,96
      • Start: gleich, Dauer: 4s+43103
    • <Sekunden> = 2,95
      • Start: 2s+43704 (2.991020408), Ende:7s+43859 Dauer:5s+00155
    • <Sek> = 2.94,2.93
      • Start: gleich, Dauer: 4s+43103
    • <Sekunden> = 2,92
      • Start: 2s+42552 (2.964897959s), Dauer: 5s+00155

Dies wird mit einem Stream-Kopie Es scheint so, als ob die minimale Suchauflösung in meiner spezifischen Datei, (Audio: mp3, 44100 Hz, Stereo, fltp, 128 kb/s) war:

  • Suchen Sie Schritt von : 1152 Proben, 26,122449 ms
  • Suchlaufposition Fehler von bis zu 70 ms

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X