Linux: Wie extrahiere ich Frames aus einem Video? (verlustfrei)

Ich habe ein paar Antworten und Artikel über die Verwendung von Programmen wie gelesen VLC, MPlayer, ffmpeg, etc., aber keine der Methoden, die ich gesehen habe, ist " verlustfrei."Sie erfassen nicht jeden einzelnen Frame. Ich möchte jeden Frame aus einem Video als Bild extrahieren (100% Qualität, ich möchte keine Details verlieren), damit man theoretisch diese Bilder aufnehmen und die Videodatei neu erstellen kann, ohne den Unterschied zum Original erkennen zu können (natürlich ohne das Fehlen von Audio).

- Bonus punkte, wenn ich eine Start-und Endzeit zum Abrufen von Frames angeben kann, damit ich die Videodatei nicht vorher zuschneiden muss.

Author: Trae, 2015-10-10

2 answers

Sie können die Frames als PNG extrahieren, ein verlustfreies Bildkomprimierungsformat. Um beispielsweise Frames von der 5mn-Marke in die 10mn-Marke zu extrahieren:

ffmpeg -ss 05:00 -i <input> -t 05:00 filename%05d.png
 14
Author: Ely,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-10-11 20:08:11

Es gibt mehrere Tools, die in der Lage sein sollten, alle Frames aus einer Filmdatei zu extrahieren:

Avconv
avconv -i file.avi -f image2 Out%00d.jpg

Ffmpeg
ffmpeg -i input.file thumb%04d.png -hide_banner

Dies kann auch BMP exportieren, was viel weniger Verarbeitungszeit in Anspruch nimmt als PNG oder JPG.

Es gibt auch ein Bash-Skript namens mov2frame.sh, das versucht, den FFMPEG-Extraktionsprozess zu automatisieren.

Mplayer
mplayer -ao null -vo png input.file

Oder eine andere option:

mplayer -nosound -vo png:z=9 my_file.mp4

VLC Dieser Media Player kann anscheinend Bildsätze mit seinen Filtern exportieren, scheint jedoch problematisch zu sein, es sei denn, es handelt sich um Ihre einzige Verwendung oder Sie haben eine tragbare Version.

  1. Erstellen Sie einen Ordner zum Speichern Ihrer Frames und kopieren Sie den Pfad dorthin. Für Mac OSX / Linux-Benutzer muss dies der vollständige Pfad sein (no~).

  2. Klicken Sie in VLC auf Extras / Einstellungen.

  3. Klicken Sie unter "Einstellungen anzeigen"auf " Alle".

  4. Unter "Video -", wählen Sie "Filter". Kreuzen Sie "Szene-Videofilter"an.

  5. Erweitern Sie "Filter" und wählen Sie "Szenenfilter",

  6. Fügen Sie den Pfad von früher in "Verzeichnispfadpräfix"ein.

  7. Wählen Sie den Bruchteil der zu kodierenden Frames im Feld "Aufnahmeverhältnis" aus. 1/12 mit Ausgabe alle 12, 1/1 exportiert sie alle

  8. Klicken Sie auf "speichern".

  9. Klicken Sie auf Medien / Video öffnen und suchen Sie Ihr Video. Geduldig lassen Sie das Ganze spielen.

  10. Klicken Sie Auf Extras / Einstellungen. Klicken Sie unter "Einstellungen anzeigen"auf " Alle". Wählen Sie unter "Video" "Filter". Deaktivieren Sie "Szenenvideofilter". Klicken Sie auf "speichern". Auf diese Weise generiert VLC beim nächsten Abspielen eines Videos keine Miniaturansichten. link -

Es scheint auch einige mögliche Probleme mit Administratorberechtigungen beim ersten Programmlauf zu geben:

sudo vlc [sudo] password for mint16: VLC is not supposed to be run as root. Sorry. If you need to use real-time priorities and/or privileged TCP ports you can use vlc-wrapper (make sure it is Set-UID root and cannot be run by non-trusted users first).

VLC funktioniert auch viel besser beim Extrahieren in BMP anstelle von PNG

 8
Author: chronometric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-11-23 19:12:00