Wie schneide ich Audiodateien mit avconv?

7

Es fällt mir schwer herauszufinden, wie man eine Datei schneidet avconv. Hier ist der Befehl, den ich benutze:

avconv -ss 52:13:49 -t 01:13:52 -i RR119Accessibility.wav RR119Accessibility-2.wav 

Aber es funktioniert nicht. Als Ergebnis erhalte ich die gesamte Datei. Nun, fast die ganze Datei. Irgendwie hat die resultierende Datei Dauer 1:16:31statt 1:17:23. Ich glaube auch, dass ich diesen Befehl auf jede mögliche Weise ausgeführt habe: mit -ssund -tnach -i, mit -tAngabe des Endpunkts, mit MP3-Dateien, mit Angabe des Audio-Codecs, mit ffmpeg. Mache ich es falsch

UPD Dank bodhi.zazendieser Arbeit (ich habe den Offset und die Dauer korrigiert, die von gemeldet wurden mp3splt-gtk, sie waren aus irgendeinem Grund falsch und das Ziel war es, MP3-Dateien zu schneiden)

avconv -i RR119Accessibility.mp3 -ss 00:52:08 -t 00:01:08 RR119Accessibility-2.mp3

Das geht aber nicht:

avconv -ss 00:52:08 -t 00:01:08 -i RR119Accessibility.mp3 RR119Accessibility-2.mp3

Die resultierende Datei beginnt um 00:52:08 Uhr und reicht bis zum Ende der Originaldatei. Ich dachte -ssund -tbeziehe mich auf die Eingabedatei, wenn vorher angegeben -i. Und um die Datei anders auszugeben. Könnte jemand das erklären?

x-yuri
quelle
1
Das Zeitformat ist HH: MM: SS. Ist die Datei wirklich mehr als 50 Stunden lang? persönlich benutze ich ffmpeg
Panther
Oh, du hast Recht. Ich erinnere mich, dass ich darüber nachgedacht habe, aber irgendwie habe ich beschlossen, dass ich mich nicht irre.
X-Yuri
Also funktioniert es jetzt?
Panther
Grundsätzlich ja. Aber eines verstehe ich nicht. Ich habe die Frage aktualisiert. Aber trotzdem können Sie Ihren Kommentar in eine Antwort verwandeln und ich werde ihn akzeptieren. Und ich , avconvweil ubuntu‚s ffmpegsagt , dass es veraltet ist.
X-Yuri

Antworten:

8

Ich denke, das ursprüngliche Problem war die Formatierung Ihres Zeitstempels.

Das Format ist HH: MM: SS

Ich bin nicht sicher, ob ich Ihre Frage zur Reihenfolge der Optionen verstehe. Ich denke nicht, dass es wichtig ist, solange auf -i der Name der Eingabedatei folgt und -ss HH: MM: SS auf -t HH: MM: SS folgt

Das -ss HH: MM: SS ist der Startpunkt und -t HH: MM: SS ist die Dauer

Also würde -ss 00:01:00 -t 00:05:00 bei der 1-Minuten-Marke beginnen und 5 Minuten lang laufen.

Auf meinem System spielt bei ffmpeg die Reihenfolge keine Rolle (Sie können die Zeit oder die Eingabedatei in beliebiger Reihenfolge angeben, solange auf -ss die Dauer (-t) folgt.)

Panther
quelle
1
Nun, aus 4 Varianten ( ffmpeg -i -ss -t, ffmpeg -ss -t -i, avconv -i -ss -t, avconv -ss -t -i), nur die letzten nicht funktioniert wie erwartet. Das heißt, anstatt [Offset: Offset + angegebene Dauer] zu erhalten, erhalte ich [Offset: Originaldauer] (wenn dies die Sache klarstellt). Wenn Sie irgendwelche Ideen haben, bin ich ganz Ohr :)
x-yuri
Und so funktioniert es:avconv -ss ... -i ... -t ... ...
x-yuri
3
Erwägen Sie, -acodec copyeine Stream-Kopie hinzuzufügen , anstatt sie neu zu codieren. Dies vermeidet eine Neucodierung und vermeidet daher das Potenzial eines Qualitätsverlusts. Die Platzierung von-ss kann das Verhalten dieser Option ändern (abhängig von mehreren Faktoren). -tist eine Ausgabeoption, daher sollte die Platzierung keine Rolle spielen, solange sie als Ausgabeoption (nachher -i) verwendet wird. Es gibt auch die -toOption. (Keiner meiner Kommentare gilt möglicherweise für libavs Junk).
Llogan
2

Das Problem ergibt sich aus der unterschiedlichen Bedeutung der -ssAbhängigkeit von der Position in der Befehlszeile. Es ist eine Übertragung aus den Tagen, als avconves noch Teil des ffmpegProjekts war, und ich glaube, dass es in den neueren Versionen behoben wird.

In den alten Tagen, wenn Sie so etwas sagten

 ffmpeg -ss 5 -i input

Was Sie meinten, war "Springen Sie zur 5-Sekunden-Marke in der Datei und beginnen Sie dort zu lesen".

Aber wenn du gesagt hast

ffmpeg -i input -ss 5

Sie meinten "Öffnen Sie die Eingabedatei und überspringen Sie alle Daten bis zur Fünf-Sekunden-Marke".

Wie Sie verstehen können, schlägt der erste Ansatz tatsächlich ziemlich oft fehl, da Sie die Datei überspringen, ohne sie zu lesen. Es funktioniert nur bei Dateien mit Zeitstempeln, sodass Sie den Frame lesen und feststellen können, ob Sie bereits zu weit gegangen sind oder nicht.

Grundsätzlich funktionierte es in ffmpeg wie folgt: "Errate die Bitrate in der ersten Sekunde und gehe dann davon aus, dass alle anderen Sekunden gleich sind." Aber natürlich sind nicht alle Sekunden gleich, und wenn es sich um eine 52-stündige "Drift" handelt, kann der Fehler ziemlich groß sein.

Wenn Sie also die frühe Post-Split-Version von avconv verwenden, sollten Sie immer -ssnach der gelesenen Datei setzen . Aber in den neueren Versionen (nach meinem besten Wissen) wurde dieser Fehler behoben.

v010dya
quelle
Dies scheint ein anderes Problem zu sein. Beide Varianten beginnen mit dem richtigen Versatz, es ist die Dauer, die in der ersten Variante falsch ist.
X-Yuri
0

Versuchen:

avconv -i RR119Accessibility.wav -ss 52:13:49 -t 01:13:52 RR119Accessibility-2.wav

Die Optionen von ffmpeg und avconv sind positionsabhängig.

In Ihrem Beispiel beginnt ffmpeg mit dem Lesen der Datei und der Ausgabe von timestamp -ss
(was ffmpeg auf meinem System gut macht und avconv nicht, nennen wir es eine Art Regression).

In dem Beispiel, das ich hier gegeben habe, sucht avconv (oder auch ffmpeg) zuerst den richtigen Versatz und beginnt dann mit dem Lesen und Ausgeben. Dies funktioniert für beide.

Weitere Dokumentation zu avconv finden Sie unter http://libav.org. Diese Jungs haben ffmpeg abgeschaltet und sind auch für die extrem alte ffmpeg-Version in Ubuntu verantwortlich.

Das REAL ffmpeg befindet sich nicht in den Ubuntu-Repositories, sondern in einem PPA:
ppa: jon-Severinsson / ffmpeg
Weitere Dokumentation zu ffmpeg finden Sie unter http://ffmpeg.org

Betrachten Sie die Manpages als veraltet

thom
quelle
Ich denke nicht, dass ffmpeg abgeschrieben wird. Sofern Sie nicht speziell eine aktualisierte Version von ffmpeg benötigen, sollten Sie wahrscheinlich bei der Version in den Repos bleiben.
Panther
Aber das ist, was es sagt: "*** DIESES PROGRAMM IST VERRINGERT *** Dieses Programm wird nur aus Kompatibilitätsgründen bereitgestellt und wird in einer zukünftigen Version entfernt. Bitte verwenden Sie stattdessen avconv." Aber ja, wenn ich keinen besonderen Bedarf habe, kann ich wahrscheinlich die Version in den Repos verwenden.
X-Yuri
1
Es scheint libav, ffmpegdass es veraltet ist. Für Details, siehe diese Fragen
x-yuri
Ja x-yuri, das ist richtig. Das aktuelle ffmpeg (von ffmpeg) ist viele Versionen neuer als das alte (beraubte) Schwein, das von libav geliefert wird. Schade , dass sie nicht koexistieren in der Repo
thom