2015-09-30 19 views
7

Ich möchte mit ffmpeg meinen Desktop sowie meine Kamera als Overlay auf dem Desktop aufzeichnen.ffmpeg Bildschirmaufnahme mit Kamera-Overlay auf OSX

Also im Grunde will ich zwei Eingangsquellen haben, die

$ ffmpeg -f avfoundation -list_devices true -i '' 
[AVFoundation input device @ 0x7fded1c223e0] AVFoundation video devices: 
[AVFoundation input device @ 0x7fded1c223e0] [0] FaceTime HD Camera 
[AVFoundation input device @ 0x7fded1c223e0] [1] Capture screen 0 
[AVFoundation input device @ 0x7fded1c223e0] AVFoundation audio devices: 
[AVFoundation input device @ 0x7fded1c223e0] [0] Built-in Microphone 

Aus dem oben aufgezeichnet werden müssen, muss ich [0] Facetime HD Kamera als Overlay und [1] Capture-Bildschirm 0 als Hauptvideo .

Ist das überhaupt möglich?

UPDATE (2015.10.06):

finde ich den folgenden Befehl von ffscreencast:

ffmpeg \ 
-f avfoundation -i "1" \ 
-f avfoundation -r 30 -video_size 640x480 -i "0" \ 
-c:v libx264 -crf 0 -preset ultrafast \ 
-filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' "out.mkv" 

Leider hat der Ausgang eine ziemlich langsame Bildrate (i7 MacBook Pro 2014)

Output #0, matroska, to 'out.mkv': 
    Metadata: 
encoder   : Lavf56.40.101 
Stream #0:0: Video: h264 (libx264) (H264/0x34363248), yuv420p, 3840x2400, q=-1--1, 1000k fps, 1k tbn, 1000k tbc (default) 
Metadata: 
    encoder   : Lavc56.60.100 libx264 
Stream mapping: 
    Stream #0:0 (rawvideo) -> overlay:main 
    Stream #1:0 (rawvideo) -> overlay:overlay 
    overlay -> Stream #0:0 (libx264) 

frame= 756 fps=9.1 q=-1.0 Lsize= 193660kB time=00:01:21.86 bitrate=19378.5kbits/s 
Press [q] to stop, [?] for help 

Jeder eine Idee, wie man eine höhere Framerate bekommt? Meine Kamera kann nur mit 30 Bildern pro Sekunde aufnehmen, aber die Ausgabe scheint nur 9 Bilder zu haben. Warum der Unterschied?

+0

ffmpeg hat einen Overlay-Filter, also würde ich es vermuten. – rogerdpack

+0

Ja ich habe es gerade gefunden, scheint aber immer noch langsam. – lockdoc

+0

Hi lockdoc, welche OS X-Version du verwendest. Ich benutze 10.10.5 und den Befehl "ffmpeg -f avfoundation -list_devices true -i ''" zeige nur 1 Eingabegeräte (Kamera). – TuanAnh207

Antwort

9

Für mich funktioniert, ffmpeg Version 2.8:

ffmpeg -thread_queue_size 50 \ 
-f avfoundation -framerate 30 -i "1" \ 
-thread_queue_size 50 -f avfoundation -framerate 30 -video_size 640x480 -i "0" \ 
-c:v libx264 -crf 18 -preset ultrafast \ 
-filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' -r 30 ~/Desktop/out.mkv 

HINWEIS: i in der Dokumentation zu lesen, dass die '-r' Option für die Ausgabe ist, so dass Sie es auf dem falschen Platz haben in Ihrem Befehl. Der '-crf'-Wert scheint übertrieben, wenn in der Dokumentation angegeben wird, dass ein Wert von 18 visuell verlustfrei ist. Sie müssen wahrscheinlich auch mit dem Wert "-thread_queue_size" für Ihr spezifisches System spielen.

+0

Danke, das war hilfreich. – baltasvejas

+0

Das hat gut funktioniert. Danke Felipe. – muammar