Frame aus MPEG-Video extrahieren

    • Frame aus MPEG-Video extrahieren

      Ist es mit einigermaßen wenig Aufwand möglich, mit Java zB den 500 Frame von hinten aus einem MPEG-Video als Bild zu extrahieren?
      Bisher hab ich nur das Java Media Framework gefunden. Dieses ist für mich jedoch ziemlich unverständlich dokumentiert, und die Demo's sind nicht nur total kompliziert programmiert sondern funktionieren teilweise auch gar nicht!
      Ferner wurde das Projekt anscheinend 2005 eingestellt. Auf Wikipedia hab ich noch einen Link auf das FMJ-Projekt gefunden, das anscheinend aber nichts anderes macht als die Methoden des JMF 1:1 nachzubauen ...

      Gibt es diesbezüglich sonst noch Möglichkeiten?
    • Ja, es sollte schon Java sein, da es die einzige "richtige" Programmiersprache ist die ich mittlerweile halbwegs beherrsche ^^
      Ich brauche das ganze für ein Medienarchiv das ich im Rahmen meines derzeitigen Praktikums programmieren soll. Es wurde gewünscht dass sämtliche MPEG-Videos durch ein Programm in das Medienarchiv eingearbeitet werden sollen (korrekte Umbenennung etc.).
      Dazu soll noch von jedem Video ein Snapshot vom 500sten Frame von hinten gespeichert werden, damit ein kleines Vorschaubild in der Suchmaske des Medienarchivs angezeigt werden kann.

      Ich kenne nur zwei Programme die
      1. gratis sind
      2. so etwas können
      und zwar FFMPEG und den MPLAYER

      Da beide allerdings nur so halb-legal sind, sind sie für den produktiven Einsatz in Firmen natürlich ungeeignet! :(

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Christoph ()

    • Ich hab mich jetzt nochmal mit FFMPEG gespielt und herausgefunden wie man einen bestimmten Frame als JPG exportiert.

      Quellcode

      1. ffmpeg -i test.mpg -s 320×240 -ss 50 -vframes 1 -f mjpeg image.jpg

      Dieser Befehl würde den 50sten Frame von vorne als image.jpg speichern. Gibt es irgendeine Möglichkeit FFMPEG in Firmen legal einzusetzen? Ich hab mittlerweile herausgefunden dass MPEG-2 nichmal vom JMF unterstützt wird, insofern hab ich mit Java nichtmal die Möglichkeit das zu lösen -_-

      (Sorry4doublepost)

      EDIT: Ich habe gerade herausgefunden dass wir auf den Bürorechnern den Media Player Classic installiert haben. So wie es aussieht lässt sich dieser auch im Gegensatz zum WMP über die Kommandozeile ansprechen. Die GUI von MPC bietet die Möglichkeit einen Video-Snapshot als BMP zu speichern. Habe bisher allerdings noch keinen Weg gefunden das über die Kommandozeile zu erreichen :(

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Christoph ()

    • Original von Christoph
      im Gegensatz zum WMP

      Also die beiden Player, wenn es auch nur so ein kleiner Punkt ist, miteinander zu vergleichen, ist schon ein starkes Stück. :P

      Was ist eigentlich genau dein Problem? Wieso könntest du den MPC verwenden, FFmpeg aber nicht?

      PS: In der Hilfe/Doku des MPC steht nichts über Screenshots per Command Line, außerdem gibt es generell nur wenige Befehle, die dort angenommen werden können.
    • Weil mich bei MPC keiner nach den Lizenzbestimmungen fragt, wenn er schon vorinstalliert ist ;)
      Der Vergleich WMP mit MPC ist allerdings etwas gewagt, aber ich hatte bereits mit beiden Playern experimentiert und MPC hat ja immerhin das alte GUI des WMP ^^

      Mir wär das mit den MPEG-Patenten ja eigentlich total egal :D
      Es wird nie jemand kontrollieren welches Programm denn da automatisch die Snapshots von den Videos macht - aber die IT wird das sicher nicht dulden ...


      EDIT: Es sieht so aus als greife die GPL erst, wenn die entsprechende Software vertrieben wird :) (gnu.org/licenses/gpl-violation.html)
      Somit würde ich den VLC Player in Betracht ziehen, da sich dieser anscheinend ziemlich gut über die Kommandozeile steuern lässt. Ist nur die Frage ob der nicht eh diesselben Codecs verwendet als FFMPEG :D

      EDIT: Ich habe jetzt herausgefunden wie sich mit VLC über die Shell ein Snapshot extrahieren lässt:
      vlc -d --no-audio -V image --key-jump+long 25 --start-time 25 --stop-time 26 --image-out-format jpg --image-out-ratio 25 --image-out-prefix schnappschuss --no-image-out-replace video.mpg vlc:quit

      Dieses Beispiel extrahiert zwischen der 25. und 26. Sekunde aus dem Video video.mpg, das Bild schnappschuss.jpg!
      Die Parameter -d --no-audio verhindern, dass sich die grafische Oberfläche des VLC öffnet und die Audiotonspur wiedergegeben wird; durch --key-jump+long 25 beginnt das Video sofort mit der 25. Sekunde, dadurch muss nicht extra das ganze Video durchlaufen werden.

      Lässt sich über die Kommandozeile irgendwie die Länge des Videos herausfinden? Diese Eigenschaft konnte ich bisher nur über die GUI herausfinden :(

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von Christoph ()