स्क्रीन कास्टिंग ffmpeg का उपयोग कर (बहुत तेज)


9

मैं स्क्रीन कास्ट बनाने के लिए ffmpeg का उपयोग कर सकता हूं:

ffmpeg -f x11grab -s 1280x800 -i :0.0 -c:v libx264 -framerate 30 -r 30 -crf 18 out.mkv

हालाँकि आउटपुट बहुत तेज़ी से निकलता है। यह भी होता है GTK RecordMyDesktopअगर मैं मक्खी पर सांकेतिक शब्दों में बदलना सक्षम करता हूं। तो, सवाल यह है कि सामान्य वीडियो गति कैसे प्राप्त करें। भी ffmpeg के साथ ध्वनि पर कब्जा करने के लिए क्या विकल्प का उपयोग किया जाना चाहिए?

FFmpeg आउटपुट:

    ffmpeg -f x11grab -s 1280x800 -r 30 -i :0.0 -c:v libx264 -framerate 30 -r 30 -crf 18 out.mkv
ffmpeg version N-35162-g87244c8 Copyright (c) 2000-2012 the FFmpeg developers
  built on Oct  7 2012 15:56:19 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
  configuration: --enable-gpl --enable-libfaac --enable-libfdk-aac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-x11grab --enable-libx264 --enable-nonfree --enable-version3
  libavutil      51. 73.102 / 51. 73.102
  libavcodec     54. 64.100 / 54. 64.100
  libavformat    54. 29.105 / 54. 29.105
  libavdevice    54.  3.100 / 54.  3.100
  libavfilter     3. 19.102 /  3. 19.102
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 16.100 /  0. 16.100
  libpostproc    52.  1.100 / 52.  1.100
[x11grab @ 0xab896a0] device: :0.0 -> display: :0.0 x: 0 y: 0 width: 1280 height: 800
[x11grab @ 0xab896a0] shared memory extension found
[x11grab @ 0xab896a0] Estimating duration from bitrate, this may be inaccurate
Input #0, x11grab, from ':0.0':
  Duration: N/A, start: 1350136942.608988, bitrate: 983040 kb/s
    Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 1280x800, 983040 kb/s, 30 tbr, 1000k tbn, 30 tbc
[libx264 @ 0xab87320] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowCTZ SlowAtom
[libx264 @ 0xab87320] profile High 4:4:4 Predictive, level 3.2, 4:4:4 8-bit
[libx264 @ 0xab87320] 264 - core 128 r2 198a7ea - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - 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=4 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=18.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, matroska, to 'out.mkv':
  Metadata:
    encoder         : Lavf54.29.105
    Stream #0:0: Video: h264, yuv444p, 1280x800, q=-1--1, 1k tbn, 30 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo -> libx264)
Press [q] to stop, [?] for help
frame=   10 fps=0.0 q=0.0 size=       1kB time=00:00:00.00 bitrate=   0.0kbits/sframe=   19 fps= 17 q=0.0 size=       1kB time=00:00:00.00 bitrate=   0.0kbits/sframe=   28 fps= 17 q=0.0 size=       1kB time=00:00:00.00 bitrate=   0.0kbits/sframe=   37 fps= 17 q=0.0 size=       1kB time=00:00:00.00 bitrate=   0.0kbits/sframe=   45 fps= 16 q=0.0 size=       1kB time=00:00:00.00 bitrate=   0.0kbits/sframe=   47 fps= 14 q=0.0 size=       1kB time=00:00:00.00 bitrate=   0.0kbits/sframe=   52 fps= 13 q=24.0 size=     257kB time=00:00:00.00 bitrate=2101632.0kbiframe=   55 fps= 12 q=24.0 size=     257kB time=00:00:00.10 bitrate=20808.2kbitsframe=   59 fps= 11 q=24.0 size=     289kB time=00:00:00.23 bitrate=10145.0kbitsframe=   64 fps= 11 q=24.0 size=     289kB time=00:00:00.40 bitrate=5894.7kbits/frame=   70 fps= 11 q=24.0 size=     289kB time=00:00:00.60 bitrate=3933.1kbits/frame=   72 fps= 10 q=24.0 size=     289kB time=00:00:00.66 bitrate=3549.2kbits/frame=   77 fps=9.8 q=24.0 size=     289kB time=00:00:00.83 bitrate=2837.7kbits/frame=   80 fps=9.6 q=24.0 size=     289kB time=00:00:00.93 bitrate=2533.5kbits/frame=   85 fps=9.3 q=24.0 size=     289kB time=00:00:01.10 bitrate=2146.9kbits/frame=   89 fps=9.3 q=24.0 size=     289kB time=00:00:01.23 bitrate=1917.1kbits/frame=   92 fps=9.1 q=24.0 size=     289kB time=00:00:01.33 bitrate=1773.3kbits/frame=   96 fps=9.0 q=24.0 size=     289kB time=00:00:01.46 bitrate=1612.4kbits/frame=   99 fps=8.8 q=24.0 size=     321kB time=00:00:01.56 bitrate=1676.8kbits/frame=  104 fps=8.7 q=24.0 size=     321kB time=00:00:01.73 bitrate=1515.2kbits/frame=  109 fps=5.3 q=24.0 Lsize=    1093kB time=00:00:03.56 bitrate=2511.5kbits/s    
video:1092kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.120198%
[libx264 @ 0xab87320] frame I:3     Avg QP:18.93  size:142610
[libx264 @ 0xab87320] frame P:43    Avg QP:20.79  size: 15751
[libx264 @ 0xab87320] frame B:63    Avg QP:23.75  size:   195
[libx264 @ 0xab87320] consecutive B-frames: 21.1%  1.8% 11.0% 66.1%
[libx264 @ 0xab87320] mb I  I16..4: 50.0% 21.1% 28.9%
[libx264 @ 0xab87320] mb P  I16..4:  6.1%  0.9%  3.2%  P16..4:  5.5%  1.2%  0.6%  0.0%  0.0%    skip:82.5%
[libx264 @ 0xab87320] mb B  I16..4:  0.4%  0.1%  0.0%  B16..8:  2.9%  0.1%  0.0%  direct: 0.0%  skip:96.5%  L0:40.7% L1:57.0% BI: 2.3%
[libx264 @ 0xab87320] 8x8 transform intra:14.5% inter:46.1%
[libx264 @ 0xab87320] coded y,u,v intra: 33.5% 24.1% 25.4% inter: 0.9% 0.4% 0.4%
[libx264 @ 0xab87320] i16 v,h,dc,p: 70% 26%  1%  3%
[libx264 @ 0xab87320] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 11% 21% 30%  5%  7%  5%  7%  4% 10%
[libx264 @ 0xab87320] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 32% 35% 12%  2%  4%  3%  4%  3%  5%
[libx264 @ 0xab87320] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0xab87320] ref P L0: 57.0%  5.6% 26.8% 10.6%
[libx264 @ 0xab87320] ref B L0: 69.4% 22.6%  8.0%
[libx264 @ 0xab87320] ref B L1: 93.7%  6.3%
[libx264 @ 0xab87320] kb/s:2460.40

-f alsa -i pulseआपको ऑडियो इनपुट मिलना चाहिए। क्या आप हमें पूरा, बिना कमांड लाइन आउटपुट भी दे सकते हैं?
13:53

1
मेरे x11grabपास एक -framerateविकल्प है । यह NTSC के लिए चूक है, तो आप शायद इस्तेमाल कर सकते हैं -framerate 30और -r 30संयोजन में उत्पादन के लिए?
10

@ श्लोक, धन्यवाद। पोस्ट आपके सुझाव के अनुसार अपडेट की गई है, हालांकि वही समस्या है। मेरा कंप्यूटर इतना तेज भी नहीं है।
rowman

@slhck, मुझे लगता है कि मुझे कुछ सुराग है कि क्या होता है। ऐसा लगता है कि यह एक ही समय में एन्कोडिंग करते समय बीच में कुछ शॉट्स को याद करता है। इसलिए यह तेज लगता है। विशेष रूप से जब लोड अधिक होता है फ्रेम लॉस की दर बहुत अधिक होती है और वीडियो सिर्फ कूदता है। क्या एन्कोडिंग के बिना सिर्फ कैप्चर करने और वीडियो को कैप्चर करने के लिए एन्कोड करने का एक तरीका है, जैसा कि GTK RecordMyDesktop द्वारा किया गया है?
रोमान

मेरा मानना ​​है कि समस्या -r 30यह है कि इसका पहला मतलब है "आने वाले डेटा टाइमस्टैम्प्स को अनदेखा करना और इसका इलाज करना जैसे कि यह ठीक 30 एफपीएस थे" कोशिश "-फ्रेमरेट 30" इसके बजाय वहाँ
rogerdpack

जवाबों:


5

स्क्रीन पर कब्जा करने के लिए दोषरहित एनकोडर का उपयोग करने का प्रयास करें, और जब आप चाहें तो एक छोटी फ़ाइल बनाने के लिए तैयार होने पर आउटपुट को फिर से एनकोड करें। इस पद्धति का लाभ अक्सर कम गहन कैप्चरिंग प्रक्रिया होती है जिसके परिणामस्वरूप "तेज" कैप्चर फ्रेम दर हो सकती है। बेशक परिणाम अलग-अलग हो सकते हैं।

ffmpeg -f x11grab -s 1280x800 -i :0.0 -c:v libx264 -preset ultrafast -crf 0 out.mkv

यह संभव है कि आपके CPU में किसी विशेष स्क्रीन कैप्चर आकार में आपके घोषित फ्रेम दर पर एनकोड करने की क्षमता न हो। उस स्थिति में आप एक छोटे -sमूल्य की कोशिश कर सकते हैं । यह अन्य दोषरहित एनकोडर जैसे huffyuv, ffv1, या utvideo के साथ प्रयोग करने के लायक हो सकता है, लेकिन मैंने व्यक्तिगत रूप से इन्हें स्क्रैनास्ट के लिए आज़माया नहीं है।

और जानकारी:


ऐसा लगता है कि आपके द्वारा उल्लिखित अन्य दोषरहित कोड x264 की तुलना में कम संसाधन गहन हैं। उस पर बाद में और अधिक सटीक टिप्पणी करेंगे।
रोम्मन

1
@rowman लगभग कोई भी एनकोडर x264 (या आम तौर पर, h.264 एनकोडर) की तुलना में कम संसाधन गहन होता है, जो कि एन्कोड करने के लिए लिया गया गुणवत्ता बनाम समय की बात है। यही कारण है कि कई उपयोगकर्ता अभी भी एक्सवीडी या इसी तरह चिपके रहते हैं जब यह वास्तविक समय एन्कोडिंग की बात आती है।
slhck

@ @lhck अच्छा बिंदु। क्या कंटेनरों का संसाधनों पर भी कोई प्रभाव पड़ता है? और संसाधनों के मामले में विभिन्न दोषरहित वीडियो कोडेक्स की तुलना पर कोई साहित्य है? उनमें से लगभग सभी सबसे तेज़ होने का दावा करते हैं।
rowman

@rowman क्या आपने मेरा उदाहरण आज़माया? दोषरहित आउटपुट बनाने के लिए x264 का उपयोग करके मुझे सूचीबद्ध अन्य एन्कोडर की तुलना में कुछ समान प्रदर्शन देना चाहिए। शायद थोड़ा धीमा हो; शायद थोड़ा तेज, लेकिन मुझे लगता है कि मतभेद काफी नहीं होना चाहिए।
llogan

@LordNeckbeard, हां मैंने किया। आपके उदाहरण में x264 में मेरे cpu पर 60-70% अधिभार है जबकि huffyuv, utvideo, ffv1 में औसतन 25-35% है। मेरे पास एक ठोस बुद्धि परमाणु है;)
पंक्तिवाला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.