Added warnings to the documentation. Added the subsd resolution

This commit is contained in:
Fabrice Quenneville 2020-11-21 16:31:03 -05:00
parent 3b99fae283
commit 8d6ef00ff5
31 changed files with 610 additions and 47 deletions

View File

@ -1,3 +1,35 @@
======== ========
Warnings 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:
.. 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.

View File

@ -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}}) 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}})

View File

@ -36,6 +36,26 @@
<div class="section" id="warnings"> <div class="section" id="warnings">
<h1>Warnings<a class="headerlink" href="#warnings" title="Permalink to this headline"></a></h1> <h1>Warnings<a class="headerlink" href="#warnings" title="Permalink to this headline"></a></h1>
<p>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.</p>
<p>When using the -del flag here is the expected behavior:</p>
<p>To delete all non-hd videos in a folder:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./curator.py list -del -filters:lowres -dir/-files:<span class="s2">&quot;/mnt/media/&quot;</span>
</pre></div>
</div>
<p>To delete all videos in a folder with encoding errors:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./curator.py list -del -filters:fferror -dir/-files:<span class="s2">&quot;/mnt/media/&quot;</span>
</pre></div>
</div>
<p>To convert (repair) then delete all videos in a folder with encoding errors:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./curator.py convert -del -filters:fferror -dir/-files:<span class="s2">&quot;/mnt/media/&quot;</span>
</pre></div>
</div>
<p>To delete all videos in a folder:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./curator.py list -del -filters:lowres -dir/-files:<span class="s2">&quot;/mnt/media/&quot;</span>
</pre></div>
</div>
<p>All these commands can have valuable use but are irrecoverable if done unintended.</p>
<p>Again, please run a few dry runs until you are acquainted with MediaCurator.</p>
</div> </div>

View File

@ -1,3 +1,35 @@
======== ========
Warnings 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:
.. 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.

View File

@ -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}}) 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}})

View File

@ -36,6 +36,26 @@
<div class="section" id="warnings"> <div class="section" id="warnings">
<h1>Warnings<a class="headerlink" href="#warnings" title="Permalink to this headline"></a></h1> <h1>Warnings<a class="headerlink" href="#warnings" title="Permalink to this headline"></a></h1>
<p>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.</p>
<p>When using the -del flag here is the expected behavior:</p>
<p>To delete all non-hd videos in a folder:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./curator.py list -del -filters:lowres -dir/-files:<span class="s2">&quot;/mnt/media/&quot;</span>
</pre></div>
</div>
<p>To delete all videos in a folder with encoding errors:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./curator.py list -del -filters:fferror -dir/-files:<span class="s2">&quot;/mnt/media/&quot;</span>
</pre></div>
</div>
<p>To convert (repair) then delete all videos in a folder with encoding errors:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./curator.py convert -del -filters:fferror -dir/-files:<span class="s2">&quot;/mnt/media/&quot;</span>
</pre></div>
</div>
<p>To delete all videos in a folder:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./curator.py list -del -filters:lowres -dir/-files:<span class="s2">&quot;/mnt/media/&quot;</span>
</pre></div>
</div>
<p>All these commands can have valuable use but are irrecoverable if done unintended.</p>
<p>Again, please run a few dry runs until you are acquainted with MediaCurator.</p>
</div> </div>

View File

@ -7,20 +7,28 @@
Welcome to MediaCurator's documentation! 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 <https://github.com/fabquenneville/MediaCurator>`_
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 2
:caption: Contents: :caption: Contents:
usage/warnings
usage/installation usage/installation
usage/quickstart usage/quickstart
usage/manual
usage/use_cases usage/use_cases
usage/errors usage/errors
.. Indices and tables
.. ==================
.. * :ref:`genindex`
Indices and tables .. * :ref:`modindex`
================== .. * :ref:`search`
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

View File

@ -3,12 +3,35 @@
Errors 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", * `Update FFmpeg <https://ffmpeg.org/download.html>`_ to its latest version as it is a very active project and most distributions serve old versions in their repositories
"Error, header damaged or not MPEG-4 header", * Run MediaCurator with the verbose print option wich will print the raw FFmpeg output
"Header missing", * Try again: In my experience some errors don't necessarly recur...
"SEI type",
"no frame!", Other bugs
"Error while decoding MPEG audio frame.", ----------
"big_values too big"
If you face other bugs, issues or want to suggest features feel free to open a bug report on `GitHub <https://github.com/fabquenneville/MediaCurator/issues>`_

View File

@ -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/

View File

@ -1,4 +1,31 @@
========== ==========
Quickstart Quickstart
========== ==========
.. 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/

View File

@ -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:

View File

@ -61,8 +61,10 @@
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption"><span class="caption-text">Contents:</span></p>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/installation.html">Installation</a></li> <li class="toctree-l1"><a class="reference internal" href="usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/quickstart.html">Quickstart</a></li> <li class="toctree-l1"><a class="reference internal" href="usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/use_cases.html">Use cases</a></li> <li class="toctree-l1"><a class="reference internal" href="usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/errors.html">Errors</a></li> <li class="toctree-l1"><a class="reference internal" href="usage/errors.html">Errors</a></li>
</ul> </ul>

View File

@ -16,7 +16,7 @@
<link rel="shortcut icon" href="_static/favicon.ico"/> <link rel="shortcut icon" href="_static/favicon.ico"/>
<link rel="index" title="Index" href="genindex.html" /> <link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" /> <link rel="search" title="Search" href="search.html" />
<link rel="next" title="Installation" href="usage/installation.html" /> <link rel="next" title="Warnings" href="usage/warnings.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" /> <link rel="stylesheet" href="_static/custom.css" type="text/css" />
@ -35,25 +35,31 @@
<div class="section" id="welcome-to-mediacurator-s-documentation"> <div class="section" id="welcome-to-mediacurator-s-documentation">
<h1>Welcome to MediaCurators documentation!<a class="headerlink" href="#welcome-to-mediacurator-s-documentation" title="Permalink to this headline"></a></h1> <h1>Welcome to MediaCurators documentation!<a class="headerlink" href="#welcome-to-mediacurator-s-documentation" title="Permalink to this headline"></a></h1>
<p>MediaCurator is a Python command line tool to manage a media database.</p>
<ul class="simple">
<li><p>List all the videos and their information with or without filters</p></li>
<li><p>Batch find and repair/convert videos with encoding errors</p></li>
<li><p>Batch recode videos to more modern codecs (x265 / AV1) based on filters: extentions, codecs, resolutions …</p></li>
</ul>
<p>The source code can be found on <a class="reference external" href="https://github.com/fabquenneville/MediaCurator">GitHub</a></p>
<div class="toctree-wrapper compound"> <div class="toctree-wrapper compound">
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption"><span class="caption-text">Contents:</span></p>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/installation.html">Installation</a><ul> <li class="toctree-l1"><a class="reference internal" href="usage/installation.html">Installation</a><ul>
<li class="toctree-l2"><a class="reference internal" href="usage/installation.html#install-ffmpeg">Install FFmpeg</a></li> <li class="toctree-l2"><a class="reference internal" href="usage/installation.html#install-ffmpeg">Install FFmpeg</a></li>
<li class="toctree-l2"><a class="reference internal" href="usage/installation.html#install-from-github">Install from GitHub</a></li> <li class="toctree-l2"><a class="reference internal" href="usage/installation.html#install-from-github">Install from GitHub</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="usage/quickstart.html">Quickstart</a></li> <li class="toctree-l1"><a class="reference internal" href="usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/use_cases.html">Use cases</a></li> <li class="toctree-l1"><a class="reference internal" href="usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/errors.html">Errors</a></li> <li class="toctree-l1"><a class="reference internal" href="usage/errors.html">Errors</a><ul>
<li class="toctree-l2"><a class="reference internal" href="usage/errors.html#repairable-encoding-errors">Repairable encoding errors</a></li>
<li class="toctree-l2"><a class="reference internal" href="usage/errors.html#ffmpeg-issues">FFmpeg issues</a></li>
<li class="toctree-l2"><a class="reference internal" href="usage/errors.html#other-bugs">Other bugs</a></li>
</ul> </ul>
</div> </li>
<div class="section" id="indices-and-tables">
<h2>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li>
<li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p></li>
<li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li>
</ul> </ul>
</div> </div>
</div> </div>
@ -80,8 +86,10 @@
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption"><span class="caption-text">Contents:</span></p>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/installation.html">Installation</a></li> <li class="toctree-l1"><a class="reference internal" href="usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/quickstart.html">Quickstart</a></li> <li class="toctree-l1"><a class="reference internal" href="usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/use_cases.html">Use cases</a></li> <li class="toctree-l1"><a class="reference internal" href="usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/errors.html">Errors</a></li> <li class="toctree-l1"><a class="reference internal" href="usage/errors.html">Errors</a></li>
</ul> </ul>
@ -90,7 +98,7 @@
<h3>Related Topics</h3> <h3>Related Topics</h3>
<ul> <ul>
<li><a href="#">Documentation overview</a><ul> <li><a href="#">Documentation overview</a><ul>
<li>Next: <a href="usage/installation.html" title="next chapter">Installation</a></li> <li>Next: <a href="usage/warnings.html" title="next chapter">Warnings</a></li>
</ul></li> </ul></li>
</ul> </ul>
</div> </div>

View File

@ -80,8 +80,10 @@
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption"><span class="caption-text">Contents:</span></p>
<ul> <ul>
<li class="toctree-l1"><a class="reference internal" href="usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/installation.html">Installation</a></li> <li class="toctree-l1"><a class="reference internal" href="usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/quickstart.html">Quickstart</a></li> <li class="toctree-l1"><a class="reference internal" href="usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/use_cases.html">Use cases</a></li> <li class="toctree-l1"><a class="reference internal" href="usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/errors.html">Errors</a></li> <li class="toctree-l1"><a class="reference internal" href="usage/errors.html">Errors</a></li>
</ul> </ul>

View File

@ -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:[]}}) 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:[]}})

View File

@ -35,13 +35,35 @@
<div class="section" id="errors"> <div class="section" id="errors">
<h1>Errors<a class="headerlink" href="#errors" title="Permalink to this headline"></a></h1> <h1>Errors<a class="headerlink" href="#errors" title="Permalink to this headline"></a></h1>
<p>“Referenced QT chapter track not found”, <p>FFmpeg can detect quite a few errors in the encoding of your source videos encoding. It can also be used to repair errors.</p>
“Error, header damaged or not MPEG-4 header”, <div class="section" id="repairable-encoding-errors">
“Header missing”, <h2>Repairable encoding errors<a class="headerlink" href="#repairable-encoding-errors" title="Permalink to this headline"></a></h2>
“SEI type”, <p>Here are some example errors that mediacurator will print and can possibly repair by re-encoding:</p>
“no frame!”, <ul class="simple">
“Error while decoding MPEG audio frame.”, <li><p>“Referenced QT chapter track not found”</p></li>
“big_values too big”</p> <li><p>“Error, header damaged or not MPEG-4 header”</p></li>
<li><p>“Header missing”</p></li>
<li><p>“SEI type”</p></li>
<li><p>“no frame!”</p></li>
<li><p>“Error while decoding MPEG audio frame.”</p></li>
<li><p>“big_values too big”</p></li>
<li><p></p></li>
</ul>
</div>
<div class="section" id="ffmpeg-issues">
<h2>FFmpeg issues<a class="headerlink" href="#ffmpeg-issues" title="Permalink to this headline"></a></h2>
<p>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.</p>
<p>If that happens there are a few steps you can take:</p>
<ul class="simple">
<li><p><a class="reference external" href="https://ffmpeg.org/download.html">Update FFmpeg</a> to its latest version as it is a very active project and most distributions serve old versions in their repositories</p></li>
<li><p>Run MediaCurator with the verbose print option wich will print the raw FFmpeg output</p></li>
<li><p>Try again: In my experience some errors dont necessarly recur…</p></li>
</ul>
</div>
<div class="section" id="other-bugs">
<h2>Other bugs<a class="headerlink" href="#other-bugs" title="Permalink to this headline"></a></h2>
<p>If you face other bugs, issues or want to suggest features feel free to open a bug report on <a class="reference external" href="https://github.com/fabquenneville/MediaCurator/issues">GitHub</a></p>
</div>
</div> </div>
@ -66,10 +88,17 @@
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current"> <ul class="current">
<li class="toctree-l1"><a class="reference internal" href="warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li> <li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart</a></li> <li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="use_cases.html">Use cases</a></li> <li class="toctree-l1"><a class="reference internal" href="use_cases.html">Use cases</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Errors</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="#">Errors</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#repairable-encoding-errors">Repairable encoding errors</a></li>
<li class="toctree-l2"><a class="reference internal" href="#ffmpeg-issues">FFmpeg issues</a></li>
<li class="toctree-l2"><a class="reference internal" href="#other-bugs">Other bugs</a></li>
</ul>
</li>
</ul> </ul>
<div class="relations"> <div class="relations">

View File

@ -0,0 +1,140 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Manual &#8212; MediaCurator documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Use cases" href="use_cases.html" />
<link rel="prev" title="Quickstart" href="quickstart.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="manual">
<h1>Manual<a class="headerlink" href="#manual" title="Permalink to this headline"></a></h1>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./curator.py <span class="o">[</span>list,convert<span class="o">]</span> <span class="o">[</span>-del<span class="o">]</span>
<span class="o">[</span>-in:any,avi,mkv,wmv,mpg,mp4,m4v,flv,vid<span class="o">]</span>
<span class="o">[</span>-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv<span class="o">]</span>
<span class="o">[</span>-out:mkv/mp4,x265/av1<span class="o">]</span>
<span class="o">[</span>-print:list,formated,verbose<span class="o">]</span>
<span class="o">[</span>-dir/-files:<span class="s2">&quot;/mnt/media/&quot;</span>,,<span class="s2">&quot;/mnt/media2/&quot;</span><span class="o">]</span>
</pre></div>
</div>
<p><strong>for multiple files or filenames use double comma separated values “,,”</strong></p>
<p>default options are:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>-in:any
-filters:
-out:mkv,x265
-print:list
</pre></div>
</div>
<p>Examples:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./curator.py list -filters:old -print:formated -dir:/mnt/media/ &gt;&gt; ../medlist.txt
./curator.py convert -del -filters:mpeg4 -out:av1,mp4 -dir:<span class="s2">&quot;/mnt/media/Movies/&quot;</span>
./curator.py convert -del -in:avi,mpg -print:formated,verbose -dir:/mnt/media/
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/mclogo4x.png" alt="Logo"/>
</a></p>
<h1 class="logo"><a href="../index.html">MediaCurator</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="errors.html">Errors</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="quickstart.html" title="previous chapter">Quickstart</a></li>
<li>Next: <a href="use_cases.html" title="next chapter">Use cases</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2020, Fabrice Quenneville.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.3.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/usage/manual.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@ -16,7 +16,7 @@
<link rel="shortcut icon" href="../_static/favicon.ico"/> <link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" /> <link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" /> <link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Use cases" href="use_cases.html" /> <link rel="next" title="Manual" href="manual.html" />
<link rel="prev" title="Installation" href="installation.html" /> <link rel="prev" title="Installation" href="installation.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" /> <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
@ -36,6 +36,28 @@
<div class="section" id="quickstart"> <div class="section" id="quickstart">
<h1>Quickstart<a class="headerlink" href="#quickstart" title="Permalink to this headline"></a></h1> <h1>Quickstart<a class="headerlink" href="#quickstart" title="Permalink to this headline"></a></h1>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./curator.py <span class="o">[</span>list,convert<span class="o">]</span> <span class="o">[</span>-del<span class="o">]</span>
<span class="o">[</span>-in:any,avi,mkv,wmv,mpg,mp4,m4v,flv,vid<span class="o">]</span>
<span class="o">[</span>-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv<span class="o">]</span>
<span class="o">[</span>-out:mkv/mp4,x265/av1<span class="o">]</span>
<span class="o">[</span>-print:list,formated,verbose<span class="o">]</span>
<span class="o">[</span>-dir/-files:<span class="s2">&quot;/mnt/media/&quot;</span>,,<span class="s2">&quot;/mnt/media2/&quot;</span><span class="o">]</span>
</pre></div>
</div>
<p><strong>for multiple files or filenames use double comma separated values “,,”</strong></p>
<p>default options are:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>-in:any
-filters:
-out:mkv,x265
-print:list
</pre></div>
</div>
<p>Examples:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./curator.py list -filters:old -print:formated -dir:/mnt/media/ &gt;&gt; ../medlist.txt
./curator.py convert -del -filters:mpeg4 -out:av1,mp4 -dir:<span class="s2">&quot;/mnt/media/Movies/&quot;</span>
./curator.py convert -del -in:avi,mpg -print:formated,verbose -dir:/mnt/media/
</pre></div>
</div>
</div> </div>
@ -60,8 +82,10 @@
<h3>Navigation</h3> <h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p> <p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current"> <ul class="current">
<li class="toctree-l1"><a class="reference internal" href="warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li> <li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Quickstart</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="#">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="use_cases.html">Use cases</a></li> <li class="toctree-l1"><a class="reference internal" href="use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="errors.html">Errors</a></li> <li class="toctree-l1"><a class="reference internal" href="errors.html">Errors</a></li>
</ul> </ul>
@ -71,7 +95,7 @@
<ul> <ul>
<li><a href="../index.html">Documentation overview</a><ul> <li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="installation.html" title="previous chapter">Installation</a></li> <li>Previous: <a href="installation.html" title="previous chapter">Installation</a></li>
<li>Next: <a href="use_cases.html" title="next chapter">Use cases</a></li> <li>Next: <a href="manual.html" title="next chapter">Manual</a></li>
</ul></li> </ul></li>
</ul> </ul>
</div> </div>

View File

@ -0,0 +1,120 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Warnings &#8212; MediaCurator documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Installation" href="installation.html" />
<link rel="prev" title="Welcome to MediaCurators documentation!" href="../index.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="warnings">
<h1>Warnings<a class="headerlink" href="#warnings" title="Permalink to this headline"></a></h1>
<p>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.</p>
<p>When using the -del flag here is the expected behavior:</p>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/mclogo4x.png" alt="Logo"/>
</a></p>
<h1 class="logo"><a href="../index.html">MediaCurator</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="errors.html">Errors</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="../index.html" title="previous chapter">Welcome to MediaCurators documentation!</a></li>
<li>Next: <a href="installation.html" title="next chapter">Installation</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2020, Fabrice Quenneville.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 3.3.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/usage/warnings.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@ -1,3 +1,35 @@
======== ========
Warnings 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:
.. 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.

View File

@ -117,12 +117,12 @@ class MediaLibrary():
self.videos[filepath].useful = useful self.videos[filepath].useful = useful
# keep video if useful and user wants to also filter by selected resolutions # 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 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 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 useful = True
if "720p" in self.filters and self.videos[filepath].definition in ["720p"]: if "720p" in self.filters and self.videos[filepath].definition in ["720p"]:
useful = True useful = True
@ -130,6 +130,10 @@ class MediaLibrary():
useful = True useful = True
if "uhd" in self.filters and self.videos[filepath].definition in ["uhd"]: if "uhd" in self.filters and self.videos[filepath].definition in ["uhd"]:
useful = True 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 self.videos[filepath].useful = useful
# keep video if useful and user wants to also filter when there is an ffmpeg errors # keep video if useful and user wants to also filter when there is an ffmpeg errors

View File

@ -231,7 +231,9 @@ class Video():
return "1080p" return "1080p"
elif width >= 1280 or height >= 720: elif width >= 1280 or height >= 720:
return "720p" return "720p"
return "sd" elif height >= 480:
return "sd"
return "subsd"
@staticmethod @staticmethod
def detect_filesize(filepath): def detect_filesize(filepath):