Ich frage mich, wie man mit FFMpeg den mittleren Frame eines Videos erfassen kann. Ich habe bereits die C # geschrieben, um einen Frame zu einer bestimmten Zeit zu greifen (z. B. einen Frame bei Sekunde 3 zu ziehen). Aber ich muss noch herausfinden, wie man die Mitte des Videos mit den FFMpeg-Befehlen findet.
Das könnte vereinfacht werden, aber hier ist ein alter PHP-Code, den ich herumliegen hatte, der den Trick machen sollte. (Fügen Sie den Ort zu ffmpeg hinzu, wenn er nicht in Ihrem Pfad ist)
%Vor%FFmpeg hilft Ihnen, die Framerate und die Länge des Videos zu erhalten, also können Sie eins multiplizieren und durch 2 teilen, um die Nummer des mittleren Rahmens zu erhalten.
zB für ein 30 Sekunden langes Video, das mit 15 Bildern pro Sekunde läuft: 30 * 15 = 450/2 = 225, was bedeutet, dass Sie den 225. Rahmen aufnehmen müssen.
Angenommen, Sie verwenden Linux, können Sie ffprobe
verwenden, um Dauer zu erhalten, bc
, um einen halben Punkt zu berechnen, und ffmpeg
, um den Rahmen zu erstellen:
Dies macht es überflüssig, awk
, tr
, grep
, sed
usw. zu verwenden.
Alternativ können Sie den Filter auswählen und bc
entfernen, aber der Auswahlfilter kann sei langsam.
Die Dauer von ffprobe
könnte falsch sein, wenn die Datei beschädigt oder nicht ordnungsgemäß abgeschnitten wurde. Die Dauer kann durch vollständiges Dekodieren der Eingabe mit ffmpeg
und anschließendes Notieren der time=
in der vorletzten Zeile in der Konsolenausgabe bestätigt werden:
Dieser Bash-Befehl funktioniert wie ein Charm (getestet):
%Vor%