Wie kann ich in Xubuntu 16.04 ein Bild aus einer bestimmten Zeit eines Videos extrahieren?


8

Ich suche nach einer Befehlszeilenoption.

Wenn ich beispielsweise das Video habe sample-video.mp4und sample-image.jpgum 00:00:26 Uhr eine Bilddatei aus dem Video generieren möchte, welchen Befehl soll ich geben?

Es wäre auch sehr hilfreich, wenn Sie detailliert erklären könnten, welche Funktion jedes Argument des Befehls hat.


2
Nach dieser Frage und ihren Antworten ffmpegscheinen Dateinamen für die Ausgabe zu unterstützen.
— IQV

Antworten:


8

Sie können Folgendes verwenden mplayer(aus dem Paket mplayer, nicht standardmäßig installiert):

mplayer -vo jpeg -ss 00:00:26 -frames 1 sample-video.mp4

Dadurch wird die Datei erstellt, 00000001.jpgsodass Sie sie umbenennen müssen. Soweit ich weiß, gibt es keine Möglichkeit, einen Dateinamen anzugeben.

-vo jpegbedeutet, dass Sie eine JPEG-Ausgabe wünschen, -ss 00:00:26an die angegebene Position -frames 1suchen, einen Frame verarbeiten und dann beenden möchten .


Was ist der Vorteil von mehr als 1 Frames? Werden das Kopien sein oder wird sich jeder Frame um eine Sekunde unterscheiden?
— Sonevol

Bilder, die aus mehr Frames erstellt wurden, unterscheiden sich in Sekundenbruchteilen. Der genaue Wert hängt vom Video ab.
— Florian Diesch

5
@Sonevol Der Frame genau um 0:00:26 ist möglicherweise nicht genau das , was Sie wollen. Möglicherweise möchten Sie die ~ 50 Frames zwischen 0:00:25 und 0:00:27 (oder sogar nur 3-4 Frames um die 0:00:26-Marke) aufnehmen und sie dann durchsuchen, um die beste auszuwählen.
— xDaizu

1
@FlorianDiesch Kann auch mit folgenden Elementen auf PNG ausgegeben werden: -vo png:z=9Die Einstellung -z gibt die Komprimierungsstufe an. Für JPEG können Sie auch eine Qualitätseinstellung hinzufügen : -vo jpeg:quality=100. Aber Ihre Antwort ist großartig, wie es bereits ist :)
— andrew.46

13

Sie können ffmpeg verwenden

ffmpeg -loglevel quiet -ss 26 -i sample-video.mp4  -t 1 -f image2 anyfilename.jpeg
  • -loglevel setzt die Logout-Ausgabe auf leise, da ffmpeg sehr gesprächig ist
  • -ss ist Suchen (in Sekunden, dh wo Sie den Schnappschuss machen möchten)
  • -i Eingabevideodatei
  • -t Zeitrahmen des Schnappschusses (in Sekunden)
  • -f Dateityp

Sie können auch mit den Optionen herumspielen, z. B. der Steuerungsqualität der JPEG-Ausgabe -q:v <linear integer 1-10>oder der Auflösung -s 480x300.

Noch ein paar Ideen hier


VLC-Methode

cvlc sample-video.mp4 --start-time=26 --run-time=1 --rate=1 --video-filter=scene --vout=dummy --aout=dummy  --scene-ratio=24 --scene-prefix=sample-image --scene-replace vlc://quit
  • cvlc - weil seine Kommandozeile und wir nicht wollen, dass sich Fenster öffnen. Dies bedeutet auch, dass wir es ohne X11 ausführen können.

  • --start-time = 26 - ist die genaue Position des Schnappschusses in Sekunden

  • --run-time = 1 - wie lange das Video in Sekunden " abgespielt " wird. Wir spielen es eine Sekunde lang, um einen Screenshot dieser Sekunde zu machen
  • --rate = 1 wann der Screenshot aufgenommen werden soll. Dies bedeutet im Grunde "jede Sekunde" und ist nützlich, wenn Sie längere Dateien haben, alle 60 Sekunden oder alle 5 Minuten einen Screenshot zu machen
  • --video-filter = scene teilt VLC mit, dass wir Screenshots machen möchten
  • --vout = Dummy Keine Ausgabe für Video auf X11, wir brauchen es nicht
  • --aout = Dummy keine Ausgabe für Audio, wir brauchen es nicht
  • --scene-ratio = 24 Wir teilen VLC mit, dass es ungefähr 24 Bilder pro Sekunde gibt
  • --scene-prefix = Beispielbild der Dateiname Ihres Screenshots
  • --scene-replace Ersetzen Sie alle Dateien, die wie Ihr Screenshot aufgerufen werden, sample-image.pngdurch Ihren aktuellen Screenshot. Wenn Sie dies weglassen, beginnt VLC mit der Nummerierung der Screenshots
  • vlc: // beende vlc zu beenden , sobald wir fertig sind

Vollständige Dokumentation hier


Was meinst du mit gesprächig? Und ich möchte einen Schnappschuss in der 26. Sekunde. Warum also den Zeitrahmen mit -t angeben? Ich mache ein Bild, kein Video.
— Sonevol

3
"Chatty", weil ffmpeg mit diesem Befehl über 40 Zeilen Protokollausgabe druckt, wie die aktuelle Version, den Setup-Typ und Informationen zur Eingabe-Videodatei - was für Sie uninteressant ist. Für Ihren Zweck können Sie wahrscheinlich "-t 1" weglassen. Die Standardeinstellung scheint eine Sekunde oder ein Bruchteil davon zu sein, was für den Screenshot in Ordnung ist. Der schöne Unterschied ist die Möglichkeit, den Ausgabedateinamen zu definieren und Qualität / Auflösung usw. zu optimieren
— Robert Riedl
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.