Ergebnis 1 bis 8 von 8

Thema: Konsolen-aufnahme-programm :) (beta 0.01)

  1. #1
    Neuer Benutzer
    Registriert seit
    17.12.2004
    Beiträge
    7

    Konsolen-aufnahme-programm :) (beta 0.01)

    Moin,


    heute Abend hatte ich die Idee, da ich im Moment Lisp lerne, Videos von Lisp-Sessions aufzunehmen, damit ich mir diese später anschauen kann ohne das dazugehörige Buch lesen zu müssen.
    Ich hab das Programm dann prompt Splash gezeigt und wir sind auf die Idee gekommen, dass man noch ganz andere Sachen damit machen kann: Zum Beispiel kann man, wenn etwas am System nicht funktioniert, die kritsichen Stellen aufnehmen und dann hochladen, sodas andere sich den Verlauf anschauen können (und besser analysieren können). Dies ist deutlich besser als einfach nur eine Fehlermeldung zu posten.

    Achja, worum es eigentlich geht: Das Programm nimmt eine komplette Konsolensession auf.
    Beispiel:
    Auf tty7 (X-Server) öffnet ihr eine Konsole. Darin tippt ihr su, um root zu werden. Dann führt ihr das Programm aus. Z.B. so:

    # ./aufnahme /dev/vcs1 test.avi

    /dev/vcs1 ist die erste Konsole (tty0), ihr könnt natürlcih auch jede andere Konsole aufnehmen. Dann wechslet ihr mit STRG+ALT+Fx in die jeweilige Konsole und tippt dort irgendwas. Später kehrt ihr auf tty7 zurück und drückt in eurem terminal STRG+C. Nun wird ein Video generiert, das ihr euch mit einem Video-Abspiel-Programm eures Vertrauens ansehen könnt.


    Benötigt werden:
    gd (Graphik-Bibliothek http://www.boutell.com/gd)
    mencoder (ist bei mplayer dabei)


    Viel Spaß!

    Hier ist der Code:
    Speichert ihn in einer Datei foo.c und führt folgendes zum Compilieren aus:

    gcc -o foo foo.c -lgd

    Code:
    /* BSD-style Lizenz, Christian Pohlmann */
    #include <signal.h>
    #include <gd.h>
    #include <gdfonts.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    
    char vid_out[100];
    
    void abbruch (int sig)
    {
      char cmd[100];
      printf("generiere Video... bitte warten");
      fflush(stdout);
      
      sprintf(cmd, "mencoder \"mf://*jpg\" -mf type=jpg:fps=10  -o %s -ovc lavc ", vid_out);
      system(cmd);
      system("rm *jpg");
      exit(EXIT_SUCCESS);
    }
    
    void capture_img (const char* dev, const char* fname)
    {
      gdImagePtr im;
      gdFontPtr font;
      int white, black;
      FILE* in, *out;
      char buf[81];
      int cnt = 0;
      im = gdImageCreate(800, 600);
      font = gdFontGetSmall();
      white = gdImageColorAllocate(im, 255, 255, 255);
      black = gdImageColorAllocate(im, 0, 0, 0);
      if ((in = fopen(dev, "r+")) == NULL)
      {
        printf("Konnte angegebenen Device nicht öffnen (Programm muss mit root-Rechten laufen!)\n");
        exit(EXIT_FAILURE);
      }
      while (1)
      {
        if (fgets(buf, 81, in) == NULL)
          break;
        buf[80] = 0;
        gdImageString(im, font, 0, cnt++ * 20, buf, black);
      }
      out = fopen(fname, "w+");
      gdImageJpeg(im, out, -1);
      fclose(out);
      gdImageDestroy(im);
    }
    
    int main (int argc, char** argv)
    {
      int frame_cnt;
      char fname[20];
      char dev[15];
      int con_num;
      if (argc != 3)
      {
        printf("Usage: %s <device> <datei>\n");
        exit(EXIT_FAILURE);
      }
      signal(SIGINT, abbruch);
      frame_cnt = 0;
      strncpy(vid_out, argv[2], 100);
      printf("Abbrechen mit STRG+C!\n");
      while (1)
      {
        sprintf(fname, "con%.4d.jpg", ++frame_cnt);
        capture_img(argv[1], fname);
        usleep(100 * 1000);
      }
      return 0;
    }


    PS: Ich weiß, dass es sich hierbei um schmutziges C handelt ) bin für Verbesserungsvorschläge offen

  2. #2
    Administrator
    Registriert seit
    11.06.2003
    Beiträge
    1.499
    lol splash kann net mehr tippen
    der ist zu dicht rofl

    hier könnt ihr euch die demo herunterladen
    http://unixfreunde.de/foo.avi


    ps: er steht dazu

  3. #3
    Erfahrener Benutzer
    Registriert seit
    30.08.2003
    Beiträge
    730
    Tja ich würde es mir gerne anschauen, aber es läuft net.
    Manchmal weicht die Praxis von der Theorie um einiges ab.

  4. #4
    Administrator
    Registriert seit
    11.06.2003
    Beiträge
    1.499
    Original von Eclipse
    Tja ich würde es mir gerne anschauen, aber es läuft net.
    was geht den nicht hell sehn koennen wir net

  5. #5
    Erfahrener Benutzer
    Registriert seit
    30.08.2003
    Beiträge
    730
    Codec bitte nennen.
    Manchmal weicht die Praxis von der Theorie um einiges ab.

  6. #6
    Neuer Benutzer
    Registriert seit
    17.12.2004
    Beiträge
    7
    mpeg4

  7. #7
    Erfahrener Benutzer
    Registriert seit
    30.08.2003
    Beiträge
    730
    Playing foo.avi.
    AVI file format detected.
    AVI_NI: No audio stream found -> no sound.
    AVI: No audio stream found -> no sound.
    VIDEO: [FMP4] 800x600 24bpp 10,000 fps 320,1 kbps (39,1 kbyte/s)
    Clip info:
    Software: MEncoder 1.0pre7-3.4.4
    vo: X11 running at 1280x1024 with depth 16 and 16 bpp (":0.0" => local display)
    ================================================== ========================
    Cannot find codec matching selected -vo and video format 0x34504D46.
    Manchmal weicht die Praxis von der Theorie um einiges ab.

  8. #8
    Erfahrener Benutzer
    Registriert seit
    31.05.2004
    Beiträge
    104
    Falls jemand zufaellig in den Thread guckt weil er ein Tool zum Aufnehmen von X Sessions sucht: Ich kann istanbul empfehlen:

    Istanbul is a desktop session recorder for the Free Desktop. It records your
    session into an Ogg Theora video file. To start the recording, you click on its
    icon in the notification area. To stop you click its icon again. It works on
    Gnome, KDE, XFCE and others.

    WWW: http://live.gnome.org/Istanbul

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •