From c557004c9d586d860f980c89fc224b5ac57e7cbb Mon Sep 17 00:00:00 2001 From: Matthew Clark Date: Tue, 20 Feb 2018 13:12:12 +0000 Subject: [PATCH] Capturing images --- README.md | 1 + capturing_images.md | 29 +++++++++++++++++++++++++++++ images/test-pattern.png | Bin 0 -> 17028 bytes images/test_colors.png | Bin 0 -> 17573 bytes images/test_pinwheel.png | Bin 0 -> 8016 bytes images/test_red.png | Bin 0 -> 429 bytes images/test_smpte100.png | Bin 0 -> 374 bytes images/test_snow.png | Bin 0 -> 28146 bytes test_streams.md | 20 ++++++++++++++++++-- 9 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 capturing_images.md create mode 100644 images/test-pattern.png create mode 100644 images/test_colors.png create mode 100644 images/test_pinwheel.png create mode 100644 images/test_red.png create mode 100644 images/test_smpte100.png create mode 100644 images/test_snow.png diff --git a/README.md b/README.md index df5771d..3673e3d 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ This series of docs provides a cheat sheet for Gstreamer on the command-line. * [Basics](basics.md) * [RTMP](rtmp.md) * [Mixing video](mixing.md) +* [Capturing images](capturing_images.md) ## Sources and references diff --git a/capturing_images.md b/capturing_images.md new file mode 100644 index 0000000..b3b4e8e --- /dev/null +++ b/capturing_images.md @@ -0,0 +1,29 @@ +# Capturing images (GStreamer command-line cheat sheet) + +### Capture an image as png + +``` +gst-launch-1.0 videotestsrc ! pngenc ! filesink location=foo.png +``` + + +### Capture an image as jpeg + +``` +gst-launch-1.0 videotestsrc ! jpegenc ! filesink location=foo.jpg +``` + +### Capturing images every X seconds + +This example captures one frame every 3 seconds, and places it in files with the format `img00001.jpg`. +It also displays the video (as the `tee` command sends the video to both `multifilesink` and `autovideosink`). +To change the frequency, change the `framerate=1/3`. +e.g. `framerate=2/1` would capture a frame twice a second. + +``` +gst-launch-1.0 videotestsrc ! \ + videoscale ! videoconvert ! video/x-raw,width=640,height=480 ! \ + queue ! decodebin ! tee name=t ! queue ! videoconvert ! videoscale ! \ + videorate ! video/x-raw,width=640,height=480,framerate=1/3 ! \ + jpegenc ! multifilesink location=img%05d.jpg t. ! queue ! autovideosink +``` diff --git a/images/test-pattern.png b/images/test-pattern.png new file mode 100644 index 0000000000000000000000000000000000000000..a867274f73bff1953becb1e643a450009453a1bf GIT binary patch literal 17028 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 Mx{g|zs!jO+1IY~SO8@`> literal 0 HcmV?d00001 diff --git a/images/test_colors.png b/images/test_colors.png new file mode 100644 index 0000000000000000000000000000000000000000..7c01a6aa7a11db62199ee551351b1d90e1449884 GIT binary patch literal 17573 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 FV1ik1NWuUB literal 0 HcmV?d00001 diff --git a/images/test_pinwheel.png b/images/test_pinwheel.png new file mode 100644 index 0000000000000000000000000000000000000000..75ac1c15ffbec69c96f43ba665550cc78effe848 GIT binary patch literal 8016 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 X9@X;xsJ;d!EaktG3V_$MotC;fg>9} zzyF!2<&`L+q_A68{xiGd&*lYx90UF-Xw(Z#vFA7?&+?SN>C>n%C1LWFp|Mms+_U-Q RK43I3c)I$ztaD0e0sx4Zt&so# literal 0 HcmV?d00001 diff --git a/images/test_smpte100.png b/images/test_smpte100.png new file mode 100644 index 0000000000000000000000000000000000000000..cd6dddfa195fd6715d412991dffa5d49f4901f91 GIT binary patch literal 374 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 KH zH--=on#m-6p=mGdL?enVeh%r~0nI@c@-9<|jXis(j1f=Qh{z0)kZGz9^@11&1p-Cr z4Nv{qYg}}VbNYpC%MrDHE{+-uVH;lzICR8Kfg2Zv@CRt*jh&ieg5z=@E{sESc?<k}Z4EhjUv)v2oDwuzprK}{2w_Kq~2&!w)=$)NF$DtPHkpv>)D8?HNv_551 zQ#hpx;JOy%P|qyEguocWbomURsGuFjqcu~3E-R!OukBAKnQAOa$%NS#4dST2WGYxV z4p;)icRRO;fDw~niewX~E*=Z80wEWT9$J5?hcsKsMB4DksHoQ{$sG1H!BhmHG)|k9 z9AYdFSO8Y3&^+fBSDIN?`ef{;~ZgwTa;J@iHf+S(^2^)9^H;JJ(Cm0~oIAidjDV1_eIYVCp;Lq;2 ziZ}W?%9xSZ;GDx{QEOBv*yA!vJ;VViRx+-c@atO)vD0)(jVfG$`7F{M4&2&%y*-S;7Y64rmldj%zz!(M-5>+{s?nX|p6{9`G zL+}JbFBm{nY-CcGE$O9BWg`xC?WJKdRl{Sg!5@jo2Ux)EH=(Ak&6$=f#&Xz-yv8_& z%_=3+C5PSADpkQS0r$1uL}G=(ZoS2b5lqKfeuC8yV8x0RQ0|RMG|CsTBm)kybBjYD z2M>M632YSuiO3m>O7{?gWU)$kh?RgfnSR#vVHMjb9=$>@p``@k)GHjC%g!VygN8BE zuD6&9e`|HYQSU|)T{5%1<+OMWTq7*elI5LtV`{H9vPFWz8XW~ms&KOx1u+111lzAh zWDaM5B(YIc*icPWVq_%zwa}zm{rb|wYF#3PGuI?^FIxn@UwP_qQNSVo5*UqZ2g$(8 zY+9>j)E{JID~h$?qPG0o>_E064%2<%l>*7`Udv2xjVuI4>+--)oQDfHKtO+VKx(>U zrA<`o0&jC@R3n~{O-QxMfLsF0k(wjjf-lsosRWWoM0iRw)JlQ} z3N0{IEM=n{pkB=DmE9;y(&Uv9YtMt4>YMcj(`a%ph;L-GOr2G zpfp%DDAPS{(Jq5HK>CP`sK_2Utq=V3YC+2~>s=~H z8l-GxegTjzZ_=(Qb?PXc=xVEQcIT8A&GW_PZj*OP**p4lAtRN4vS;*wplV0cRA`BP z^xNA)0D|bvN2jH|6q17?VL-&4<^@p1R@%i3o~k&_Y9hiY*aDyaqzWu-3K8_!*&`0R zlYSBdadjm8<5C-4_-*w-{PhDu!4$tBMbnY7Wj=a`daoX`vl1v#Kmb|$cPpNiasplo z7_Y!2%gI-3OX;hpqwK?zUd_aY7Cqqu2SkMd7>d+VR<<#{hXEOYF*w`VRBMwWzAn^h z8HV8c#n-Y;v|3!+xLN=-LP#i$3{!VB4jLmt`PY)1Vvma$hTPEX%{Or5Z?k|~lmc9x z!God|oAI6_y)7Ofc%X|jrcbX*S+ZmaH}Q|P{xq<~OUaGyy$P6M5~h_tVJP<1&6cx< z9&6E&@B%?-YylTG;~!aS!Z`yZ6)z+VxW+j)z|v?_oVp7k)wqfXT|g*rFpf=*u_w-o zt_~R2@*={|D*_^=2!KX5N%M9P6+T{Bz# zi}XDhM@|T5YZJ&Zm`k2k5tJubg29aGVSc!Ec8c!I76l1yw8bjz^O_Q?6yuxEdcjIF zKy3vyH2`|=eK%;rL9R*&<1fJ$tqNODsVH@BdVQG0{eFa{z%HC{Fe?zJQBn{n=Aez1N)0^aD~dUaDa&e&9ZG zK+P7xbLxWZSm-C&32}-7Xvr$YMMA(hYgExw3*-l5n%vYgfKtt`>>*JC$y8LvHdL0E z#EHlYJaRY3Pw&FOQ^GFBj1(#qgquAbf;!Fbhpo6aqZCj;(^u<~^ICK;y9Xd7M(Rk~0RB13{{`~n!CzF(6 z(qRbG4HFb$J)Z?qQ-=O}X~~ObEc=u5y|1wAf@BJ%6ep!iesp$jBivZN z?kNv_>Fp}bXI2PlRPR!0Ms4ePiLUz6Yu^BY$5O$G5YniB_JO;O5EsL^h6KWoYPbud zUZRPY{_O3|4(A9!Rd?anK7nZ!d>IB@J9AbhwN^{7rEeT3Y={LDqtuqVXNIxy%(B&J ziVDv>^9=h1g<-82r}6GLAdSRhXRGpXL=A#DQsNCu7{D;dk53mOtiN0MLawwXrI4#J zuts?SFwSBt))>)<0pE-&nMiqnBCef^09xh1uWn|Efs-QGIh@1z&L(;;PPTX5mFW_$ zMbUhxnY~$>+-adncPwO^kT;`4PRlkM1%OB}qnF9rfejd$2y4H~*Dw+-sq9xQ?4|Xx z5TEpg&62qHm1sdl&_3a@v!c`O^qx}eeWzVZ#{&`qO1%TEr_h`Qw3-+%q&wL##*t*8 zUo?Fr2GOQEQbGuoNexPOzQ`rENnbl?Q<5|*t(C%n4@O2p4{w0Xq^b;ZfDTrM2wLk| zGVO?h@bO~cQbSWsqnm@(@MZ<`L9m(2H}Z?u{$#FHFqFrdPQ6uY-07`6Sjl?!Vc*O{ zp)FFOkcgJ<*)2PTTwh%tQ6QuR=GwC*^=Mab?iQq()yQ-t;Y6q>I~b#IbPHWb#EES^ zGpXOMV^atz+rqd~U#f|;Laua41%a0_0*UP4z@AoKZ3ab)(R8)W{;g=hHh^G*HhVXx z6vwk(@Be}hkn&S?XPP`V;X4Uo3HUp4*e9)_xPwAt#JwTiu5+&JVn4@X=fgSuYmVqFN z*O2Z-0^BlyK7)+zRknH9JufW?x&B(#1n3U&oj4-Xh%q>5Z(d8`xEAs?bBHEa5EBMHdc*AB?h`{&NMhI?N9;39A!(7#CLrMG#ClN9=Y6a z`WP{&+=?Y-YL#snECV>+wRAGzJ7X@IJ`}hYvvp6thqYVX4n)$l)d`s=w2qR9J<~-_ zp;7kh9bNS0aGKXE21JN-ix!l+Iml*&Yq?3G(P@_fq@qAzst_pTe3XrZttrC*kv!vD zVg1LHUdJL-tXE^2vh@D+;e)<=gr5JsxDkj3x}1@1z5KH`ut6EKBn^K!tkU?GP&A>? zaH$uj*oY$HYP2P3l37NJ0UKIKM$)UzBoqW{p^$f0zyS=^k*I*ciJW$DQFX8pWVk}^ zghb5r(klR9(PF0rP3B1jZ0OZ)t?k^~Ra%I))8byS(0T;gQ4v~ZOm`p_s$TToYz_AF zn!xsqq*x+4+zg9!A%E&xBUL35YP-DWUFps{jD#nUo&IqX6*Q|mt!b9v_eMx$wKKzH z0^6E?Y6mPaa%#mHDJr8R(tzw;BvV=tgnGzPiOUlv@?7}4jqguGhMwFaEG)AdhW7AX zOI!3(+Sbm-BQSNRQ_XOctTH0&N+cr)prHp7$wmtl_L6nofg2FAISEmFdX;bYTY4Wg zSG6V{hJ>B4GO`O>KyMWs%+ME>prf47LU-j@)f7fb(-Kb$9nN5 z-{43^dE29sc4%pD8Qh~Xz0^)ARep47B-MKLGPUJ|jTG3IKRq6)h$?t3ri&RZPFxaj z4AXnDI-@CpV&7^9omr+URDl>Ggq$E1_D49(Xpw@hl!3m*Mw(M0gn}nF9MKm_8LYMf ziCz%S7rwKQ3ym=;6Ow^XrV4|x0{6Mh5lUlcLjhwH&9;D9i?Q`2M>AFx3-N|0_gf{7 zgLJi*vj}sK2g+23>y+6DL>jfgFW>bdPg-(A6=>03J0q?xW~TKsPwzS!-^f5cFr_)` zD6BFYtjcc2$@dn%6?@ie0>yMATGWY$HsU5JgTCerLm)1RJHKqu+lfcZctTJNfYnf$ zzVT2z-km;j&cC`-ePN_oY1&iEjPV67N{OQkN}=4PCFp>d{4~B0<}TG@SWAE!)QB{I%ec+K;jZy6o)Lpnhc%*+)u> zC{=g_aX|Hc1@dc8*#ZY4p{T9phKL&PP3Xp+DBERif~UcrobJW&_ED0M4^ze1_@>iN z;$$}>O7mO%|GxX~vt>NZqa>(pZ{29+uDkB)>Z?>UWYDxkL^u9OO*HI9Dol4^k2nw+ zedx)FuiOHtIPnmCtidLhVFtotC=|G-7l=C$`}8X$g5kT+LQo_yqt}9qpR8^E6#qqq z4@!HPDsm2&^aMu6gI=(?qrn!ll)nVO`Y)Z-0zw4fp&C3R(C?*I`MW)%;OK1LfxQkBVmbm*k4H%QRwL#GIqB(B zO*IX)bDS0%?Cl9qk{+OA0H>5EEQFrEG)Pu)2vb>$+~Y+?bw$T;M<}A_Owp14^}Y9P zHc=b#_1)6jzPAQs_l|n?NjKUEyT~=7Gp1mWFH9Ha-hD(2Y~&<51413@o&h0hN-WaB z+86;1jd;7>TL=+I2CIK|#y>_XK){!Bh3=qy9cSlq9GtbT_BDo>!*OoUE+U7>7 zoxOdthl2rPBOXBCKD}8$7<7uhJ+}cOiWS4SrfW9Cy(!fi)*iA z$5Fwfon8FuCFVpn962Eh=-gJx6JrIo?S%%sU0g7lfb*Nj7BFA&ZzSn;X z6%LYjV%sYb84VN!msQ4!AaFRBjLyiH81O_YODxvPFagtxmbHKitrsJH8gESqk=ACj zw3@PyvI{ugz zT7|>{iK8@DQ!J+zz-iVkS`_<6?6zwGlVBnwWQK)IvK!7x!IpU=48ZTkC>D01l(T{* zwcv(@2x=@QSd_IFWR9=ZfhHk!ylCM|%l$h><~5~He~OCHGQDaoXqNT*=w2euCef9V ze#I|T^>4H1TOh}W_2BNs*1a*%pDG6jnqn?OzTkdu(r^e6^}^Mb`_cutLB_+D8=}&x zU=RDMoAJh5=91na!x6I-*y;Qww3RXS1Dq7Dm-*N+_Bl4b16{ z)aL>~98NQ&hXC7xb6RGq!t`=@%%9daH4<-0%(Sb*COlVg?g%=VoH8 zQ=kC-s%v1kV($4V97B{$1?L@=nD)D%wnAnzSW?cgAnSVBj2N|2=!>6KTolA`(rG8e|@ zlmuAtNguCzdxjjvZVBD9&y80J6l7b;QxR$bDLy-}S5Eu4m*w@s?jC69=D+==lq|t1 z<&cC*5yHziyl!yzFjordb3Go236xF{vZK85#QyRx4ryO0w z(iB8Eh%V&B7i90Yl7Eq);g8S?p21X$h3OILkrlZKQtL+{0k#>@^!S}FWEhW{1dX|3VX5=n*;&e=qS%e|P4ZaJ|8 zAj^fkOWdqQ0#c{s3jvl04GeoR`nX~zp`cVMgqj3RO*2Rggq(4$?E`xGVT+g!Xor~r3p zY6qZBoREgw$Rw^kGJ|kfLWdZs-s_Gp_yIwzY6>GPJVsLNG0cFc9lPg`= zq1ib^qKQq=lzDLImGCXwW?Ta(UbJ=}gPkafH>&lXI(l~S!3TG3)oz?>`A7-cDwrfh zc)D)yWQ5t0N^C%FAPt9}oNln4lIaLU`l6i*sFrcGxi9clf0tRrk70oBVj-&l#L4a|;A-T-xW$Jq5CI!Oa)@S+=4oqZJBP0-MV>PCIip_ zmy+K?v=Wb%~3p&2b4%z*NbU=rKgw`C4SVLL~2!C3>x4ZNpQxwI%S2f^~5Q>fD zXbnNgHqlN7^jbDK)EQ2%l%iBJKrgsPNm$$hN6r?SG2dl$Ioev=h@}OGAdRvlc>3a@ zF%C-M0f*HaJ9C6Q$iFnR*NrMpt)fp1khQBtJ=d!!NCl|LT4~e;R{>x)#F;f)kx zYFEvKR=hDL)w%P|I~m3*&@mXcJwYNO>V=r1j(x^?(SB3UZEe~uyH$9|LY%EF^2{JT z5ePPcQX&0OLuNR&6l3*o=V?8=X z{T$xKeTHfrZ%D4x(V)Q^{>fuwBFFj_Ayg9<(r~=CMOp1a3J&QGg5;;jX`i!Pmd9}M z#j!vXc;k#trIbt^p|uJ{5)pz)^xv@zvxQo;hMA;CrY<#O8)Q)dfZal+eCWjmveE2i zWNO9HX0FNaRTG1WAA(K}#g0zyOq;2D#$h)0bQm=_WC+F_Z(!W`Qy-PrUV%9RLcI!qo(P)Wx45dPJ36x?96eMVQ z*`A{D9Y4Bq*)3IE5e8cf)T{(0NF2 zV(^mygS(lnJu?Ue=CMt>5G0Z_K9V&IG?M|nYewQaN+Z1@qPLTa`t#GLm+Qc~YtgKd znquGmA~MD!1~ULTXl!p*Q;(64_(>j?^gVA%Tu z!9^IDt@^-FILHh;d8FPqnb-boCIIqY#u7_8P0WVoVQZ9{%gA2WiEiY+sgRUG_XexP zlhPUuVl;F(sSMz+L+mdPB$g3YFAe03oP&s%@sqZ|rDu+NyQ|d4(549>LCfK2u*b*@ z5EK&j=!KzN?LxFdE8ZM#%|tdE!7_|v3_};$piOL$5X4EAG-^dhn5stwNxc1}$ThzV z9HNEdAQmc^vbmS3BRUSDqYz7Vw8jv!XwhXtdE07PahiFvLqU5NoRtIj=FFx zNsxtMIx0H0d2PG7RFNA460d}0PX z$0wJy!U8r)O=dw*;&&gAx#$laa_4)iTkw`y;C6hAgvoW;j14rf`vm%HL3fgbs(L$0L^5KUwOXaiKfm$H2y)(Gy{H2+zs0*CpRUkU@yd0-?2)C(>F^Mp7-YfQE^NwuDDpG+FHNOW<`3 zEJ%SB??k=lk(t;cvkEPXTV1TNRm(W{hC~~MnfO#4!OCb>(Q5hE*%ZTcXRKaO{n<$* z=P?GR4fj+WTFNBp%PPdxS2v`42&$J7`c*t+Ot(Np6ps2ue6&M2vO)KN-h;@%YFT%5 z;S@8-qkp9%x#BXCfuegvm}ktvo?d^-i=rZhM6SiLK@`Pxee3iQdqHAe{(-R|;`LjdXZ38JO-T z>e3BI*vXR4aJoSYJHi0{-q()fdTfdG-eyI{4Lw=~wDodip`dC|z*vPndPI(%O>NlW zdk-A9eksHqtEx2x7)9uc1ZWj&tVMJod}{h=lM32_h45sm0!MO1lxDOpK5Y_H}gI-xJV-`X>I@3P#2+Io~0+? za;7(qYRztvhURe92v%~mByfvsiy0tVFpO_4VlP1vUn&T*$aPb>`|47biYjA9Sja)d zu#i;r%3*rz3rCD-Sj)AZl%zntEwNcR5HV6?59yPC=&0T|loN@r2`eRfVSoS|Td)?1 z37hVklGi(Ao3g5X^~K4vVpK<5y)F@|BixCyWr zkCB*U;3AwY=GEddGO+pB+93m2)e@}#8)UVT4>mDK@$az_;EJ3hl?0aI0r*&ehTX=u zvySb|n%>#UCErC9#8`=IV##i>3Z$P9zdN0{*$VMNAd1qIq8iz@b}EX9nYvgZfkh9e zgT8Cs+}5mg5h~?}V|Hi?mBSf;0WG}P#7!KcCH7Hk&=KcazZ;tJrpJrL$*8BN@f#xb zE?ri^(XV`IjXrGPuft)|9eA=V1vNr8j9QQh2~-VLR^cPLq9QeWwROu4;DliK6DGt% zczRHyhazpn;8toCg_dZ6N#{Z`hvNjJ*_OQuoO#e|fjS{;Vcapm!T_3_+8Cw|v7lF539<;_7D;<)ya1Z->V-4|hEl=&ChSMMciFK(8!hd1B5^ zW0~HFBl)-{Wzj`-Kt%2Lq^sg5iR}pu!a$8VOU8X??fv)PPkzQFZKg*JM7l39(OP;A z4Gl6$%F+OI?;3s=;Xz^WWejBqsUybwE?Ql~(g;YE81@*4!ldh$&{MW}B)YPz$H`Do zC}oreX~2NdM3@gPDN4NTcYvkn|iJZy|aS~l|;(u>j@A;Ib%lOF}qw1kMrwN@GW+rjBW@5&GWg&9Yc7{2#px-?=ll+cUs zU8q4UNVXo2jO=acb_Ns|;2?i`jSE&aV?=Q!W~8E3({7$V_=jFn7J-by1QO0%P#{{j zq#>j({HhEyRU-8wWJh&3qW2xhmOZ2@9a#r&xeKVe2E&3RCKAt^^!EeZVdMdM5&F)tz3!juSMt ziEn)AiUPyf?_U)f>}q){4R!|>DX|KwhB9(j_S2+RnN(7JS8kxhBNW#x+}I}kqC+f+ zaZ{QGFrgmA8PwyWn&@?jJt8gJy69mC3CdMb@AO}o9Zqt4z!F&glz9-xG6(h|MqCz# z<`lx07BvaJQ^20Af)TrWmk}H(L~nql!|27&o`ogdP!M1P#V~65au#A9KCQ9F8oehM zxDpO600gWq9msx$88AA~QPix9g_tDgc$Z3d+D#0gCd|-ajPhap!g29HAn`^8#`~hL z-Y3Bfb~|zA#Q*>el}SWFRBEB;uc#e<%PLX?H)a3|jhw}DwpT`Dq|u2Y%H{H*>jBLi zGECz&=w!JqTt+P9?qXuEDGIUXmiQBa=s8#<-grrlZzzL?T5oxL^n^HiHd~ff5QJ`7 z+o<-?+g1+fsTeyOHAuVG;M2Esky7XhQ;6%PHStsnMMAo0mR7flgZk7IREN_mJ7}<% zMzmG|R>BJ(TS(XrTk1*J)8+m%ut?zh}YT?*Y2IL1gsiwf?Q9Til1P^ zs~b~2c%mHO%AvMXldC#X>Ctu}%OYgxrA@{XrXe!wU7tY?r~_k??(WCMDs zXQ1y@hFwa;SH}3Mi9}i$U!*(?t>5Et&N91m52-J4dFm%sjM*qo*c4_1OjdzTQ`C;e zBChTrBjL!8%+{m6dW#W=M7?o)?;PigFbFCr1frKCw1hAWyNB3yy{ONC78Bwi%_Czn zq^0GZBgB3XbrSg2^cnPr6r7ioAQs>*1prs18y7%|p`4^w4#pjabidO8sx@a>Mxtpz zb5ptw1y=D>sKkTym_;{OgDXu_!T{|cZzFjO#po8Ia!4;2RE zeOeE`x1tDVZ(XEstiKqASA0E{flQJs_yh;18Z%Rd&Uq$>k9O|7iI7R#p{Zwu|{Jq#A#Nkgaa`< z_=XTn7ezaWJ=5*OK43L#nth}L^{@CM~Zu683()D&pWVozQnJBEl4`0x+GBY^{lh81;HZ& zd^DiR3&zXc9#J$P;If<{3`&E(6dFOHl=7bCJaViPP7$Fu8j;i8f_r89=yy<26iW^( zy#n0paz&Q~+~A}zz?yM7un`13J0v!&kxyORk=bGoi-u{ilTvid&bZtQJrGUcyI9XY zkS$%h6eaDWCgHmP_r_RiL!3d@n#t)8pP7VAwzQ58viC-rmOE*X$cvtflo{Y?r6cL3 z3Wy?#h##`cJP9NoVkso5FMJjI@dEuY;BIel@+-R7S^KgaWo1<>kWn~a&{r>pR}Ve( z5R|zIC1577^s`54KtxCwFIu3dG`2LSM?R2u%!7$e)dgnoVhqpp_5~3UW_xz-ryXVk zisOV6yyOZSWJ0Gl;tf(qjZ2EQa3#s@4mQMFpsSTIJ4ezP-A7Nc=^fExAmi0MF<^%l z$3@kKK~!i(wpeIx*Ai3&D^^ zz-lRXxy6&-#mi4d_PAy@OJoTW09|10&zM&9ZqWe%X&h3@gk*xkR@0}KgfL!qc4@lX zqe2BG{Adm{5(|vziYtoKL+$rsI@V&gkdV6OqBNzeMd$S1(zi|R(>{<{B{oD9jdUTM z^kszDEy$)iNfoe2wr0+1Tz09U)DE*bYuqEo-II_8G{Bx+5*}KWNF^6@1d*vuEyx{Q zdU0Ggf8>Oyiw(-~s^`F(z1(YjNGQ1$1NbsRf6|emAd{Mmh9ls_%$`!ps6-cJRv4sy zi{#_GAhk|kFRdX;y$q69cmM^CVF{aiB1pPGNA_SnZuJPO#FD8`P9GJE`gNa91<|rf zCI$v&s!Ypfkq2_hcY|TjsItOLoE_d>3j2$wP>G*P-xL{PqaTgqX3w7OJA3GyAc>z5 zfIkJvsVaDT>4y-?)O1@C!-Q+v7v_d0AZ?bT7W{;`;>2ud*x5ctf1)ddy}O(jlG9MX zOI2ba-Yv)ES791@J*%K1yX<7By&>Bwqgw2J;TQ_&o;^YK;>1KK<8`O}y_c(Xgq#t< zLj0Toi=QqLwriZd@UyAN0t2a>p%8SHxrSGytmQb^19}KD9kF^ixTh=ViYnV|G$_NU z2Zg)a%4~h10w`^7{XHC#l&uwnuUHEO6d~+}C-_Gy@WUa!myhvy({1S$?C9Pu6dinf9i17{JPX2mPQWr#!s8`TONfM!ZEBZ}yKt*DBziG76f~<6X`vU-`xWij(484= zqFwVTsg4q3yaG_A2b9vQ*V8yL?Lxghd-a-lv!TUW8QB7Nm?y5vGl9`ENkHWuSJz-~ zEHh~Lr=OY;jYIHcBJN|{8 zFRhZ>9cfWVD81rZ6Kf1i1lUhpYH>aO$Tq_$(1;>GdxMo&cFPZoZBdON(#oGu5U`f_ z?~x?zF|L7v9eOW4P>_Sgc5IV5yQAdp+vIDzNU|_*hBPoJR zEqlyz{psVolrXn_Sm^`=1JP+xa%MhBmO#-pIhpcb>Xq{3vKnB*jgwyGukW>drAsR~wp z*9TVA3N`UTZ5hFvRFbf%0T6z7Ib;s<;CzsacPCvl~grPwYS6#lvGE-{GH(BUBQ4$YnmsiSrJiHRG#%+Mp~t( zcu^W5>CP-Btcxe9%+m>309z#kqhT+e65 zH79`pg);KJ-5Fb(5R3r4Qu(C=v54&=injGYP^M*T(QJr!cnDsZ)xa)) ztrd@vg#Koz=`98l=$4j%z>dm&X+s7x@WgvYQW|1Aru5$q!S|3joY9mu~F$rM3vOSZ0d?cUoJ0hCmJz6ZCes%_s+{q7vsyc5=e4~L6P zz^zQOpE|oD7`U0UG1a<+2wBh?@M0g)QLZ_3x#mK-Gbl7S5gpJ@_q*+=smf$kIq8NU z|49`P&C|7Zu+y_rEzN+*=78AEX^=ht(Qzyk_hmI)QyWs$f@(1H0a~#|C z5}%O-@;dZmHeA(%VjK)8FwqID_Puf{^tbUOFv;A?fx?mQF2dcWoZ78T6~ z)(4^56|5)v>BvNaic=UFPr#X-BkyoL)Xu3&vrrz)Aq&bxgTTi#pvu{J+%PVD&%S{z zXi$tk#@23*8e*D7xT>Dob`7Lw6iK23!1VN5-YP8WY$X~j!DI|w57N%E2w$_|G||>k zOE_ahW@1EpROVm>N>)dKtGb)*ePFM^a-HTGS{gZ5f4W-jc8zrs}`Y3cP()N?6_!B)$+PlXHdx(hR z87H3WONjseShUC2+CKw<)NXqva#*IXPlTC)MCuk8%UG!1tt5dAT6ALz;;Xzs2H`3@ d5E}`ht^=9xPjfcE(F6bh002ovPDHLkV1jmV!h8S# literal 0 HcmV?d00001 diff --git a/test_streams.md b/test_streams.md index 3065261..e24a058 100644 --- a/test_streams.md +++ b/test_streams.md @@ -1,12 +1,28 @@ # Test streams (GStreamer command-line cheat sheet) -Display a test pattern: +### Display a test pattern ``` gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink ``` -Listen to a test audio (beep): +This should display the test pattern in a window, that looks a +bit like this: + +![Test pattern window](images/test-pattern.png "Test pattern window") + +There are multiple test patterns available, such as + +| `videotestsrc pattern=snow` | !(images/test_snow.png) | +| `videotestsrc pattern=red` (and blue and green) | !(images/test_red.png) | +| `videotestsrc pattern=red` (and blue and green) | !(images/test_red.png) | +| `videotestsrc pattern=pinwheel` | !(images/test_pinwheel.png) | +| `videotestsrc pattern=smpte100` (color test bars) | !(images/test_smpte100.png) | +| `videotestsrc pattern=colors` | !(images/test_colors.png) | + +For the full list of patterns, see https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-videotestsrc.html + +### Listen to a test audio (beep) ``` gst-launch-1.0 audiotestsrc ! audioconvert ! autoaudiosink