2017-07-10 4 views
0

Ich habe versucht, FFMPEG zu verwenden, um einen bestimmten Teil einer Tonspur auszuschneiden. Ich wollte von 0.07 bis 4.33 Uhr schneiden, so dass ich Eingabe der ffmpeg-Befehl wie folgt:FFMPEG -ss und -t zum Schneiden mp3

bin\ffmpeg -ss 00:07 -t 04:26 -i "input.mp3" -acodec copy "output.mp3" 

I 4.26 für -t verwendet, die [end_time - START_TIME] ist. Allerdings wurde die output.mp3, die ich bekam, von 00:07 auf 04:40 geschnitten, und die Spur war 04:33 lang. Um die korrekte Ausgabedatei zu erhalten, musste ich -t 04:19 verwenden, was [end_time - 2 * (start_time)] ist.

timeline of desired mp3 track

habe ich versucht, einen alternativen Befehls -bis anstelle von -t

bin\ffmpeg -i "input.mp3" -ss 00:07 -to 04:33 -acodec copy -y "output.mp3" 

und das wie erwartet funktioniert, um die gewünschte Ausgangsspur von 0.07 bis 4.33 ergibt.

Die Frage ist, warum erfordert die erste Methode -t zu sein [end_time - 2 * (start_time)]? intuitiv möchte ich 00:07 suchen und dann die nachfolgenden 04:26 einfangen, also -ss 00:07 und -t 04:26 macht für mich Sinn. Ich kann nicht herausfinden, wie ffmpeg das so interpretiert, dass ich stattdessen 04:19 als -t verwenden muss.

Da die zweite Methode funktioniert, suche ich nicht wirklich nach einer Lösung. Ich frage mich nur, warum das passiert.

Antwort

1

Wenn und -t vor dem Eingang platziert werden, verwendet ffmpeg die Schnellsuche, die auf dem Index der Eingabe basiert, damit ffmpeg starten und stoppen kann. MP3s haben keine Indizes, daher schätzt ffmpeg die Dauer über die Bitrate. Dies kann ungenau sein.

Wenn und -t nach der Eingabe platziert werden, zählt ffmpeg die demuxierten Pakete. Das wird genau sein.

+0

danke, jetzt verstehe ich. – cobaltB12

Verwandte Themen