From 8d6ef00ff562a8fc8656a9cb2c940f18c85f8ecf Mon Sep 17 00:00:00 2001 From: Fabrice Quenneville Date: Sat, 21 Nov 2020 16:31:03 -0500 Subject: [PATCH] Added warnings to the documentation. Added the subsd resolution --- docs/_sources/usage/warnings.rst.txt | 34 ++++- docs/searchindex.js | 2 +- docs/usage/warnings.html | 20 +++ docsource/build/doctrees/environment.pickle | Bin 17200 -> 17300 bytes .../build/doctrees/usage/warnings.doctree | Bin 2275 -> 5282 bytes .../html/_sources/usage/warnings.rst.txt | 34 ++++- docsource/build/html/searchindex.js | 2 +- docsource/build/html/usage/warnings.html | 20 +++ .../_build/html/.doctrees/environment.pickle | Bin 14729 -> 17187 bytes .../_build/html/.doctrees/index.doctree | Bin 4972 -> 6105 bytes .../html/.doctrees/usage/errors.doctree | Bin 2790 -> 9236 bytes .../html/.doctrees/usage/manual.doctree | Bin 0 -> 4333 bytes .../html/.doctrees/usage/quickstart.doctree | Bin 2285 -> 4353 bytes .../html/.doctrees/usage/warnings.doctree | Bin 0 -> 2940 bytes .../source/_build/html/_sources/index.rst.txt | 24 ++- .../_build/html/_sources/usage/errors.rst.txt | 37 ++++- .../_build/html/_sources/usage/manual.rst.txt | 31 ++++ .../html/_sources/usage/quickstart.rst.txt | 31 +++- .../html/_sources/usage/warnings.rst.txt | 7 + docsource/source/_build/html/genindex.html | 2 + docsource/source/_build/html/index.html | 28 ++-- docsource/source/_build/html/objects.inv | Bin 334 -> 363 bytes docsource/source/_build/html/search.html | 2 + docsource/source/_build/html/searchindex.js | 2 +- .../source/_build/html/usage/errors.html | 45 +++++- .../source/_build/html/usage/manual.html | 140 ++++++++++++++++++ .../source/_build/html/usage/quickstart.html | 28 +++- .../source/_build/html/usage/warnings.html | 120 +++++++++++++++ docsource/source/usage/warnings.rst | 34 ++++- mediacurator/library/medialibrary.py | 10 +- mediacurator/library/video.py | 4 +- 31 files changed, 610 insertions(+), 47 deletions(-) create mode 100644 docsource/source/_build/html/.doctrees/usage/manual.doctree create mode 100644 docsource/source/_build/html/.doctrees/usage/warnings.doctree create mode 100644 docsource/source/_build/html/_sources/usage/manual.rst.txt create mode 100644 docsource/source/_build/html/_sources/usage/warnings.rst.txt create mode 100644 docsource/source/_build/html/usage/manual.html create mode 100644 docsource/source/_build/html/usage/warnings.html diff --git a/docs/_sources/usage/warnings.rst.txt b/docs/_sources/usage/warnings.rst.txt index e813fa6..c0d51fa 100644 --- a/docs/_sources/usage/warnings.rst.txt +++ b/docs/_sources/usage/warnings.rst.txt @@ -1,3 +1,35 @@ ======== Warnings -======== \ No newline at end of file +======== + +Before using the delete feature please run a few dry runs to get acquainted with MediaCurator as you it can irrirreparably damage your media library when not used properly. + +When using the -del flag here is the expected behavior: + +To delete all non-hd videos in a folder: + +.. code-block:: bash + + ./curator.py list -del -filters:lowres -dir/-files:"/mnt/media/" + +To delete all videos in a folder with encoding errors: + +.. code-block:: bash + + ./curator.py list -del -filters:fferror -dir/-files:"/mnt/media/" + +To convert (repair) then delete all videos in a folder with encoding errors: + +.. code-block:: bash + + ./curator.py convert -del -filters:fferror -dir/-files:"/mnt/media/" + +To delete all videos in a folder: + +.. code-block:: bash + + ./curator.py list -del -filters:lowres -dir/-files:"/mnt/media/" + +All these commands can have valuable use but are irrecoverable if done unintended. + +Again, please run a few dry runs until you are acquainted with MediaCurator. \ No newline at end of file diff --git a/docs/searchindex.js b/docs/searchindex.js index 1b96479..9b95b0d 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["index","usage/errors","usage/installation","usage/manual","usage/quickstart","usage/use_cases","usage/warnings"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,sphinx:56},filenames:["index.rst","usage/errors.rst","usage/installation.rst","usage/manual.rst","usage/quickstart.rst","usage/use_cases.rst","usage/warnings.rst"],objects:{},objnames:{},objtypes:{},terms:{"1080p":[3,4],"720p":[3,4],"case":0,"default":[3,4],"try":1,"while":1,For:2,The:0,Use:0,activ:1,after:1,again:1,all:0,also:1,ani:[3,4],audio:1,av1:[0,3,4],avi:[3,4],base:0,bash:[],batch:0,big:1,big_valu:1,bug:0,can:[0,1],chapter:1,clean:1,clone:2,code:0,codec:0,com:2,comma:[3,4],command:0,content:0,convert:[0,3,4],curat:[3,4],damag:1,databas:0,decod:1,del:[3,4],depend:1,detect:1,dir:[3,4],distribut:[1,2],don:1,doubl:[3,4],download:2,encod:0,error:0,exampl:[1,3,4],experi:1,extent:0,fabquennevil:2,face:1,failur:1,featur:1,feel:1,few:1,fferror:[3,4],ffmpeg:0,file:[3,4],filenam:[3,4],filter:[0,3,4],find:0,flv:[3,4],format:[3,4],found:[0,1],frame:1,free:1,from:0,git:2,github:[0,1],gnu:2,happen:1,header:1,here:1,http:2,index:[],inform:[0,1],instal:0,issu:0,its:1,latest:1,like:1,line:0,linux:2,list:[0,3,4],lowr:[3,4],m4v:[3,4],mai:1,manag:0,manual:0,media2:[3,4],media:[0,3,4],mediacur:[1,2],medlist:[3,4],miss:1,mkv:[3,4],mnt:[3,4],modern:0,modul:[],more:0,most:1,move:1,movi:[3,4],mp4:[3,4],mpeg4:[3,4],mpeg:[1,3,4],mpg:[3,4],multipl:[3,4],necessarli:1,next:1,now:2,occur:1,old:[1,3,4],onli:2,open:1,option:[1,3,4],other:0,out:[3,4],output:1,packag:2,page:[],pip:2,possibl:1,print:[1,3,4],project:1,python:0,quickstart:0,quit:1,raw:1,recod:0,recur:1,referenc:1,repair:0,report:1,repositori:1,requir:2,resolut:0,run:1,search:[],segfault:1,sei:1,separ:[3,4],serv:1,some:1,sourc:[0,1],step:1,suggest:1,take:1,thi:2,too:1,tool:0,track:1,txt:[2,3,4],type:1,uhd:[3,4],updat:1,use:[3,4],used:1,using:1,valu:[3,4],verbos:[1,3,4],veri:1,version:1,vid:[3,4],video:[0,1],want:1,warn:0,when:1,wich:1,without:0,wmv3:[3,4],wmv:[3,4],work:2,x264:[3,4],x265:[0,3,4],you:1,your:1},titles:["Welcome to MediaCurator\u2019s documentation!","Errors","Installation","Manual","Quickstart","Use cases","Warnings"],titleterms:{"case":5,Use:5,bug:1,document:0,encod:1,error:1,ffmpeg:[1,2],from:2,github:2,indic:[],instal:2,issu:1,manual:3,mediacur:0,other:1,quickstart:4,repair:1,tabl:[],warn:6,welcom:0}}) \ No newline at end of file +Search.setIndex({docnames:["index","usage/errors","usage/installation","usage/manual","usage/quickstart","usage/use_cases","usage/warnings"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,sphinx:56},filenames:["index.rst","usage/errors.rst","usage/installation.rst","usage/manual.rst","usage/quickstart.rst","usage/use_cases.rst","usage/warnings.rst"],objects:{},objnames:{},objtypes:{},terms:{"1080p":[3,4],"720p":[3,4],"case":0,"default":[3,4],"try":1,"while":1,For:2,The:0,Use:0,acquaint:6,activ:1,after:1,again:[1,6],all:[0,6],also:1,ani:[3,4],audio:1,av1:[0,3,4],avi:[3,4],base:0,bash:[],batch:0,befor:6,behavior:6,big:1,big_valu:1,bug:0,can:[0,1,6],chapter:1,clean:1,clone:2,code:0,codec:0,com:2,comma:[3,4],command:[0,6],content:0,convert:[0,3,4,6],curat:[3,4,6],damag:[1,6],databas:0,decod:1,del:[3,4,6],delet:6,depend:1,detect:1,dir:[3,4,6],distribut:[1,2],don:1,done:6,doubl:[3,4],download:2,dry:6,encod:[0,6],error:[0,6],exampl:[1,3,4],expect:6,experi:1,extent:0,fabquennevil:2,face:1,failur:1,featur:[1,6],feel:1,few:[1,6],fferror:[3,4,6],ffmpeg:0,file:[3,4,6],filenam:[3,4],filter:[0,3,4,6],find:0,flag:6,flv:[3,4],folder:6,format:[3,4],found:[0,1],frame:1,free:1,from:0,get:6,git:2,github:[0,1],gnu:2,happen:1,have:6,header:1,here:[1,6],http:2,index:[],inform:[0,1],instal:0,irrecover:6,irrirrepar:6,issu:0,its:1,latest:1,librari:6,like:1,line:0,linux:2,list:[0,3,4,6],lowr:[3,4,6],m4v:[3,4],mai:1,manag:0,manual:0,media2:[3,4],media:[0,3,4,6],mediacur:[1,2,6],medlist:[3,4],miss:1,mkv:[3,4],mnt:[3,4,6],modern:0,modul:[],more:0,most:1,move:1,movi:[3,4],mp4:[3,4],mpeg4:[3,4],mpeg:[1,3,4],mpg:[3,4],multipl:[3,4],necessarli:1,next:1,non:6,now:2,occur:1,old:[1,3,4],onli:2,open:1,option:[1,3,4],other:0,out:[3,4],output:1,packag:2,page:[],pip:2,pleas:6,possibl:1,print:[1,3,4],project:1,properli:6,python:0,quickstart:0,quit:1,raw:1,recod:0,recur:1,referenc:1,repair:[0,6],report:1,repositori:1,requir:2,resolut:0,run:[1,6],search:[],segfault:1,sei:1,separ:[3,4],serv:1,some:1,sourc:[0,1],step:1,suggest:1,take:1,thi:2,too:1,tool:0,track:1,txt:[2,3,4],type:1,uhd:[3,4],unintend:6,until:6,updat:1,use:[3,4,6],used:[1,6],using:[1,6],valu:[3,4],valuabl:6,verbos:[1,3,4],veri:1,version:1,vid:[3,4],video:[0,1,6],want:1,warn:0,when:[1,6],wich:1,without:0,wmv3:[3,4],wmv:[3,4],work:2,x264:[3,4],x265:[0,3,4],you:[1,6],your:[1,6]},titles:["Welcome to MediaCurator\u2019s documentation!","Errors","Installation","Manual","Quickstart","Use cases","Warnings"],titleterms:{"case":5,Use:5,bug:1,document:0,encod:1,error:1,ffmpeg:[1,2],from:2,github:2,indic:[],instal:2,issu:1,manual:3,mediacur:0,other:1,quickstart:4,repair:1,tabl:[],warn:6,welcom:0}}) \ No newline at end of file diff --git a/docs/usage/warnings.html b/docs/usage/warnings.html index 5591979..8d29e79 100644 --- a/docs/usage/warnings.html +++ b/docs/usage/warnings.html @@ -36,6 +36,26 @@

Warnings

+

Before using the delete feature please run a few dry runs to get acquainted with MediaCurator as you it can irrirreparably damage your media library when not used properly.

+

When using the -del flag here is the expected behavior:

+

To delete all non-hd videos in a folder:

+
./curator.py list -del -filters:lowres  -dir/-files:"/mnt/media/"
+
+
+

To delete all videos in a folder with encoding errors:

+
./curator.py list -del -filters:fferror  -dir/-files:"/mnt/media/"
+
+
+

To convert (repair) then delete all videos in a folder with encoding errors:

+
./curator.py convert -del -filters:fferror  -dir/-files:"/mnt/media/"
+
+
+

To delete all videos in a folder:

+
./curator.py list -del -filters:lowres  -dir/-files:"/mnt/media/"
+
+
+

All these commands can have valuable use but are irrecoverable if done unintended.

+

Again, please run a few dry runs until you are acquainted with MediaCurator.

diff --git a/docsource/build/doctrees/environment.pickle b/docsource/build/doctrees/environment.pickle index 6d4deb882f806794ee67146d83b131049bdc0bc2..f41433a20d3d36d46b981d6d9f1df0c21c43a279 100644 GIT binary patch literal 17300 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 literal 17200 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

Warnings

+

Before using the delete feature please run a few dry runs to get acquainted with MediaCurator as you it can irrirreparably damage your media library when not used properly.

+

When using the -del flag here is the expected behavior:

+

To delete all non-hd videos in a folder:

+
./curator.py list -del -filters:lowres  -dir/-files:"/mnt/media/"
+
+
+

To delete all videos in a folder with encoding errors:

+
./curator.py list -del -filters:fferror  -dir/-files:"/mnt/media/"
+
+
+

To convert (repair) then delete all videos in a folder with encoding errors:

+
./curator.py convert -del -filters:fferror  -dir/-files:"/mnt/media/"
+
+
+

To delete all videos in a folder:

+
./curator.py list -del -filters:lowres  -dir/-files:"/mnt/media/"
+
+
+

All these commands can have valuable use but are irrecoverable if done unintended.

+

Again, please run a few dry runs until you are acquainted with MediaCurator.

diff --git a/docsource/source/_build/html/.doctrees/environment.pickle b/docsource/source/_build/html/.doctrees/environment.pickle index 3857a1237e749f44a3369e4aaca3fc4eb86c25e6..48b9ae41beadfbdaff1dab43a3c293a596e1cab8 100644 GIT binary patch literal 17187 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 Q!5+|MIJy}QXj)zTe^H_m^8f$< delta 5189 zcmb_geQXp(6z_esrKNmUzOFzIXz_rf5DW$oN@+?dEmppaNC#Q2v4{~#*(ff`gKMEr_iq7vVm+3xOL?@E{SpP8MR zH^2Ah_ujmj+1L6!nRM~K;-k;594Jl&CQVe+LZ`T7k19oF#z_wSgR(1$29=j?dz z4EHEzFen~xAumC-(;&y8(o5EJdJY)2h}B6>g9v#W z3N<2-SD{8@&Oi;*U+2|XUcJGqH(8~U^H3A*EhyCpQLr(*8Rc6ncf#r&rZ@+nV=fG5Od}bF9Mc$#pJBM6-NC?I=H-fwNr?7D zLQtes(%{;^9Mnz^&uQ4jIH#;j)yos9WT!KNP|r~;SWuu(xnGb@!YIMDuy`g6SNAKa zs2P4Z(ogr*1eRxq5R1sNgp^h~Bt`6ku*?@}A$qZ9$%LGlw4!!;PTz5=hgYmdIdTdM z7JWXSi|FfLT(wJvsd~APjK))PQs@$mcngn5y-XH&i?BbUqRHP~5Op2d)H8p&#!UO0 zO(%aqm3P_XA2g*DXjEiTEI^KnZDnuo$!w9Ou+?P=Qp8Rp)J{JQOre|V0<@=Y<)ko> zM(VIwip4S?y->HmbOlmL&eQEnp3urUyH(f~A$JNaf&5o!zzY-eEt+SQ$s3c9%EWX~ zNXCMS5Wzf_wUIXDli((`F_T8JzhQfW!?hs}*DL2iu1EcgLH}Y?znPRO0iG*raia)$ z*lCy$0SjV1d}*#D2&2NWX`G%AU4(-f)!NvInn;LB2W~?%uz6&<2P2ZTv_HYh5v@#v zvmh(Yb~9dio+-39Mls^H7Cy+xyRZmOZyz(tMO0y$%$r7t9YN2z0R_A~5wx!WgvP{& zJ3wq#^%lUmCxq!Kc0T8LO0(|?qn#X_N4hg9kdMJ&?yUjeq7g|-`<|wyvzMF*td!A-`Csf1pj7`@(Hz@h(3c7)i zoEWz)%4c!PM>AW~@WL5oRu+I(U>Upkwz@Hw^JXkukjvW!Hz>|E+hNw^1|lm3d5Ul7yC?9i=u74~t$7_R_=S0$*BSE!IzxYMaR@NQ@*eF~KH8hUA0 zDyH(EHD7j?_lloZtb2IoH!zi4#o}8mzJubR(Pu;s8u}PI zsd2_C@)dN2NVc3_@hDqg5T1ErkDvFUZ(!q98}(!OieH zFE7Tge(G!7vg$HghDE%k&mccx>-t~|@d;M~V}D`mwmAlL(H9zxj+Ndg4@qj^7KnVr$FMI9|opxg1i=X4BT`1MG<&fB)?cbm8 zpY!|Hp9`tE)b+;$cT!K2Zl*ywt#R6bzz;?)2VVp^NO>QgV46;kI-ClN6Wu11oV+N& zGD*d%*Qu!yLpK=_mSx}eEzJ5Xa4o8)G9?cGBP0yw9d^yll(i71qo%sZf)Y z8L3(hHY8T0G@*-QPMI78AsTkEP^jUQIpsVKexXXs=N)F6Y(_T>R#>=n#!Ba!`N_Gs zKge<QI2NJqP3qVeo9=rNg=f z6xQQTA8Lziz{o}!QTpM&6!fFl-Abz#98ZM$n15&WP-|(g#bCI!pC;?sKF7xQNZ|tI zCax+w_$u%xx_0)i3B&l7aj4<*uCbn9;Wu~=f4~d))4$i{X8)3Wzo{n>02tHl8Vkfh{|$!i4B8iZu>l zZ*<5xo=T>raq2fGEiEqU5tzh`qxc=maPj91yWeEH^5GlQhY8wpjzgLToMlPX4Gzz! zA3f`4nQ$tJGw29fQY{ztoNnNAO2$wAMx`uRVI z7)T2I5Qwq^5EW#v$Ma8=TJ57l&-^PR!Fgt*uS~Qd$sW@vMnW- t@V5&mg;^9Pj>e_|LoE?8T&8$i3L+=%=xH0GA|f`xyps*3#uFv!{RPWoz^(uQ diff --git a/docsource/source/_build/html/.doctrees/usage/errors.doctree b/docsource/source/_build/html/.doctrees/usage/errors.doctree index 914009263408201d915a644fc47684869e3cfd9e..b6815763f65eaacca1a7d3df6d649c6aec226edf 100644 GIT binary patch literal 9236 zcmds7&5s;M7592~XFdDn^(P@~ht4J@OYEJslpsZs2?~*&7?TYc2atl*uIa9s?%w`# zclFM$A`62Qi1st&FLRDAKj<^p62p^9a&kxLy^Ckf9|{ajeJ!$ z6V^+kEU|bl_kqH4T;EQ3m|xB1B9RN%Pg}+FGby)(8->;5&a~5TX0GO|PE$?`SNOc| zmTa6)k|;@Yq5#3v6~0ZJtMS)zB?BfoA{#LSSCKo1oC#-AHVTwulb^+lUmn+fj_O(tgq>(Z^S;9n=tiu#qr1jz}OIeq%bERP`Ng?^kOH)}JdN!d7 z>n1FA`i=4Gg$qHKK}- zvE|x4dMvH(w~UKI&B**TGTPk8Qf?a}G7=s$Hz{Uq=@mFGZ+vVr+`jpvyO*L~@3Sy_ zOPhVeIZ2D_JcJc>3^>XP{vXBvXYs#^)p8zp&NwHW)39%&TrJpnPCIbzflK9peDJc; zp0)ixOKJm`mKa7-i}@`0eQ|s-$(hb+awTpPVy;zEu@`uP)y97s1rThT1u+SzJP51K zgb|R(S=!@_p6mNYoVcMdSZJ$Nj-xbn+x||uylwimRyxbmrE>oRPPL6*g3>RJZ=-T4 z=So|tkeO>|zR!i}y9lH*H`Pmvn4&u-!X@atEgxIC%sa4ZXu<2hcEzw977LyjB0;np zVI+)Bl!f++HcYh?j;%7%ae4ao&9}#z;r7j+amR|Q7XRp)$`A1Svc3!UzZ%89lywQjzZ^w8RMxqbFfuv`_P~et2>V_k>_G@y zQ4LD_9t8OPC;>`o4}ti1qlkw}yQ(9==mDH??4HHuNS<%7%ytV^T6HQ<8 z7}WCvi2j#RqL+Fe2J!o&h==NVbfxWf%`N6G; zD3MC}kAV2^qlkyfKhpAxm#`MS-XB(KB&PJ!Ha6|T`S-PE8$B&RR!0I%|2)S z;AR#~3J6-Eh9Tf)p}=s+jqsAvu)9X9y~;bQP28d{1#`#2TgZjp>FNn3)u#rq%%8rg zA~B=%Y!m|7Jm#SWt)T|3TRcfoEzpG#upL8z)DE+_5dq|u=+yAtO<*G4?Xb)jY0K!x z-5Ld{2Q?IO!%mb0jH(dCGAFnU;1pRvO{v03L9~VWF&-%-9iryYu-RZ8!UmSlSx91M zaWT?iuAe2ma?<}#qUuFdddNvp>Y`G0%cM}jUGFLxrl``JD1tR& z?g!FO+=FUW>KU*~o!#Za;0@T>h9JWdy_`~2`R*rW143tsn@eMq$tit%ZS4=H;)a5} zAz0Go{e^{m#2CGLTEVg|l?$0#{WZPX$l*nyTHY|K8%5<>iS2EXBoM5JZ#i47fSq5O zfK>`PkIU?n@s=u(J}Chz8`PU@Y25yevP?k_f&LY>w!^yyfB@dNKzFCQ>dNIT+`ZWd zN9`I2%661eKvMY~#d^DOEvLUKr$!CBXJtBwG7)EJ15vZ9j=dj~05o)5-XDI|>UoOQ zviJ5FrYTMN8JOs;G3ZB`@=I4JiFKJ9K5bkKjbI1ujhG`Bp)xPp9lFh7N8w|_2)V`6 zlqIT@ft~xKVB@p@^^|3TdhRY}LSJjIc!Qwzx3r?m-fzY*TWMwk^uHd1{v*wN=b-Q& z#+=>?O^ha430f&UO7J#-TNiYKS}TxaUjoxNupcQ%ITW1|4jh6`XJ1mtuAOx&Xxcwi zJL_K|H3a=Leccrkx*Gw)U~|U9YG+N51VZE5^R9RyYu8&x*A-6IZdp;V-eK+Q84p9gg|;0Z z>>X>n0u3mSTtzCldSB)2+k@{jBdp-xs`bz?(z7s7f++dy$73^?tf7tHr&~D!A^riL zV*m^9U!e0ce8|t2NaC*6upeHK;#u3<##g28Q}^l{yRb$>OVtN5>XAL@;@>1lfiAr7 z<3gbdE#94z2c?WMKb?XJ%eWdy8MCTTTT|g&=LCMy^Ntn*CG{ zPu6=j9je@UpRW#zoYSPxgj~dSLI+7^b$~Qqj_89Vc_8INpa8^q*rDoxtCK{bK>3Qp zsc)$EOO1{XZpdbrhg_Wl<+z|4AQkA|<6=&;LE}2y#N}*pnI%517DQy3bnrxX!EPFI zB|Eu1+=(KA?lkYad1*o}(CJ#31?D!DxWI;Tk-2VbuV@B~LoGAmsIW6a*Oo|XtT@;Wn6l7)x?NxP(x)}4=tm+h!Wu8Xb46Mnw>q4y8 z>$Tz?;Y6XXfBDurDAV;^9-}8{MtZ`;$qlS5VATT{Upsa7Ntk6Z=~%ni&`8bZM46@0 z48<|D%SA`Aq3Rkenu4_v0=97SO9$jhI8+-mg#tl(N6QGC3k&SFP z@*Hq{b&0@RN_RrRwoS+FIzIm4rc-_t!mH=gfFYi)X9(XEPaaX%`qK0xixn0;iL)p~ z3f5PL6;_P$kBO%@vlznA;kr68FT(wGI7wttd#jHB!;}%ytUXA##Dg}s5t2LLr@w1p3_l0#%E|y|6cVB#HV+XK31_Sd8g>(kM!{e`uHAw ze1|?BAd+MB(WH+CJ~G*)ndmS@o%O4^Hq<;DYK{%{{4MqDhI;N+<`_6bRt%ka#mzaV zSrHu8taj*^VnzF%V&&~q{1*BhN9nR)xyXxT4CtpvD7Z^HZM6OoO^25d;66b+@+)6d zq(^rRR@BXb8Ji_n_0Zvg`H`m+K^w!d-E$Rp&|N_4v2f@K$IIoM6#0%R}kW=K>NGTULF1$pUh2C(v sbaW8Qct68@U|$?|$ivmvP_B$}khyADMfNNmjsdB_*7*j3D3mAv0lNhnOaK4? delta 241 zcmbQ@@l2GpfpzL_u8piy85s{ue$S%Ltiz==S(Z&pUkS+YNKH&hEmFwMEH2K>O9zPr zyLu{=R2HOy*m?O1X+?>-sfr-ZWNA({W*}qoeoiT7v7S4V^;xx rkl~nNSKPyy2XqU_ZN*b+r(`(#6=x^_X}b)b;?0(d?2MCdDq8~p*Lve+OLR)`&CE)YUUQE1BDWmjpc zyPB$M+as|kT&%P~b+^r3&^`?>k|*F1_^SVG4@%H#FTs-Su2ZMZId$qgU!Qu_`TN_$ zt@2|JbjEnP9FaIqWlVKpcVijl2~AD$Rq?~W7M~XnZBLPfmbr>(VYi?WF)m_7)8b`e z2Tt8^p-1)l9Ze&{W!f%h9oA(#FN=q)XFG-)LD!~i_c=*(A_}Jgg#a)Z6N*tdDCU7S0SAX-C+=T1tJ z>S;I5v(;ciqDw`mPA9iJhRobl!4BAcw&y&uWBW;vq$XHMbvdDF#DeEE=Hywfh>;YevjesaE@Pq5E@!3|YJgcBj7%e933e(%QC)+mT7lcVg)dm*?s zek9X5RpzDlVi;5LvhU&ZV#w1mNw0h|=YDcI_ZP|BPqG=lXMS=v_org+&w1QvPq~0o zJ)TafQd0R+#J-RVMYYdj|EEtLXZ}ZzKgMs4VUkg2h|bRZ<&&SBIom&SKaDY&n=yO_ z&KDGZ9FX}(&0MBhYSXzU~UiPW@FiMa}f2#D(OgEFUy%VhAt_t%C`f(Jl_ zL&k^y&&&0^tSX}mfQ|ru_FW*Jc}SN_+xPJO0lp7`_}(%RW1SIK!Mhm_oT@ndF4|PdqiezjJ$o8|- zQ<(RXTo|4S>XnD>LE;|DqVsZ1y;$ZG%tkUvh^MJD1-N)~B66xdhlkVCh8?=vD4EXI zys%$Y@UWkKdtYx~z486Gul`YNX7>DjnRQ9|HInh^e^Yu^XKt{TxnEZN$~yLgm`({2 z<;l!(r}jW};~M$zm|O+I=A;&!kV?~9iGjD5nMzGgqKLCJoxiNd3`9jtQM`*cYX08Y0FT$8N4 z{{@Tx{LQoWoi(4Uto>_)u^sVwZT`TrUY)dt480-fZ@fl(-qWYvXcT}0-P(~^n*N5x zn*Fhkik0P(oxSpSK)#OkE5mC{5j>Z3PId6$efHd2#JxeX+4Vph*8Y!xo1_2V+xQAW z4!?i@c^_g#aT=1I78m4pgfO2P#6Rb`Sear+{?FXcunc8es1#8c7w0G0gxDxB=xL30=_E6njKEcpRebnDS-8 zx^_TvBg2)*-sC{kew-&+*rEiv=2a!(=*=Y8J$F9zatEg}vuiIE!vYXei!Ws2bO! z(QNqr$7e{(Kux1-Zk%N0=D2ZVq{KChQ!_2yFp~(l=ovBr{$s<6^IdxaG$mnMSZ(-W z)f~RIAC}SZ6dj`5IY8@j6a&S#aSLpRsJcUal^U`P+eQ(+qj24s-O~v{G5sk=?P{#N zTaK$?i2Dw~%h_e{Bx30HBAjnkQ#dh4J|R|L<{8>jceyNYjCHNQ21sPY(K)Q#LSxk96?`#D4XoXZgd~?CO$ZkuF1%=i-G%T=yG_%%yFJ?7iUv@3KoL*z zl7{WjpaG_!6-0aoj(`e-8!vK$rp-0R_Gm*|-6tW2wP`!(I`rcz3i*x`R?qBf_D0*D z6PT+E!F*n@uP-$7@c)MGX}iCERORaZh=YcldswU_uACaZD$I3BrH9~gV97*^_Vi2D z53UJY?cRpPUgNb~bhKd~w5W{Z;d|F@)iYbRk7AEx?n=3^w<9S85{o^6?RTEl@~^P@ pFN)s)@wfw^hHyo9*XPP%Tk{*@+pV}fvVQDnsIFM|YRo62e*^2vS)2d> literal 0 HcmV?d00001 diff --git a/docsource/source/_build/html/.doctrees/usage/quickstart.doctree b/docsource/source/_build/html/.doctrees/usage/quickstart.doctree index ccbf2a6a7b74e5c50e4d606e1a7ec76762763d0d..f0448a6b05b3c65b53f4aeaafc504a0204f94495 100644 GIT binary patch literal 4353 zcmeHKTaO$^6<&KivpeIxc^yYW-bF2oAhYh7cFY3N2#g{VA+pL!AcT-C)6{g=OqI5} zt5a1yGb<5f9wNo4-qO4o<=5~>@(Xz4nXmdb7i6O-kFe70Or1J)&Z$%1IrY`c&forZ zv{nAuL!B|6E`}tIQyEiT*xgu0c|ucDd|CY9FU4oYL)%kiu4S$wTG%aUM2w4A(X@C` z*aN3-xX{CT{f?%Q;WBNPvkvRBofpMJ*0UYMji4)2w*Tv#M_1YqWeTSSrCYzH3+H`p z?(?FI1;*~$Zbsl8`ghn3wr#t0Y?tep_ZXUoBuL|2MVoK9|c44JyAf*rE^Y|nXQC-%c2Nlh@9>S|2Why|a}n3HF@ zB1WnJDXBsV>aSdrDGfetcRExW(Vt#y=VR=5UvNVe5#dbpIM- zGB+dm44f}0{3sx^_nWy)@zjjUxF=F2#L(DB^kb=MqY`r!3=k02qX%VP6PL~4f$y&j zp9Bwp4u_C;|DTu5yezAu3y=;`0PMR!J@b$*m$vWW^L>0C0`&(2`pOLAd&Ca6~)wg-v(Q5K$;YwE=^A7eI>NkTkLohiV@n-P&y?KwQ0oi$ye ztBsQBbj1t%Wd#rW@wfN&^~=}3|Mkni7weh5cw1&&QhtSGeDvRxp4FKf@()#yx@4!W6TT4$F5D)Pqm@VoZ6uHCp3-;4 zS$2#5pf2^Y%=?37aW?^eqczL89c;zhqGdm2KVwf{v7gtVWFM}h@OWhh%Ut$8T95>Q z(`^D*Bunpq#^OJH^Q?Vm#pg0>|6J?XuJL(o{?KK;I%!Qa^af~uqm{PjJ$>p8hXHz^ zTRSuh(_gb#cYmy-VrjYT&R%&uXuhuNSB6(QMevE7ajJs{Z?ora5qE=R)6GDeuKgbY zH%I@!xA7%{9De`$ZSZ@4i6z>WtnDv3LqVEOz9Fsqx+~{CjBHmpE?YDB#hdHD z6&S?m=iquthQaO1O$ggp820O7t^`K=Mn<9IVQv=gI*3bM7xs7}rAeisE0Y&D?7kzN zX`X}&S5^fi2e=-17P_khOEpa1uOw8^QWDO&VPV4t;jvy&)5A-6fI;VjRjT6vkNscg*`+!UboUItrYfjV`jqy`-eTKj4lIc zmY%FnY^=0LZUY)wV#tpuS;T(B7?AE5wBaV62KKI^kyLRQ(+uE%8?+uIp^Nr4!5)zg z9*3YG6TT=|*B+4E$Z#pLH#rcsALmIHwx~l^O92=qRVfk9;9)62YE$jbeksZ{&0`sY z?Lg~@E;2CAaCKz~k;sHIu6c#e!!YKWfP!Enb(A|zHLyo^51Y}zKPlfgfK06xmUO0k z4P`V7u_uZ;ipu@&ISFVK4IQwp$BfDJC84c>cvj`6 zj=CxSW7iIJK3>;5qRE)XsK;ygVw4(KyB7&bu0om+Egc#N)?V#(>k7p_5J5E^r zW?!+_+V-5lTxSU8vx0qfshNlG*KAMQ{neu?SMNt0ZOFNY#Y*DJsnM&#T$NOM2p$KP zjHPH#zf^r^L)dEf)-3iKujQiSHT%_r9*DTNX{(;uvV9bLBy(5Fg}og~A&^+?0o{J* uSuOt(oBzD{4G@pF0BQ)&b@!C69JV#TCcfQ@%OmT@t_{@{>#oLpJp4Do@M6UP delta 89 zcmZovdMn7 diff --git a/docsource/source/_build/html/.doctrees/usage/warnings.doctree b/docsource/source/_build/html/.doctrees/usage/warnings.doctree new file mode 100644 index 0000000000000000000000000000000000000000..20bb0dee5c51ec0c1b865d93b5479044922c044b GIT binary patch literal 2940 zcmdT`TW=gS6mFYtb~l$z($c;(K_djHP_o+xBv6GwqK_%5gb;l~mS^l;TbZ$^zGQbF zD#1ggR`OfTzu-smd1kMXcz`#ejCOo%pUZc?bLRZs`SbPut>!Nr*;+_78&bxUX57Zm zW4iDaS1x{tU;Gi@#K)m;=+tU&3Le8PoG64Wnc*t_7Q-MNce1p@#r>}3g_ByXu8WS? z72V(BW6=*CCtb-mwnFa}HAV+;zZmQJ7IU> z*JZd{O2y-)&uQ4B&Ka3|hj^0zJCfPtYquz=wGiUHqiEH>^_Z{Mi<}l$hL6)3AG(fC z(pD5l;*mH=7R71!VN@wMnrd^Eb5)4ZPn=2m+#Bk&83B&grP1QYTRP#R=_1OZvGD!u zV#nu*wU1!v#L!x7Lh{#-e5?)6yag_q6Fg(Q1@JXMvK>;O654qrqYRQ)5DC~Y_5GKT~<()Nn`NOlOuUK&ls)XZaQGHD#ewRGB*_Z zr-G|YX$QBUwl=!vrkoGkv^@;}FQ?axdWysj+r(aqvqT^9F*qYKkns~dpW^u(&tvdG zd?~&Xr{W3n*IDubc|32+M0CP8uM$Y>yqzO)*|?;WOmO5)B0ln4!6@2+ zqg9Q?ertw6_Z60Vi={UuR)NUuGV|y|LB~1;95pFK&m!)bEt9$P7hW zMMwq~-KQpnu2LJdQ2D5ppo$v_NkvJP%?K737Z%;=G8~{FwQ;26*Sw4ucfy{al|wtQ%R`;eVLbN}m>Vq8h7*R<3X;AvwBRYI_$~~js=XuVU77*W82a9g&%Zsl z67Q$mn}i#q4G~nak{jThTrFG-N7}n>EuBV73}-iXZm1AG3|ggY2bNb)w>NIw496(| z3zP)#DG^W%hb2`LkCp|v8P<33RSNeFFSKEV@fzfS83|@whTTG|F=7N9l93u+Ue2P} z4Fl?(CTmf+Bf+Rc=Bt{lSO-)aLF%eT(K0DKY9xSG*_8XWsJ7fQO=eZ%(=qB@TTV7_ zHWVowxt3PqtC4gOCM{ZU3S{ABcUcYMNjN|-7W}8prxlc093x{{wx6*<&1-^~&}dZA z#Cwn=IldGm5j$kUx!OJ(ji%G-u%0`i)li$si1F(YPTEln57LdKG2I}JS3ubT)gI*M zpFRB=unf$&xM3zq)@DwZW}McT3M6;q#*A=P2@`!sbMT)z5ife-3~Z{%s<2k>6I-YB zz7G!@Z=|x^q{u#Oe;sHnRmO9bM?!K@wd^HAbqJ#eXlg1MBnc zbH}{OIYT|pVM}oCpzT3XYI;R@MP*4ae;MA)Chx)ySJ!Ef3B9%rpzgpTsh9+>9dXp) z8{Z5uColw7I1FIGhNZFP4I0&!v>k0AhPLr)v76YBsR;6J61MN+rFdaOKMCBt23T*R zczJ0>hTj+Bz=p%kR5iB`3yC(A%tK=HA i2sMOhF->x`_ + .. toctree:: :maxdepth: 2 :caption: Contents: + usage/warnings usage/installation usage/quickstart + usage/manual usage/use_cases usage/errors +.. Indices and tables +.. ================== - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` +.. * :ref:`genindex` +.. * :ref:`modindex` +.. * :ref:`search` diff --git a/docsource/source/_build/html/_sources/usage/errors.rst.txt b/docsource/source/_build/html/_sources/usage/errors.rst.txt index c27ea6c..fa479e7 100644 --- a/docsource/source/_build/html/_sources/usage/errors.rst.txt +++ b/docsource/source/_build/html/_sources/usage/errors.rst.txt @@ -3,12 +3,35 @@ Errors ====== +FFmpeg can detect quite a few errors in the encoding of your source video's encoding. It can also be used to repair errors. + +Repairable encoding errors +-------------------------- + +Here are some example errors that mediacurator will print and can possibly repair by re-encoding: + +* "Referenced QT chapter track not found" +* "Error, header damaged or not MPEG-4 header" +* "Header missing" +* "SEI type" +* "no frame!" +* "Error while decoding MPEG audio frame." +* "big_values too big" +* ... + +FFmpeg issues +------------- + +While using FFmpeg depending on your version you may also face other errors like segfaults. MediaCurator will also print information when that occurs and move on to the next video after cleaning up after failure. + +If that happens there are a few steps you can take: -"Referenced QT chapter track not found", -"Error, header damaged or not MPEG-4 header", -"Header missing", -"SEI type", -"no frame!", -"Error while decoding MPEG audio frame.", -"big_values too big" \ No newline at end of file +* `Update FFmpeg `_ to its latest version as it is a very active project and most distributions serve old versions in their repositories +* Run MediaCurator with the verbose print option wich will print the raw FFmpeg output +* Try again: In my experience some errors don't necessarly recur... + +Other bugs +---------- + +If you face other bugs, issues or want to suggest features feel free to open a bug report on `GitHub `_ \ No newline at end of file diff --git a/docsource/source/_build/html/_sources/usage/manual.rst.txt b/docsource/source/_build/html/_sources/usage/manual.rst.txt new file mode 100644 index 0000000..cb3979f --- /dev/null +++ b/docsource/source/_build/html/_sources/usage/manual.rst.txt @@ -0,0 +1,31 @@ +====== +Manual +====== + +.. code-block:: bash + + ./curator.py [list,convert] [-del] + [-in:any,avi,mkv,wmv,mpg,mp4,m4v,flv,vid] + [-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv] + [-out:mkv/mp4,x265/av1] + [-print:list,formated,verbose] + [-dir/-files:"/mnt/media/",,"/mnt/media2/"] + +**for multiple files or filenames use double comma separated values ",,"** + +default options are: + +.. code-block:: bash + + -in:any + -filters: + -out:mkv,x265 + -print:list + +Examples: + +.. code-block:: bash + + ./curator.py list -filters:old -print:formated -dir:/mnt/media/ >> ../medlist.txt + ./curator.py convert -del -filters:mpeg4 -out:av1,mp4 -dir:"/mnt/media/Movies/" + ./curator.py convert -del -in:avi,mpg -print:formated,verbose -dir:/mnt/media/ diff --git a/docsource/source/_build/html/_sources/usage/quickstart.rst.txt b/docsource/source/_build/html/_sources/usage/quickstart.rst.txt index f41ce4b..120587c 100644 --- a/docsource/source/_build/html/_sources/usage/quickstart.rst.txt +++ b/docsource/source/_build/html/_sources/usage/quickstart.rst.txt @@ -1,4 +1,31 @@ - ========== Quickstart -========== \ No newline at end of file +========== + +.. code-block:: bash + + ./curator.py [list,convert] [-del] + [-in:any,avi,mkv,wmv,mpg,mp4,m4v,flv,vid] + [-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv] + [-out:mkv/mp4,x265/av1] + [-print:list,formated,verbose] + [-dir/-files:"/mnt/media/",,"/mnt/media2/"] + +**for multiple files or filenames use double comma separated values ",,"** + +default options are: + +.. code-block:: bash + + -in:any + -filters: + -out:mkv,x265 + -print:list + +Examples: + +.. code-block:: bash + + ./curator.py list -filters:old -print:formated -dir:/mnt/media/ >> ../medlist.txt + ./curator.py convert -del -filters:mpeg4 -out:av1,mp4 -dir:"/mnt/media/Movies/" + ./curator.py convert -del -in:avi,mpg -print:formated,verbose -dir:/mnt/media/ diff --git a/docsource/source/_build/html/_sources/usage/warnings.rst.txt b/docsource/source/_build/html/_sources/usage/warnings.rst.txt new file mode 100644 index 0000000..4b29656 --- /dev/null +++ b/docsource/source/_build/html/_sources/usage/warnings.rst.txt @@ -0,0 +1,7 @@ +======== +Warnings +======== + +Before using the delete feature please run a few dry runs to get acquainted with MediaCurator as you it can irrirreparably damage your media library when not used properly. + +When using the -del flag here is the expected behavior: diff --git a/docsource/source/_build/html/genindex.html b/docsource/source/_build/html/genindex.html index d22fdb9..e2d8fe9 100644 --- a/docsource/source/_build/html/genindex.html +++ b/docsource/source/_build/html/genindex.html @@ -61,8 +61,10 @@

Navigation

Contents:

diff --git a/docsource/source/_build/html/index.html b/docsource/source/_build/html/index.html index ddd2802..b0bbf4f 100644 --- a/docsource/source/_build/html/index.html +++ b/docsource/source/_build/html/index.html @@ -16,7 +16,7 @@ - + @@ -35,25 +35,31 @@

Welcome to MediaCurator’s documentation!

+

MediaCurator is a Python command line tool to manage a media database.

+
    +
  • List all the video’s and their information with or without filters

  • +
  • Batch find and repair/convert videos with encoding errors

  • +
  • Batch recode videos to more modern codecs (x265 / AV1) based on filters: extentions, codecs, resolutions …

  • +
+

The source code can be found on GitHub

-
-

Indices and tables

-
@@ -80,8 +86,10 @@

Navigation

Contents:

@@ -90,7 +98,7 @@

Related Topics

diff --git a/docsource/source/_build/html/objects.inv b/docsource/source/_build/html/objects.inv index 6dc8c73005f8b4226aa2666ee8a2206d68ee0e07..4aa79d893fa12e3bb071285f7e3166ad04004bfa 100644 GIT binary patch delta 248 zcmVG%9Ys;|x-0|VO_?iwG>!oaW7YBWm6O*Gk|jB&2qf3WR|yBKb1LP)y1 z1&dagx8iT1#U@k#K43~QQN3%e7wUP41+ak_oEui0W3@Y8bW)^+hmgU|;iAh?hFE~_ yZ1rc~Ch;7ayaK*nbAdDAy9UCAC9hUNcZ6z4g*-s&|39F{8dR>(ebNNdtLhVsT4XlS zU&#`RK8mErIB+#RCG>xFUumX7d05 diff --git a/docsource/source/_build/html/search.html b/docsource/source/_build/html/search.html index cb71970..10a304c 100644 --- a/docsource/source/_build/html/search.html +++ b/docsource/source/_build/html/search.html @@ -80,8 +80,10 @@

Navigation

Contents:

diff --git a/docsource/source/_build/html/searchindex.js b/docsource/source/_build/html/searchindex.js index f6b4f4a..2699089 100644 --- a/docsource/source/_build/html/searchindex.js +++ b/docsource/source/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["index","usage/errors","usage/installation","usage/quickstart","usage/use_cases"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,sphinx:56},filenames:["index.rst","usage/errors.rst","usage/installation.rst","usage/quickstart.rst","usage/use_cases.rst"],objects:{},objnames:{},objtypes:{},terms:{"case":0,"while":1,For:2,Use:0,audio:1,big:1,big_valu:1,chapter:1,clone:2,com:2,content:0,damag:1,decod:1,distribut:2,download:2,error:0,fabquennevil:2,ffmpeg:0,found:1,frame:1,from:0,git:2,github:0,gnu:2,header:1,http:2,index:0,instal:0,linux:2,mediacur:2,miss:1,modul:0,mpeg:1,now:2,onli:2,packag:2,page:0,pip:2,quickstart:0,referenc:1,requir:2,search:0,sei:1,thi:2,too:1,track:1,txt:2,type:1,work:2},titles:["Welcome to MediaCurator\u2019s documentation!","Errors","Installation","Quickstart","Use cases"],titleterms:{"case":4,For:[],Use:4,distribut:[],document:0,download:[],error:1,ffmpeg:2,from:2,github:2,gnu:[],indic:0,instal:2,linux:[],mediacur:0,now:[],onli:[],packag:[],quickstart:3,requir:[],tabl:0,thi:[],welcom:0,work:[]}}) \ No newline at end of file +Search.setIndex({docnames:["index","usage/errors","usage/installation","usage/manual","usage/quickstart","usage/use_cases","usage/warnings"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,sphinx:56},filenames:["index.rst","usage/errors.rst","usage/installation.rst","usage/manual.rst","usage/quickstart.rst","usage/use_cases.rst","usage/warnings.rst"],objects:{},objnames:{},objtypes:{},terms:{"1080p":[3,4],"720p":[3,4],"case":0,"default":[3,4],"try":1,"while":1,For:2,The:0,Use:0,acquaint:6,activ:1,after:1,again:1,all:0,also:1,ani:[3,4],audio:1,av1:[0,3,4],avi:[3,4],base:0,batch:0,befor:6,behavior:6,big:1,big_valu:1,bug:0,can:[0,1,6],chapter:1,clean:1,clone:2,code:0,codec:0,com:2,comma:[3,4],command:0,content:0,convert:[0,3,4],curat:[3,4],damag:[1,6],databas:0,decod:1,del:[3,4,6],delet:6,depend:1,detect:1,dir:[3,4],distribut:[1,2],don:1,doubl:[3,4],download:2,dry:6,encod:0,error:0,exampl:[1,3,4],expect:6,experi:1,extent:0,fabquennevil:2,face:1,failur:1,featur:[1,6],feel:1,few:[1,6],fferror:[3,4],ffmpeg:0,file:[3,4],filenam:[3,4],filter:[0,3,4],find:0,flag:6,flv:[3,4],format:[3,4],found:[0,1],frame:1,free:1,from:0,get:6,git:2,github:[0,1],gnu:2,happen:1,header:1,here:[1,6],http:2,index:[],inform:[0,1],instal:0,irrirrepar:6,issu:0,its:1,latest:1,librari:6,like:1,line:0,linux:2,list:[0,3,4],lowr:[3,4],m4v:[3,4],mai:1,manag:0,manual:0,media2:[3,4],media:[0,3,4,6],mediacur:[1,2,6],medlist:[3,4],miss:1,mkv:[3,4],mnt:[3,4],modern:0,modul:[],more:0,most:1,move:1,movi:[3,4],mp4:[3,4],mpeg4:[3,4],mpeg:[1,3,4],mpg:[3,4],multipl:[3,4],necessarli:1,next:1,now:2,occur:1,old:[1,3,4],onli:2,open:1,option:[1,3,4],other:0,out:[3,4],output:1,packag:2,page:[],pip:2,pleas:6,possibl:1,print:[1,3,4],project:1,properli:6,python:0,quickstart:0,quit:1,raw:1,recod:0,recur:1,referenc:1,repair:0,report:1,repositori:1,requir:2,resolut:0,run:[1,6],search:[],segfault:1,sei:1,separ:[3,4],serv:1,some:1,sourc:[0,1],step:1,suggest:1,take:1,thi:2,too:1,tool:0,track:1,txt:[2,3,4],type:1,uhd:[3,4],updat:1,use:[3,4],used:[1,6],using:[1,6],valu:[3,4],verbos:[1,3,4],veri:1,version:1,vid:[3,4],video:[0,1],want:1,warn:0,when:[1,6],wich:1,without:0,wmv3:[3,4],wmv:[3,4],work:2,x264:[3,4],x265:[0,3,4],you:[1,6],your:[1,6]},titles:["Welcome to MediaCurator\u2019s documentation!","Errors","Installation","Manual","Quickstart","Use cases","Warnings"],titleterms:{"case":5,For:[],Use:5,bug:1,distribut:[],document:0,download:[],encod:1,error:1,ffmpeg:[1,2],from:2,github:2,gnu:[],indic:[],instal:2,issu:1,linux:[],manual:3,mediacur:0,now:[],onli:[],other:1,packag:[],quickstart:4,repair:1,requir:[],tabl:[],thi:[],warn:6,welcom:0,work:[]}}) \ No newline at end of file diff --git a/docsource/source/_build/html/usage/errors.html b/docsource/source/_build/html/usage/errors.html index e5993e4..1d230c6 100644 --- a/docsource/source/_build/html/usage/errors.html +++ b/docsource/source/_build/html/usage/errors.html @@ -35,13 +35,35 @@

Errors

-

“Referenced QT chapter track not found”, -“Error, header damaged or not MPEG-4 header”, -“Header missing”, -“SEI type”, -“no frame!”, -“Error while decoding MPEG audio frame.”, -“big_values too big”

+

FFmpeg can detect quite a few errors in the encoding of your source video’s encoding. It can also be used to repair errors.

+
+

Repairable encoding errors

+

Here are some example errors that mediacurator will print and can possibly repair by re-encoding:

+
    +
  • “Referenced QT chapter track not found”

  • +
  • “Error, header damaged or not MPEG-4 header”

  • +
  • “Header missing”

  • +
  • “SEI type”

  • +
  • “no frame!”

  • +
  • “Error while decoding MPEG audio frame.”

  • +
  • “big_values too big”

  • +
  • +
+
+
+

FFmpeg issues

+

While using FFmpeg depending on your version you may also face other errors like segfaults. MediaCurator will also print information when that occurs and move on to the next video after cleaning up after failure.

+

If that happens there are a few steps you can take:

+
    +
  • Update FFmpeg to its latest version as it is a very active project and most distributions serve old versions in their repositories

  • +
  • Run MediaCurator with the verbose print option wich will print the raw FFmpeg output

  • +
  • Try again: In my experience some errors don’t necessarly recur…

  • +
+
+
+

Other bugs

+

If you face other bugs, issues or want to suggest features feel free to open a bug report on GitHub

+
@@ -66,10 +88,17 @@

Navigation

Contents:

diff --git a/docsource/source/_build/html/usage/manual.html b/docsource/source/_build/html/usage/manual.html new file mode 100644 index 0000000..ee4728b --- /dev/null +++ b/docsource/source/_build/html/usage/manual.html @@ -0,0 +1,140 @@ + + + + + + + + Manual — MediaCurator documentation + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Manual

+
./curator.py [list,convert] [-del]
+    [-in:any,avi,mkv,wmv,mpg,mp4,m4v,flv,vid]
+    [-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv]
+    [-out:mkv/mp4,x265/av1]
+    [-print:list,formated,verbose]
+    [-dir/-files:"/mnt/media/",,"/mnt/media2/"]
+
+
+

for multiple files or filenames use double comma separated values “,,”

+

default options are:

+
-in:any
+-filters:
+-out:mkv,x265
+-print:list
+
+
+

Examples:

+
./curator.py list -filters:old -print:formated -dir:/mnt/media/ >> ../medlist.txt
+./curator.py convert -del -filters:mpeg4 -out:av1,mp4 -dir:"/mnt/media/Movies/"
+./curator.py convert -del -in:avi,mpg -print:formated,verbose -dir:/mnt/media/
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docsource/source/_build/html/usage/quickstart.html b/docsource/source/_build/html/usage/quickstart.html index 294f664..a26bedb 100644 --- a/docsource/source/_build/html/usage/quickstart.html +++ b/docsource/source/_build/html/usage/quickstart.html @@ -16,7 +16,7 @@ - + @@ -36,6 +36,28 @@

Quickstart

+
./curator.py [list,convert] [-del]
+    [-in:any,avi,mkv,wmv,mpg,mp4,m4v,flv,vid]
+    [-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv]
+    [-out:mkv/mp4,x265/av1]
+    [-print:list,formated,verbose]
+    [-dir/-files:"/mnt/media/",,"/mnt/media2/"]
+
+
+

for multiple files or filenames use double comma separated values “,,”

+

default options are:

+
-in:any
+-filters:
+-out:mkv,x265
+-print:list
+
+
+

Examples:

+
./curator.py list -filters:old -print:formated -dir:/mnt/media/ >> ../medlist.txt
+./curator.py convert -del -filters:mpeg4 -out:av1,mp4 -dir:"/mnt/media/Movies/"
+./curator.py convert -del -in:avi,mpg -print:formated,verbose -dir:/mnt/media/
+
+
@@ -60,8 +82,10 @@

Navigation

Contents:

@@ -71,7 +95,7 @@
diff --git a/docsource/source/_build/html/usage/warnings.html b/docsource/source/_build/html/usage/warnings.html new file mode 100644 index 0000000..a6f27de --- /dev/null +++ b/docsource/source/_build/html/usage/warnings.html @@ -0,0 +1,120 @@ + + + + + + + + Warnings — MediaCurator documentation + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Warnings

+

Before using the delete feature please run a few dry runs to get acquainted with MediaCurator as you it can irrirreparably damage your media library when not used properly.

+

When using the -del flag here is the expected behavior:

+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docsource/source/usage/warnings.rst b/docsource/source/usage/warnings.rst index e813fa6..c0d51fa 100644 --- a/docsource/source/usage/warnings.rst +++ b/docsource/source/usage/warnings.rst @@ -1,3 +1,35 @@ ======== Warnings -======== \ No newline at end of file +======== + +Before using the delete feature please run a few dry runs to get acquainted with MediaCurator as you it can irrirreparably damage your media library when not used properly. + +When using the -del flag here is the expected behavior: + +To delete all non-hd videos in a folder: + +.. code-block:: bash + + ./curator.py list -del -filters:lowres -dir/-files:"/mnt/media/" + +To delete all videos in a folder with encoding errors: + +.. code-block:: bash + + ./curator.py list -del -filters:fferror -dir/-files:"/mnt/media/" + +To convert (repair) then delete all videos in a folder with encoding errors: + +.. code-block:: bash + + ./curator.py convert -del -filters:fferror -dir/-files:"/mnt/media/" + +To delete all videos in a folder: + +.. code-block:: bash + + ./curator.py list -del -filters:lowres -dir/-files:"/mnt/media/" + +All these commands can have valuable use but are irrecoverable if done unintended. + +Again, please run a few dry runs until you are acquainted with MediaCurator. \ No newline at end of file diff --git a/mediacurator/library/medialibrary.py b/mediacurator/library/medialibrary.py index 20e2a7a..021849f 100644 --- a/mediacurator/library/medialibrary.py +++ b/mediacurator/library/medialibrary.py @@ -117,12 +117,12 @@ class MediaLibrary(): self.videos[filepath].useful = useful # keep video if useful and user wants to also filter by selected resolutions - if self.videos[filepath].useful and len([filtr for filtr in self.filters if filtr in ["lowres", "hd", "720p", "1080p", "uhd"]]) > 0: + if self.videos[filepath].useful and len([filtr for filtr in self.filters if filtr in ["lowres", "subsd", "hd", "sd", "720p", "1080p", "uhd"]]) > 0: useful = False - if "lowres" in self.filters and self.videos[filepath].definition in ["sd"]: + if "subsd" in self.filters and self.videos[filepath].definition in ["subsd"]: useful = True - if "hd" in self.filters and self.videos[filepath].definition in ["720p", "1080p", "uhd"]: + if "sd" in self.filters and self.videos[filepath].definition in ["sd"]: useful = True if "720p" in self.filters and self.videos[filepath].definition in ["720p"]: useful = True @@ -130,6 +130,10 @@ class MediaLibrary(): useful = True if "uhd" in self.filters and self.videos[filepath].definition in ["uhd"]: useful = True + if "lowres" in self.filters and self.videos[filepath].definition in ["subsd", "sd"]: + useful = True + if "hd" in self.filters and self.videos[filepath].definition in ["720p", "1080p", "uhd"]: + useful = True self.videos[filepath].useful = useful # keep video if useful and user wants to also filter when there is an ffmpeg errors diff --git a/mediacurator/library/video.py b/mediacurator/library/video.py index f17bb78..66453dd 100644 --- a/mediacurator/library/video.py +++ b/mediacurator/library/video.py @@ -231,7 +231,9 @@ class Video(): return "1080p" elif width >= 1280 or height >= 720: return "720p" - return "sd" + elif height >= 480: + return "sd" + return "subsd" @staticmethod def detect_filesize(filepath):