2017-10-16 3 views
0

aufzunehmen Ich benutze FFmpeg Version 3.3.4 (installiert über brew) über die Befehlszeile, um meinen Desktop während einiger automatisierter Tests aufzuzeichnen auf meiner macOS Sierra (10.12.6).FFmpeg 3.3.4 avfoundation, um nur einen bestimmten Abschnitt des Bildschirms auf macOS Sierra über die Befehlszeile

Ich möchte nur einen bestimmten Abschnitt des Bildschirms aufnehmen, aber leider kann ich nicht die richtigen Optionen in der Dokumentation finden, um mein Ziel zu erreichen.

Nach dem FFmpeg documentation for avfoundation, das ist der Befehl, den ich verwenden:

ffmpeg 
-f avfoundation // avfoundation 
-pix_fmt uyvy422 // pixel format 
-i 1    // input: desktop 
-r 30    // framerate for output 
[PATH]/test.mp4  // filename 

Wenn ich diesen Befehl ich die folgende Ausgabe haben:

ffmpeg version 3.3.4 Copyright (c) 2000-2017 the FFmpeg developers 
    built with Apple LLVM version 9.0.0 (clang-900.0.37) 
    configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3.4 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-gpl --enable-ffplay --enable-frei0r --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-opencl --enable-videotoolbox --enable-openssl --disable-lzma --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/2.3.0/include/openjpeg-2.3 --enable-nonfree --enable-vda 
    libavutil  55. 58.100/55. 58.100 
    libavcodec  57. 89.100/57. 89.100 
    libavformat 57. 71.100/57. 71.100 
    libavdevice 57. 6.100/57. 6.100 
    libavfilter  6. 82.100/6. 82.100 
    libavresample 3. 5. 0/3. 5. 0 
    libswscale  4. 6.100/4. 6.100 
    libswresample 2. 7.100/2. 7.100 
    libpostproc 54. 5.100/54. 5.100 
[avfoundation @ 0x7fb7d4005800] Stream #0: not enough frames to estimate rate; consider increasing probesize 
Input #0, avfoundation, from '1': 
    Duration: N/A, start: 7263.782833, bitrate: N/A 
    Stream #0:0: Video: rawvideo (UYVY/0x59565955), uyvy422, 1920x1080, 1000k tbr, 1000k tbn, 1000k tbc 
Stream mapping: 
    Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264)) 
Press [q] to stop, [?] for help 
No pixel format specified, yuv422p for H.264 encoding chosen. 
Use -pix_fmt yuv420p for compatibility with outdated media players. 
[libx264 @ 0x7fb7d4028400] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2 
[libx264 @ 0x7fb7d4028400] profile High 4:2:2, level 4.0, 4:2:2 8-bit 
[libx264 @ 0x7fb7d4028400] 264 - core 148 r2795 aaa9aa8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 
Output #0, mp4, to '[PATH]/test.mp4': 
    Metadata: 
    encoder   : Lavf57.71.100 
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0]/0x0021), yuv422p, 1920x1080, q=-1--1, 30 fps, 15360 tbn, 30 tbc 
    Metadata: 
     encoder   : Lavc57.89.100 libx264 
    Side data: 
     cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1 
frame= 83 fps= 28 q=-1.0 Lsize=  525kB time=00:00:02.66 bitrate=1612.6kbits/s dup=1 drop=0 speed=0.889x 

Ich versuchte, die -video_size Option zu verwenden zu setzen die Videobildgröße, aber es funktioniert nicht.

Antwort

1

Zuerst müssen Sie den Namen des AVFoundation Gerät finden, die auf dem Bildschirm entspricht:

ffmpeg -hide_banner -f avfoundation -list_devices true -i "" 

[AVFoundation input device @ 0x7fc1cd40ec60] AVFoundation video devices: 
[AVFoundation input device @ 0x7fc1cd40ec60] [0] HD Pro Webcam C920 
[AVFoundation input device @ 0x7fc1cd40ec60] [1] FaceTime HD Camera (Built-in) 
[AVFoundation input device @ 0x7fc1cd40ec60] [2] Capture screen 0 
[AVFoundation input device @ 0x7fc1cd40ec60] AVFoundation audio devices: 
[AVFoundation input device @ 0x7fc1cd40ec60] [0] HD Pro Webcam C920 
[AVFoundation input device @ 0x7fc1cd40ec60] [1] Built-in Microphone 

Also mein Bildschirm ist Gerät [2], weil ich zwei Kameras angeschlossen haben, und sie sind Geräte [0] und [1].

Dann wird, wie Sie auf einem Mac sind, werden Sie wahrscheinlich wollenQuicktime verwenden, um Videos zu sehen, so dass Sie Sie Videos, um sicherzustellen, müssen die kompatibel sind - die -pix_fmt yuv420p Mittel verwenden.

ffmpeg -f avfoundation -i "2:0" -vf "crop=1024:768:400:800" -pix_fmt yuv420p -y -r 10 out.mov 

Die 1024x768 sind die Breite und Höhe des Videos und die 400: 800 der Versatz von oben links im Bildschirm sind, die ich von aufnehmen möchten.

+0

Vielen Dank! Es scheint gut zu funktionieren. Ich habe noch zwei Fragen: 1) Was machen die "-y" Optionen? 2) Hinzufügen der '--pix_fmt yuv420p' nach den' -i' und '-vf' Optionen Ich habe die folgende Warnung' [avfoundation @ 0x7f8d41003400] Das ausgewählte Pixelformat (yuv420p) wird vom Eingabegerät nicht unterstützt Liste des unterstützten Formats. Welche lib/Erweiterung sollte ich hinzufügen? – antedesk

+1

Das '-y' bedeutet *" ja, es ist in Ordnung "* für' ffmpeg', vorherige Dateien mit dem gleichen Namen zu überschreiben - was oft passiert, wenn man das Zeug immer wieder testet. –

+0

Sie sollten die '-pix_fmt yuv420p' ** nach ** allen Inputs hinzufügen, damit' ffmpeg' weiß, dass die Ausgabe in 'yuv420' sein soll, damit QuickTime es abspielen kann. Wenn Sie es in die Nähe des Zeilenanfangs setzen, nimmt 'ffmpeg' an, dass Sie die Eingabe vom Bildschirm in diesem Format eingeben möchten - was nicht möglich ist. –