2016-07-22 16 views
0

Ich habe einen Timer-Tick-Ereignis, wo ich Screenshots alle 10msWas sollte das Timing sein, um Screenshots als Bilder zu erfassen und dann die Bilder mit ffmpeg in eine Videodatei umzuwandeln?

 int count = 0; 
     private void timer1_Tick(object sender, EventArgs e) 
     { 
      Bitmap bmp = new Bitmap(sc.CaptureScreen()); 
      bmp.Save(@"D:\SavedScreenshots\screenshot" + count + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp); 
      bmp.Dispose(); 
      count ++; 
     } 

i Dann bin ich in Fenster der Eingabeaufforderung ffmpeg Kommandozeile eine Videodatei von allen Bildern zu erstellen:

ffmpeg -framerate 2 -i screenshot%d.bmp -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4 

Jede Bitmap-Datei auf der Festplatte es Größe ist, ist 7,91 MB die Details: 1920x 1080 und Bit-Tiefe 32

Das Problem ist, wenn die ffmpeg Kommandozeile macht mit -framerate 2 dann, wenn ich das Video fi spielen In Windows Media Player ist es sehr, sehr langsam. Wenn ich die Framerate auf 10 setze, ist es zu schnell. Wenn ich die Framerate auf 4 setze, bekomme ich Fehler in gelb sagen zu groß.

Aber vielleicht ist das Problem, dass ich alle 10ms einen Screenshot mache? Vielleicht sollte ich alle 1000ms einen Screenshot machen? Und was sollte ich in der ffmpeg-Befehlszeile ändern?

Ich möchte es wie eine normale Videodatei Geschwindigkeit sein. Nicht zu schnell und nicht zu langsam. Was ich auf dem Screenshot festhabe, ist mein Desktop-Bildschirm und später möchte ich es hochladen und es zu einigen Support-Hilfe in einem Forum zeigen.

+0

regelmäßige Videogeschwindigkeit wie in Youtube ist ungefähr 24fps oder 30fps. Es bedeutet 24 oder 30 Bitmaps in 1 Sekunde. Ihr Timer muss 1000/24 ​​oder 1000/30 Millisekunden betragen. Ich denke in ffmpeg, -framerate 1/24 oder 1/30 –

Antwort

0

Sie können mit FFmpeg direkt erfassen.

ffmpeg -f gdigrab -framerate 24 -i desktop -preset ultrafast -pix_fmt yuv420p out.mp4 

(Drücken Sie Strg-C oder q, um zu stoppen).

Sie können die aufgenommene Datei die Größe,

ffmpeg -i out.mp4 out-small.mp4 

Wenn Sie mit C# fortsetzen möchten, eine Timer-Intervall von 1000 bis 1024 ms verwenden und

ffmpeg -framerate 24 -i screenshot%d.bmp -c:v libx264 -pix_fmt yuv420p out.mp4