**Summary:**

This release introduces a major overhaul of the `mediacurator` command-line interface (CLI) and comprehensive updates to the documentation. The CLI has transitioned from a custom argument parsing system to utilizing Python's `argparse` and `argcomplete` libraries, greatly enhancing usability and flexibility. Due to these significant changes, the version is incremented from **0.0.13** to **1.0.1**.

- **Refactored** `tools.py` for standardized command-line argument handling using `argparse` and `argcomplete`.
- **Improved** user interaction with structured arguments and built-in help, error handling, and validation.
- **Consolidated** video detail printing logic into a reusable method within the `Video` class.
- **Enhanced** `MediaLibrary` class with better clarity, functionality, and expanded support for video formats.
- **Reorganized** `main.py` to streamline argument handling and improve error feedback.
- **Updated** `setup.py` for release preparation, including new classifiers and dependencies.

- **Revised** README.md for clarity, including structured command usage and improved descriptions.
- **Moved** and improved old documentation, removing outdated content and adding new screenshots.
- **Maintained** legacy commands for backward compatibility while enhancing usability with clear examples.

- **Removed** non-existent `bcolors` from the public API.
- **Upgraded** requirements.txt to include `argcomplete` for command-line completion.
- **Updated** docstrings and function documentation for clarity on functionality and parameters.
This commit is contained in:
Fabrice Quenneville 2024-10-20 23:19:42 -04:00
parent 635cfc710e
commit 5ba0f84d12
79 changed files with 3936 additions and 848 deletions

View File

@ -2,9 +2,9 @@
mediacurator is a Python command line tool to manage a media database.
- List all the videos and their information with or without filters
- List all the videos 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 …
- Batch recode videos to more modern codecs (x265 / AV1) based on filters: extensions, codecs, resolutions …
## Documentation
@ -13,26 +13,58 @@ The documentation is available on the following [link](https://fabquenneville.gi
## Releases
mediacurator is released on [PyPi](https://pypi.org/project/mediacurator/).
Instalation instructions are found on the [Github page](https://fabquenneville.github.io/mediacurator/usage/installation.html).
Installation instructions are found on the [GitHub page](https://fabquenneville.github.io/mediacurator/usage/installation.html).
## Usage
mediacurator [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] [-dirs/-files:"/mnt/media/",,"/mnt/media2/"]
```bash
mediacurator <command> [options]
> for multiple files or filenames use double comma separated values ",,"
# Command options
mediacurator [list convert] [-del/--delete]
[-i/--inputs any 3gp asf avi divx dv f4v flv gif m2ts m4v mkv mov mp4 mpeg mpg mts ogm ogv rm swf ts vid vob webm wmv]
[-fl/--filters fferror old lowres hd 720p 1080p uhd mpeg mpeg4 x264 wmv3 wmv]
[-o/--outputs mkv/mp4 x265/av1]
[-p/--printop list formatted verbose]
[-d/--dirs "/mnt/media/" "/mnt/media2/"]
[-f/--files "file1.ext" "file2.ext"]
```
default options are:
-in:any
-filters:
-out:mkv,x265
-print:list
**Available commands:**
Examples:
- `list`: List all videos with specified filters.
- `convert`: Convert videos to specified formats.
**Options:**
- `-del` or `--delete`: Delete found results after successful operations. **Use with caution**.
- `-i <input>` or `--inputs <input>`: Specify input file formats (default: `any`).
- `-fl <filter>` or `--filters <filter>`: Apply filters to the selection of videos.
- `-o <output>` or `--outputs <output>`: Specify output formats (default: `mkv`, `x265`).
- `-p <print_option>` or `--printop <print_option>`: Set print options (default: `list`).
- `-f <file>` or `--files <file>`: Specify files to process.
- `-d <directory>` or `--dirs <directory>`: Specify directories to process.
**For multiple files or filenames, use space-separated values ( ).**
**Default options (if not specified):**
- `-i/--inputs`: `any`
- `-fl/--filters`: (none)
- `-o/--outputs`: `mkv`, `x265`
- `-p/--printop`: `list`
### Examples
```bash
mediacurator list -filters:old -print:formated -dirs:/mnt/media/ >> ../medlist.txt
mediacurator convert -del -filters:mpeg4 -out:av1,mp4 -dirs:"/mnt/media/Movies/"
mediacurator convert -del -in:avi,mpg -print:formated,verbose -dirs:/mnt/media/
# List all videos with old codecs in formatted output
mediacurator list --filters old --printop formatted --dirs "/mnt/media/" "/mnt/media2/" >> ../medlist.txt
# Convert all MPEG4 videos to AV1 in MP4 format, and delete originals after conversion
mediacurator convert --delete --filters mpeg4 --outputs av1 mp4 --dirs "/mnt/media/" "/mnt/media2/"
# Convert videos with AVI or MPG extensions, print formatted and verbose output, and delete originals
mediacurator convert --delete --inputs avi mpg --printop formatted verbose --dirs "/mnt/media/" "/mnt/media2/"
```
## Contributing

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 224 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1,20 +1,27 @@
.. mediacurator documentation master file, created by
sphinx-quickstart on Fri Nov 20 22:46:06 2020.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
========================================
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
* List all the videos 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 ...
* Batch recode videos to more modern codecs (x265 / AV1) based on filters: extensions, codecs, resolutions ...
The source code can be found on `GitHub <https://github.com/fabquenneville/mediacurator>`_
.. warning::
**Breaking changes in version 1.0.1:**
Starting with version 1.0.1, the command-line interface (CLI) has undergone major changes, and the usage is **not backwards-compatible** with previous versions.
If you are using `mediacurator < 1.0.1`, please refer to the legacy documentation available below (:ref:`legacy_docs`).
----------------------------------------
Documentation
----------------------------------------
.. toctree::
:maxdepth: 2
:caption: Usage:
@ -31,6 +38,34 @@ The source code can be found on `GitHub <https://github.com/fabquenneville/media
:caption: Release Notes:
releasenotes/1.0.1-changelog
----
.. _legacy_docs:
----------------------------------------
Legacy Documentation (Pre 1.0)
----------------------------------------
.. warning::
The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.
.. toctree::
:maxdepth: 1
:caption: Legacy Usage:
legacy_usage/warnings
legacy_usage/installation
legacy_usage/quickstart
legacy_usage/manual
legacy_usage/use_cases
legacy_usage/errors
.. toctree::
:maxdepth: 1
:caption: Legacy Release Notes:
releasenotes/0.0.13-changelog
releasenotes/0.0.12-changelog
releasenotes/0.0.11-changelog

View File

@ -0,0 +1,41 @@
======
Errors
======
.. warning::
The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.
FFmpeg can detect quite a few errors in the encoding of your source video's encoding and can also be used to repair these 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"**: Indicates that the video references a chapter that doesn't exist.
* **"Error, header damaged or not MPEG-4 header"**: The file's header is corrupted or missing.
* **"Header missing"**: The file lacks the necessary header information for decoding.
* **"SEI type"**: Issues related to SEI (Supplemental Enhancement Information) data.
* **"no frame!"**: No video frames available for processing.
* **"Error while decoding MPEG audio frame."**: Issues decoding the audio stream.
* **"big_values too big"**: Indicates that certain values in the file are larger than expected.
* ...
FFmpeg Issues
-------------
While using FFmpeg, you may encounter other errors (such as segfaults) depending on your version. Mediacurator will also print information when that occurs and will move on to the next video after cleaning up any failures.
If you experience these errors, consider the following steps:
* **Update FFmpeg**: Ensure you are using the latest version by downloading it from `ffmpeg.org <https://ffmpeg.org/download.html>`_, as many distributions provide outdated versions in their repositories.
* **Run with Verbose Option**: Execute mediacurator with the verbose print option, which will display the raw FFmpeg output for better troubleshooting.
* **Retry**: In my experience, some errors do not necessarily recur...
Other Bugs
----------
If you encounter other bugs, issues, or would like to suggest features, feel free to open a bug report on `GitHub <https://github.com/fabquenneville/mediacurator/issues>`_.
For further assistance, you can reach out through the GitHub repository or the projects support channels.

View File

@ -0,0 +1,45 @@
============
Installation
============
.. warning::
The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.
This package has been tested on GNU/Linux (e.g., Debian, Ubuntu, Fedora) and Windows, and requires FFmpeg to be installed. For now, it will be distributed on `GitHub <https://github.com/fabquenneville/mediacurator.git>`_.
Install FFmpeg
--------------
To install FFmpeg, you can follow the instructions for your platform:
- **On Debian and Ubuntu**:
.. code-block:: bash
sudo apt update
sudo apt install ffmpeg
- **On Fedora**:
.. code-block:: bash
sudo dnf install ffmpeg
- **On Windows**:
- Download the latest build from `FFmpeg <https://ffmpeg.org/download.html>`_.
- Follow the installation instructions provided on the site.
To verify your FFmpeg installation, you can run:
.. code-block:: bash
ffmpeg -version
Install from PyPi
-----------------
You can install the `mediacurator` package directly from PyPi using the following command:
.. code-block:: bash
pip install MediaCurator

View File

@ -0,0 +1,185 @@
======
Manual
======
.. warning::
The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.
Name
----
mediacurator
Synopsis
--------
.. code-block:: bash
mediacurator <command> [options]
mediacurator [list,convert] [-del]
[-in:any,avi,divx,flv,m4v,mkv,mp4,mpg,ogm,vid,webm,wmv]
[-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv,vob]
[-out:mkv/mp4,x265/av1]
[-print:list,formated,verbose]
[-dirs/-files:"/mnt/media/",,"/mnt/media2/"]
**Available commands:**
- `list`: List all videos with specified filters.
- `convert`: Convert videos to specified formats.
**Options:**
- `-del`: Delete found results after successful operations. **Use with caution**.
- `-in <input>`: Specify input file formats (default: `any`).
- `-filters <filter>`: Apply filters to the selection of videos.
- `-out <output>`: Specify output formats (default: `mkv`, `x265`).
- `-print <print_option>`: Set print options (default: `list`).
- `-files <file>`: Specify files to process.
- `-dirs <directory>`: Specify directories to process.
**For multiple files or filenames, use double comma separated values (,,).**
**Default options (if not specified):**
- `-in`: `any`
- `-filters`: (none)
- `-out`: `mkv`, `x265`
- `-print`: `list`
Description
-----------
**mediacurator** is a Python command-line tool designed to manage a media database. It allows you to:
- List all videos and their metadata, optionally filtered by specified criteria.
- Batch find, repair, or convert videos with encoding errors.
- Batch recode videos to modern codecs (e.g., x265, AV1) based on filters (e.g., container, codec, resolution).
Options
-------
list
====
Search and list videos filtered by the user-provided parameters.
convert
=======
Search and convert all videos filtered by the user-provided parameters.
-del:
=====
Deletes the original videos after successful completion of operations (e.g., conversion or listing). **Use with caution**.
See :doc:`warnings`
-in:
====
[**any**, avi, divx, flv, m4v, mkv, mp4, mpg, ogm, vid, webm, wmv]
Filters videos by file format (container extensions). The default is `any`, meaning all formats are included.
-filters:
=========
[fferror, old, lowres, hd, 720p, 1080p, uhd, mpeg, mpeg4, x264, wmv3, wmv]
Filters videos based on specific criteria:
- **fferror**: Select videos with encoding errors (see :doc:`errors`)
- **old**: Select videos using outdated codecs (anything except hevc or av1)
- **hd**: Select videos in HD (720p, 1080p, UHD)
- **lowres**: Select videos that are not in HD
- **uhd**: Select Ultra-HD videos (width or height >= 2160)
- **1080p**: Select Full-HD videos (1440 <= width < 2160 or 1080 <= height < 2160)
- **720p**: Select HD videos (1280 <= width < 1440 or 720 <= height < 1080)
- **sd**: Select standard-definition videos (480 <= height < 720)
- **subsd**: Select substandard-definition videos (height < 480)
- **mpeg, mpeg4, x264, wmv3, wmv, vob**: Filter by video codec
-out:
=====
[**mkv**/mp4, x265/av1]
Specifies the output format for video conversions:
- **mkv**: (**Default**) Package the output video in a `Matroska <https://en.wikipedia.org/wiki/Matroska>`_ container.
- **mp4**: Package the output video in an MP4 container.
- **x265** or **hevc**: (**Default**) Encode the video using `x265 <https://en.wikipedia.org/wiki/X265>`_ (HEVC).
- **av1**: Encode the video using `AOMedia Video 1 <https://en.wikipedia.org/wiki/AV1>`_ (AV1).
-print:
=======
[**list**, formated, verbose]
Specifies how the output should be displayed:
- **list**: (**Default**) Prints video info in a concise, single-line format.
.. image:: ../_static/Screenshot-print_list-single.png
:width: 600
:alt: List videos (single-line output)
- **formated**: Prints video info in a more readable format with line breaks.
.. image:: ../_static/Screenshot-print_formatted-single.png
:width: 400
:alt: List videos (formatted output)
- **verbose**: Prints the FFmpeg output during conversions.
-dirs:
======
["/mnt/media/",,"/mnt/media2/"]
Specifies directories to scan, separated by **double commas** (,,).
-files:
=======
["/mnt/media/video.avi",,"/mnt/media2/video2.mp4"]
Specifies individual video files to process, separated by **double commas** (,,).
Examples
--------
.. code-block:: bash
# This command lists all videos in the specified directories that use old codecs and
# formats the output.
mediacurator list -filters:old -print:formated -dirs:"/mnt/media/",,"/mnt/media2/"
# This command converts all MPEG4 videos found in the specified directories to AV1 format
# in MP4 containers and deletes the originals.
mediacurator convert -del -filters:mpeg4 -out:av1,mp4 -dirs:"/mnt/media/",,"/mnt/media2/"
# This command converts AVI or MPG videos, displays detailed output during conversion, and
# deletes originals.
mediacurator convert -del -in:avi,mpg -print:formated,verbose -dirs:"/mnt/media/",,"/mnt/media2/"
For more examples, see :doc:`use_cases`
See Also
--------
- `FFmpeg <https://ffmpeg.org/>`_
Glossary
--------
- **Codec**: A program or device that compresses and decompresses digital media.
- **Container**: A file format that holds video, audio, and metadata.
- **UHD**: Ultra High Definition, refers to video resolutions of 3840x2160 pixels or higher.
Error Handling
--------------
Common issues users might encounter include:
- **Encoding Errors**: If videos have encoding errors, they can be filtered using the `-filters fferror` option.
- **Unsupported Formats**: Ensure that input formats specified in `-in` are supported by mediacurator.
Author
------
Fabrice Quenneville

View File

@ -0,0 +1,40 @@
==========
Quickstart
==========
.. warning::
The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.
.. code-block:: bash
mediacurator [list,convert] [-del]
[-in:any,avi,mkv,wmv,mpg,mp4,m4v,flv,vid,divx,ogm,webm]
[-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv]
[-out:mkv/mp4,x265/av1]
[-print:list,formated,verbose]
[-dirs/-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
# List all videos with old codec in formated format
mediacurator list -filters:old -print:formated -dirs:/mnt/media/ >> ../medlist.txt
# Convert all videos with the codec mpeg4 in a mp4 using the av1 video codec and the delete the originals
mediacurator convert -del -filters:mpeg4 -out:av1,mp4 -dirs:"/mnt/media/Movies/"
# Convert any video with avi or mpg extensions, print formated text including ffmpeg's output and then delete the originals
mediacurator convert -del -in:avi,mpg -print:formated,verbose -dirs:/mnt/media/
More examples in :doc:`use_cases`

View File

@ -0,0 +1,106 @@
=========
Use cases
=========
.. warning::
The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.
The main reasons to use mediacurator would be the following:
* :ref:`legacy_list_cmd` on a video library such as:
- How many videos of the lot are in HD vs standard or substandard definitions
- What videos are in older codecs
- Are there videos in the library with encoding or corruption errors
* :ref:`legacy_purge` selected videos in a media library
* :ref:`legacy_fferror` on selected videos in a media library
* :ref:`legacy_convert` videos from an old codec to `High Efficiency Video Coding <https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding>`_
.. _legacy_list_cmd:
Print information
-----------------
List all videos with old codec in formatted output
.. code-block:: bash
mediacurator list -filters:old -print:formated -dirs:"/mnt/media/",,"/mnt/media2/"
List all videos with substandard definitions with a formatted output
.. code-block:: bash
mediacurator list -filters:subsd -print:formated -dirs:"/mnt/media/",,"/mnt/media2/"
.. _legacy_purge:
Purge
-----
Please see :doc:`warnings`
List and delete all videos using the `Windows Media Video <https://en.wikipedia.org/wiki/Windows_Media_Video>`_ codecs
.. code-block:: bash
mediacurator list --delete -filters:wmv -dirs:"/mnt/media/",,"/mnt/media2/"
List and delete all videos using `Audio Video Interleave <https://en.wikipedia.org/wiki/Audio_Video_Interleave>`_
.. code-block:: bash
mediacurator list --delete -in:avi -dirs:"/mnt/media/",,"/mnt/media2/"
List and delete any videos with encoding errors
.. code-block:: bash
mediacurator list --delete -filters:fferror -dirs:"/mnt/media/",,"/mnt/media2/"
.. _legacy_fferror:
Batch repair encoding errors
----------------------------
List all videos with encoding errors
.. code-block:: bash
mediacurator list -filters:fferror -dirs:"/mnt/media/",,"/mnt/media2/"
List and delete any videos with encoding errors
.. code-block:: bash
mediacurator list --delete -filters:fferror -dirs:"/mnt/media/",,"/mnt/media2/"
Convert all videos with encoding errors to `High Efficiency Video Coding <https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding>`_ and delete the originals
.. code-block:: bash
mediacurator convert --delete -filters:fferror -dirs:"/mnt/media/",,"/mnt/media2/"
.. _legacy_convert:
Batch re-encode
---------------
Convert all videos with old codecs to `High Efficiency Video Coding <https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding>`_ to save space and delete the originals
.. code-block:: bash
mediacurator convert --delete -filters:old -dirs:"/mnt/media/",,"/mnt/media2/"
Convert all videos with the codec mpeg4 to an mkv container using the av1 video codec
.. code-block:: bash
mediacurator convert -filters:mpeg4 -out:av1,mkv -dirs:"/mnt/media/",,"/mnt/media2/"
Convert any video with avi or mpg extensions, print formatted text including ffmpeg's output, and then delete the originals
.. code-block:: bash
mediacurator convert --delete -in:avi,mpg -print:formated,verbose -dirs:"/mnt/media/",,"/mnt/media2/"

View File

@ -0,0 +1,67 @@
========
Warnings
========
.. warning::
The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.
.. warning::
Before using the **delete feature**, we strongly recommend running several dry runs to get acquainted with `mediacurator`, as incorrect usage can cause irreversible damage to your media library.
The `-del` flag will **permanently delete** files, so it is crucial to ensure that the command is executed correctly. Below are some examples of how the delete feature works.
Example use Cases for the `-del` Flag
-----------------------------------------
1. **Delete all non-HD (low-resolution) videos in a folder:**
.. code-block:: bash
mediacurator list -del -filters:lowres -dirs:"/mnt/media/"
2. **Delete all substandard quality videos in a folder:**
.. code-block:: bash
mediacurator list -del -filters:subsd -dirs:"/mnt/media/"
.. image:: ../_static/Legacy-Screenshot-delete.png
:width: 600
:alt: Deleting videos
3. **Delete all videos in a folder with encoding errors:**
.. code-block:: bash
mediacurator list -del -filters:fferror -dirs:"/mnt/media/"
4. **Convert (repair) and then delete all videos in a folder with encoding errors:**
.. code-block:: bash
mediacurator convert -del -filters:fferror -dirs:"/mnt/media/"
5. **Delete all videos in a folder:**
.. code-block:: bash
mediacurator list -del -filters:lowres -dirs:"/mnt/media/"
Important Notes
---------------
- **Irreversibility**: All of these commands involve permanent deletion. Once a file is deleted using the `-del` flag, it cannot be recovered.
- **Run without `-del` first**: Always perform several dry runs by omitting the `-del` flag to ensure that the correct files are selected for deletion. Familiarizing yourself with the tool before using destructive commands is essential to avoid unintended consequences.
- **Specific File Selection**: If you're unsure about applying filters to an entire directory, you can use the `-files` option to target individual files for deletion or conversion, further reducing the risk of unintended deletions.
- **Backup Recommendation**: Before running any commands with the `-del` flag, it is a good practice to back up your media library or the specific directories being processed, especially if they contain valuable or irreplaceable files.
Dry run example (without deletion)
----------------------------------
.. code-block:: bash
mediacurator list -filters:lowres -dirs:"/mnt/media/"
Make sure you carefully verify the output and files selected during the dry runs to prevent accidental data loss.

View File

@ -34,9 +34,11 @@ New Features
Improvements
============
* Added line break in conversion output before each video to improve readability.
* Standardized audio, subtitle and metadata copying.
* Added support for .mov and .ts formats.
* Introduced CRF (Constant Rate Factor) settings for AV1 and x265 for better control over quality and file size.
* Implemented handling for odd pixel dimensions by adding black pixel padding to ensure even width and height.
Changes
=======

View File

@ -1,37 +1,37 @@
======
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.
FFmpeg can detect quite a few errors in the encoding of your source video's encoding and can also be used to repair these errors.
Repairable encoding 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"
* **"Referenced QT chapter track not found"**: Indicates that the video references a chapter that doesn't exist.
* **"Error, header damaged or not MPEG-4 header"**: The file's header is corrupted or missing.
* **"Header missing"**: The file lacks the necessary header information for decoding.
* **"SEI type"**: Issues related to SEI (Supplemental Enhancement Information) data.
* **"no frame!"**: No video frames available for processing.
* **"Error while decoding MPEG audio frame."**: Issues decoding the audio stream.
* **"big_values too big"**: Indicates that certain values in the file are larger than expected.
* ...
FFmpeg issues
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.
While using FFmpeg, you may encounter other errors (such as segfaults) depending on your version. Mediacurator will also print information when that occurs and will move on to the next video after cleaning up any failures.
If that happens there are a few steps you can take:
If you experience these errors, consider the following steps:
* **Update FFmpeg**: Ensure you are using the latest version by downloading it from `ffmpeg.org <https://ffmpeg.org/download.html>`_, as many distributions provide outdated versions in their repositories.
* **Run with Verbose Option**: Execute mediacurator with the verbose print option, which will display the raw FFmpeg output for better troubleshooting.
* **Retry**: In my experience, some errors do not necessarily recur...
* `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
* 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
Other Bugs
----------
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>`_
If you encounter other bugs, issues, or would like to suggest features, feel free to open a bug report on `GitHub <https://github.com/fabquenneville/mediacurator/issues>`_.
For further assistance, you can reach out through the GitHub repository or the projects support channels.

View File

@ -2,17 +2,40 @@
Installation
============
This package has only been tested on GNU/Linux & Windows and requires FFMPEG installed. For now it will be distributed on `GitHub <https://github.com/fabquenneville/mediacurator.git>`_
This package has been tested on GNU/Linux (e.g., Debian, Ubuntu, Fedora) and Windows, and requires FFmpeg to be installed. For now, it will be distributed on `GitHub <https://github.com/fabquenneville/mediacurator.git>`_.
Install FFmpeg
--------------
`Download FFmpeg <https://ffmpeg.org/download.html>`_
To install FFmpeg, you can follow the instructions for your platform:
- **On Debian and Ubuntu**:
.. code-block:: bash
sudo apt update
sudo apt install ffmpeg
- **On Fedora**:
.. code-block:: bash
sudo dnf install ffmpeg
- **On Windows**:
- Download the latest build from `FFmpeg <https://ffmpeg.org/download.html>`_.
- Follow the installation instructions provided on the site.
To verify your FFmpeg installation, you can run:
.. code-block:: bash
ffmpeg -version
Install from PyPi
-----------------
You can install the `mediacurator` package directly from PyPi using the following command:
.. code-block:: bash
:linenos:
pip install mediacurator

View File

@ -12,134 +12,183 @@ Synopsis
.. code-block:: bash
mediacurator [list,convert] [-del]
[-in:any,avi,mkv,wmv,mpg,mp4,m4v,flv,vid,divx,ogm,webm]
[-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv,vob]
[-out:mkv/mp4,x265/av1]
[-print:list,formated,verbose]
[-dirs/-files:"/mnt/media/",,"/mnt/media2/"]
mediacurator <command> [options]
mediacurator [list convert] [-del/--delete]
[-i/--inputs any 3gp asf avi divx dv f4v flv gif m2ts m4v mkv mov mp4 mpeg mpg mts ogm ogv rm swf ts vid vob webm wmv]
[-fl/--filters fferror old lowres hd 720p 1080p uhd mpeg mpeg4 x264 wmv3 wmv]
[-o/--outputs mkv/mp4 x265/av1]
[-p/--printop list formatted verbose]
[-d/--dirs "/mnt/media/" "/mnt/media2/"]
[-f/--files "file1.ext" "file2.ext"]
**for multiple files or filenames use double comma separated values ",,"**
**Available commands:**
- `list`: List all videos with specified filters.
- `convert`: Convert videos to specified formats.
default options are:
**Options:**
.. code-block:: bash
- `-del` or `--delete`: Delete found results after successful operations. **Use with caution**.
- `-i <input>` or `--inputs <input>`: Specify input file formats (default: `any`).
- `-fl <filter>` or `--filters <filter>`: Apply filters to the selection of videos.
- `-o <output>` or `--outputs <output>`: Specify output formats (default: `mkv`, `x265`).
- `-p <print_option>` or `--printop <print_option>`: Set print options (default: `list`).
- `-f <file>` or `--files <file>`: Specify files to process.
- `-d <directory>` or `--dirs <directory>`: Specify directories to process.
-in:any
-filters:
-out:mkv,x265
-print:list
**For multiple files or filenames, use space-separated values ( ).**
**Default options (if not specified):**
- `-i/--inputs`: `any`
- `-fl/--filters`: (none)
- `-o/--outputs`: `mkv`, `x265`
- `-p/--printop`: `list`
Description
-----------
mediacurator is a Python command line tool to manage a media database.
**mediacurator** is a Python command-line tool designed to manage a media database. It allows you to:
* 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 ...
- List all videos and their metadata, optionally filtered by specified criteria.
- Batch find, repair, or convert videos with encoding errors.
- Batch recode videos to modern codecs (e.g., x265, AV1) based on filters (e.g., container, codec, resolution).
Options
-------
list
====
Search and list videos filtered by the parameters passed by the user.
Search and list videos filtered by the user-provided parameters.
convert
=======
Search and convert all videos filtered by the parameters passed by the user.
Search and convert all videos filtered by the user-provided parameters.
-del:
=====
Delete all original videos once selected operations have been done succefully.
--delete
========
Short form: `-del`
See :doc:`warnings`
Deletes the original videos after successful completion of operations (e.g., conversion or listing). **Use with caution**.
-in:
====
[**any**,avi,mkv,wmv,mpg,mp4,m4v,flv,vid,divx,ogm]
See :doc:`warnings`
Search all videos of the selected container **extensions** in the directories. By default it will include any file format.
--inputs
========
Short form: `-i`
-filters:
[**any**, 3gp, asf, avi, divx, dv, f4v, flv, gif, m2ts, m4v, mkv, mov, mp4, mpeg, mpg, mts, ogm, ogv, rm, swf, ts, vid, vob, webm, wmv]
Filters videos by file format (container extensions). The default is `any`, meaning all formats are included.
--filters
=========
[fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv]
Short form: `-fl`
Filter the selected videos for parameters:
[fferror, old, lowres, hd, 720p, 1080p, uhd, mpeg, mpeg4, x264, wmv3, wmv]
* fferror: Select all videos with encoding errors (See :doc:`errors`)
* old: Select all videos using old codecs (Everything except hevc or av1)
* hd: 720p, 1080p, uhd
* lowres: Everything not hd
* uhd: if width >= 2160 or height >= 2160
* 1080p: if less than uhd and width >= 1440 or height >= 1080
* 720p: if less than 1080p and width >= 1280 or height >= 720:
* sd: if less than 720p and if height >= 480
* subsd: Substandard definitions: Everything under 480p
* mpeg,mpeg4,x264,wmv3,wmv,vob: Filter for videos encoded in the requested video codec
Filters videos based on specific criteria:
-out:
=====
[**mkv**/mp4,x265/av1]
- **fferror**: Select videos with encoding errors (see :doc:`errors`)
- **old**: Select videos using outdated codecs (anything except hevc or av1)
- **hd**: Select videos in HD (720p, 1080p, UHD)
- **lowres**: Select videos that are not in HD
- **uhd**: Select Ultra-HD videos (width or height >= 2160)
- **1080p**: Select Full-HD videos (1440 <= width < 2160 or 1080 <= height < 2160)
- **720p**: Select HD videos (1280 <= width < 1440 or 720 <= height < 1080)
- **sd**: Select standard-definition videos (480 <= height < 720)
- **subsd**: Select substandard-definition videos (height < 480)
- **mpeg, mpeg4, x264, wmv3, wmv, vob**: Filter by video codec
Select the outputs for the video conversions
--outputs
=========
Short form: `-o`
* mkv: (**Default**) Package the resulting video in a `Matroska <https://en.wikipedia.org/wiki/Matroska>`_ container.
* mp4: Package the resulting video in a container.
* x265/hevc: (**Default**) Encode the video using the `x265 <https://en.wikipedia.org/wiki/X265>`_ compression format.
* av1: Encode the video using the `AOMedia Video 1 <https://en.wikipedia.org/wiki/AV1>`_ compression format. This will be used as default once the developpers at FFmpeg move it out of `experimental <https://trac.ffmpeg.org/wiki/Encode/AV1>`_ .
[**mkv**/mp4, x265/av1]
-print:
=======
[**list**,formated,verbose]
Specifies the output format for video conversions:
* list: (**Default**) Print the information about the videos on a single line
- **mkv**: (**Default**) Package the output video in a `Matroska <https://en.wikipedia.org/wiki/Matroska>`_ container.
- **mp4**: Package the output video in an MP4 container.
- **x265** or **hevc**: (**Default**) Encode the video using `x265 <https://en.wikipedia.org/wiki/X265>`_ (HEVC).
- **av1**: Encode the video using `AOMedia Video 1 <https://en.wikipedia.org/wiki/AV1>`_ (AV1).
.. image:: ../_static/Screenshot-print_list-single.png
:width: 600
:alt: Deleting videos
--printop
=========
Short form: `-p`
* formated: Print the information in an aerated format
[**list**, formatted, verbose]
.. image:: ../_static/Screenshot-print_formated-single.png
:width: 400
:alt: Deleting videos
Specifies how the output should be displayed:
* verbose: Print the FFmpeg output during the video conversions
- **list**: (**Default**) Prints video info in a concise, single-line format.
-dirs:
.. image:: ../_static/Screenshot-print_list-single.png
:width: 600
:alt: List videos (single-line output)
- **formatted**: Prints video info in a more readable format with line breaks.
.. image:: ../_static/Screenshot-print_formatted-single.png
:width: 400
:alt: List videos (formatted output)
- **verbose**: Prints the FFmpeg output during conversions.
--dirs
======
["/mnt/media/",,"/mnt/media2/"]
Short form: `-d`
The directories to scan as a **double comma** separated values list.
["/mnt/media/", "/mnt/media2/"]
Specifies directories to scan, separated by spaces.
-files:
--files
=======
["/mnt/media/video.avi",,"/mnt/media2/video2.mp4"]
Short form: `-f`
Specific videos to include as a **double comma** separated values list.
["/mnt/media/video.avi", "/mnt/media2/video2.mp4"]
Specifies individual video files to process, separated by spaces.
Examples
--------
.. code-block:: bash
# List all videos with old codec in formated format
mediacurator list -filters:old -print:formated -dirs:/mnt/media/ >> ../medlist.txt
# Convert all videos with the codec mpeg4 in a mp4 using the av1 video codec and the delete the originals
mediacurator convert -del -filters:mpeg4 -out:av1,mp4 -dirs:"/mnt/media/Movies/"
# Convert any video with avi or mpg extensions, print formated text including ffmpeg's output and then delete the originals
mediacurator convert -del -in:avi,mpg -print:formated,verbose -dirs:/mnt/media/
# This command lists all videos in the specified directories that use old codecs and
# formats the output.
mediacurator list --filters old --printop formatted --dirs "/mnt/media/" "/mnt/media2/"
# This command converts all MPEG4 videos found in the specified directories to AV1 format
# in MP4 containers and deletes the originals.
mediacurator convert --delete --filters mpeg4 --outputs av1 mp4 --dirs "/mnt/media/" "/mnt/media2/"
# This command converts AVI or MPG videos, displays detailed output during conversion, and
# deletes originals.
mediacurator convert --delete --inputs avi mpg --printop formatted verbose --dirs "/mnt/media/" "/mnt/media2/"
More examples in :doc:`use_cases`
For more examples, see :doc:`use_cases`
See Also
--------
`FFmpeg <https://ffmpeg.org/>`_
- `FFmpeg <https://ffmpeg.org/>`_
Glossary
--------
- **Codec**: A program or device that compresses and decompresses digital media.
- **Container**: A file format that holds video, audio, and metadata.
- **UHD**: Ultra High Definition, refers to video resolutions of 3840x2160 pixels or higher.
Error Handling
--------------
Common issues users might encounter include:
- **Encoding Errors**: If videos have encoding errors, they can be filtered using the `--filters fferror` option.
- **Unsupported Formats**: Ensure that input formats specified in `--inputs` are supported by mediacurator.
Author
------

View File

@ -2,35 +2,56 @@
Quickstart
==========
.. code-block:: bash
mediacurator [list,convert] [-del]
[-in:any,avi,mkv,wmv,mpg,mp4,m4v,flv,vid,divx,ogm,webm]
[-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv]
[-out:mkv/mp4,x265/av1]
[-print:list,formated,verbose]
[-dirs/-files:"/mnt/media/",,"/mnt/media2/"]
**for multiple files or filenames use double comma separated values ",,"**
default options are:
To use `mediacurator`, execute the following command structure:
.. code-block:: bash
-in:any
-filters:
-out:mkv,x265
-print:list
mediacurator <command> [options]
Examples:
mediacurator [list convert] [-del/--delete]
[-i/--inputs any 3gp asf avi divx dv f4v flv gif m2ts m4v mkv mov mp4 mpeg mpg mts ogm ogv rm swf ts vid vob webm wmv]
[-fl/--filters fferror old lowres hd 720p 1080p uhd mpeg mpeg4 x264 wmv3 wmv]
[-o/--outputs mkv/mp4 x265/av1]
[-p/--printop list formatted verbose]
[-d/--dirs "/mnt/media/" "/mnt/media2/"]
[-f/--files "file1.ext" "file2.ext"]
**Available commands:**
- `list`: List all videos with specified filters.
- `convert`: Convert videos to specified formats.
**Options:**
- `-del` or `--delete`: Delete found results after successful operations.
- `-i <input>` or `--inputs <input>`: Specify input file formats (default: `any`).
- `-fl <filter>` or `--filters <filter>`: Apply filters to the selection of videos.
- `-o <output>` or `--outputs <output>`: Specify output formats (default: `mkv`, `x265`).
- `-p <print_option>` or `--printop <print_option>`: Set print options (default: `list`).
- `-f <file>` or `--files <file>`: Specify files to process.
- `-d <directory>` or `--dirs <directory>`: Specify directories to process.
**For multiple files or filenames, use space-separated values ( ).**
**Default options:**
- `-i/--inputs any`
- `-fl/--filters`
- `-o/--outputs mkv x265`
- `-p/--printop list`
**Examples:**
The following examples demonstrate how to use `mediacurator` with the options listed above:
.. code-block:: bash
# List all videos with old codec in formated format
mediacurator list -filters:old -print:formated -dirs:/mnt/media/ >> ../medlist.txt
# Convert all videos with the codec mpeg4 in a mp4 using the av1 video codec and the delete the originals
mediacurator convert -del -filters:mpeg4 -out:av1,mp4 -dirs:"/mnt/media/Movies/"
# Convert any video with avi or mpg extensions, print formated text including ffmpeg's output and then delete the originals
mediacurator convert -del -in:avi,mpg -print:formated,verbose -dirs:/mnt/media/
# List all videos with an old codec in formatted format
mediacurator list --filters old --printop formatted --dirs /mnt/media/ >> ../medlist.txt
More examples in :doc:`use_cases`
# Convert all videos with the MPEG4 codec to MP4 using the AV1 codec and delete the originals
mediacurator convert --delete --filters mpeg4 --outputs av1,mp4 --dirs "/mnt/media/Movies/"
# Convert any video with AVI or MPG extensions, print formatted text including FFmpeg's output, and then delete the originals
mediacurator convert --delete --inputs avi,mpg --printop formatted,verbose --dirs /mnt/media/
For more examples, see :doc:`use_cases`.

View File

@ -17,18 +17,17 @@ The main reasons to use mediacurator would be the following:
Print information
-----------------
List all videos with old codec in formated format
List all videos with old codec in formatted output
.. code-block:: bash
mediacurator list -filters:old -dirs:/mnt/media/
mediacurator list --filters old --printop formatted --dirs "/mnt/media/" "/mnt/media2/"
List all videos with substandard definitions with a formated output
List all videos with substandard definitions with a formatted output
.. code-block:: bash
mediacurator list -filters:subsd -print:formated -dirs:/mnt/media/
mediacurator list --filters subsd --printop formatted --dirs "/mnt/media/" "/mnt/media2/"
.. _purge:
@ -41,21 +40,19 @@ List and delete all videos using the `Windows Media Video <https://en.wikipedia.
.. code-block:: bash
mediacurator list -del -filters:wmv -dirs:/mnt/media/
mediacurator list --delete --filters wmv --dirs "/mnt/media/" "/mnt/media2/"
List and delete all videos using an `Audio Video Interleave <https://en.wikipedia.org/wiki/Audio_Video_Interleave>`_
List and delete all videos using `Audio Video Interleave <https://en.wikipedia.org/wiki/Audio_Video_Interleave>`_
.. code-block:: bash
mediacurator list -del -in:avi -dirs:/mnt/media/
mediacurator list --delete --inputs avi --dirs "/mnt/media/" "/mnt/media2/"
List and delete any videos with encoding errors
.. code-block:: bash
mediacurator list -del -filters:fferror -dirs:/mnt/media/
mediacurator list --delete --filters fferror --dirs "/mnt/media/" "/mnt/media2/"
.. _fferror:
@ -66,20 +63,19 @@ List all videos with encoding errors
.. code-block:: bash
mediacurator list -filters:fferror -dirs:/mnt/media/
mediacurator list --filters fferror --dirs "/mnt/media/" "/mnt/media2/"
List and delete any videos with encoding errors
.. code-block:: bash
mediacurator list -del -filters:fferror -dirs:/mnt/media/
mediacurator list --delete --filters fferror --dirs "/mnt/media/" "/mnt/media2/"
Convert all videos with encoding errors to `High Efficiency Video Coding <https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding>`_ and the delete the originals
Convert all videos with encoding errors to `High Efficiency Video Coding <https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding>`_ and delete the originals
.. code-block:: bash
mediacurator convert -del -filters:fferror -dirs:"/mnt/media/Movies/"
mediacurator convert --delete --filters fferror --dirs "/mnt/media/" "/mnt/media2/"
.. _convert:
@ -90,16 +86,16 @@ Convert all videos with old codecs to `High Efficiency Video Coding <https://en.
.. code-block:: bash
mediacurator convert -del -filters:old -dirs:"/mnt/media/Movies/"
mediacurator convert --delete --filters old --dirs "/mnt/media/" "/mnt/media2/"
Convert all videos with the codec mpeg4 to an mkv container using the av1 video codec
.. code-block:: bash
mediacurator convert -filters:mpeg4 -out:av1,mkv -dirs:"/mnt/media/Movies/"
mediacurator convert --filters mpeg4 --outputs av1,mkv --dirs "/mnt/media/" "/mnt/media2/"
Convert any video with avi or mpg extensions, print formated text including ffmpeg's output and then delete the originals
Convert any video with avi or mpg extensions, print formatted text including ffmpeg's output, and then delete the originals
.. code-block:: bash
mediacurator convert -del -in:avi,mpg -print:formated,verbose -dirs:/mnt/media/
mediacurator convert --delete --inputs avi,mpg --printop formatted,verbose --dirs "/mnt/media/" "/mnt/media2/"

View File

@ -2,44 +2,62 @@
Warnings
========
Before using the delete feature please try a few dry runs to get acquainted with mediacurator as it can irreparably damage your media library when not used properly.
.. warning::
When using the -del flag here is the expected behavior:
Before using the **delete feature**, we strongly recommend running several dry runs to get acquainted with `mediacurator`, as incorrect usage can cause irreversible damage to your media library.
To delete all non-hd videos in a folder:
The `--delete` flag will **permanently delete** files, so it is crucial to ensure that the command is executed correctly. Below are some examples of how the delete feature works.
Example use cases for the `--delete` Flag
-----------------------------------------
1. **Delete all non-HD (low-resolution) videos in a folder:**
.. code-block:: bash
mediacurator list -del -filters:lowres -dirs/-files:"/mnt/media/"
mediacurator list --delete --filters lowres --dirs "/mnt/media/"
To delete all substandard videos in a folder:
2. **Delete all substandard quality videos in a folder:**
.. code-block:: bash
mediacurator list -del -filters:subsd -dirs/-files:"/mnt/media/"
mediacurator list --delete --filters subsd --dirs "/mnt/media/"
.. image:: ../_static/Screenshot-delete.png
:width: 600
:alt: Deleting videos
To delete all videos in a folder with encoding errors:
3. **Delete all videos in a folder with encoding errors:**
.. code-block:: bash
mediacurator list -del -filters:fferror -dirs/-files:"/mnt/media/"
mediacurator list --delete --filters fferror --dirs "/mnt/media/"
To convert (repair) then delete all videos in a folder with encoding errors:
4. **Convert (repair) and then delete all videos in a folder with encoding errors:**
.. code-block:: bash
mediacurator convert -del -filters:fferror -dirs/-files:"/mnt/media/"
mediacurator convert --delete --filters fferror --dirs "/mnt/media/"
To delete all videos in a folder:
5. **Delete all videos in a folder:**
.. code-block:: bash
mediacurator list -del -filters:lowres -dirs/-files:"/mnt/media/"
mediacurator list --delete --dirs "/mnt/media/"
All these commands can have valuable use but are irrecoverable if done unintended.
Important Notes
---------------
Again, please try a few dry runs without -del until you are acquainted with mediacurator.
- **Irreversibility**: All of these commands involve permanent deletion. Once a file is deleted using the `--delete` flag, it cannot be recovered.
- **Run without `--delete` first**: Always perform several dry runs by omitting the `--delete` flag to ensure that the correct files are selected for deletion. Familiarizing yourself with the tool before using destructive commands is essential to avoid unintended consequences.
- **Specific File Selection**: If you're unsure about applying filters to an entire directory, you can use the `--files` option to target individual files for deletion or conversion, further reducing the risk of unintended deletions.
- **Backup Recommendation**: Before running any commands with the `--delete` flag, it is a good practice to back up your media library or the specific directories being processed, especially if they contain valuable or irreplaceable files.
Dry run example (without deletion)
----------------------------------
.. code-block:: bash
mediacurator list --filters lowres --dirs "/mnt/media/"
Make sure you carefully verify the output and files selected during the dry runs to prevent accidental data loss.

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

View File

@ -1,53 +1,57 @@
/* custom.css */
/* Add text wrap to code blocks */
/* pre {
white-space: pre-wrap;
} */
/* Add breakpoints for responsive design */
@media screen and (min-width: 1200px) {
/* Adjust layout for large screens */
div.document {
width: 90%; /* Adjust width for large screens */
margin: 30px auto; /* Center the document */
display: grid; /* Use grid layout */
grid-template-columns: 1fr 3fr; /* Sidebar takes 1/4, main content takes 3/4 of available space */
grid-template-areas:
"sidebar main"; /* Define grid areas */
}
/* Adjust layout for large screens */
div.document {
width: 90%; /* Adjust width for large screens */
margin: 30px auto; /* Center the document */
display: grid; /* Use grid layout */
grid-template-columns: 1fr 3fr; /* Sidebar takes 1/4, main content takes 3/4 of available space */
grid-template-areas: "sidebar main"; /* Define grid areas */
}
div.sphinxsidebar {
/* Add some content or set a min-width to ensure it occupies the grid area */
width: 100%; /* Example min-width */
grid-area: sidebar; /* Assign to sidebar grid area */
padding: 0 20px; /* Add padding to maintain spacing */
margin-top: 0;
margin-right: 20px;
margin-bottom: 0;
margin-left: 0; /* Adjust margins to fit within the layout */
}
div.sphinxsidebar {
/* Add some content or set a min-width to ensure it occupies the grid area */
width: 100%; /* Example min-width */
grid-area: sidebar; /* Assign to sidebar grid area */
padding: 0 20px; /* Add padding to maintain spacing */
margin-top: 0;
margin-right: 20px;
margin-bottom: 0;
margin-left: 0; /* Adjust margins to fit within the layout */
}
div.bodywrapper {
/* Ensure it occupies the grid area */
width: 100%;
grid-area: main; /* Assign to main grid area */
padding: 0 20px; /* Add padding to maintain spacing */
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
margin-left: 20px; /* Adjust margins to fit within the layout */
}
div.bodywrapper {
/* Ensure it occupies the grid area */
width: 100%;
grid-area: main; /* Assign to main grid area */
padding: 0 20px; /* Add padding to maintain spacing */
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
margin-left: 20px; /* Adjust margins to fit within the layout */
}
}
@media screen and (max-width: 767px) {
/* Adjust layout for mobile phones */
body {
padding: 10px; /* Add padding to body for better spacing */
}
/* Adjust layout for mobile phones */
body {
padding: 10px; /* Add padding to body for better spacing */
}
div.document {
width: 100%; /* Set width to full for mobile phones */
margin: 10px auto; /* Center the document */
display: block; /* Revert to block layout */
}
div.document {
width: 100%; /* Set width to full for mobile phones */
margin: 10px auto; /* Center the document */
display: block; /* Revert to block layout */
}
div.sphinxsidebar {
display: none; /* Hide sidebar on mobile phones */
}
div.sphinxsidebar {
display: none; /* Hide sidebar on mobile phones */
}
}

View File

@ -7,7 +7,7 @@
<title>Index &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="_static/custom.css?v=d9b65b63" />
<script src="_static/documentation_options.js?v=5929fcd5"></script>
<script src="_static/doctools.js?v=9a2dae69"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
@ -70,6 +70,18 @@
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="releasenotes/1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="releasenotes/0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="releasenotes/0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="releasenotes/0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

View File

@ -8,7 +8,7 @@
<title>Welcome to mediacurators documentation! &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="_static/custom.css?v=d9b65b63" />
<script src="_static/documentation_options.js?v=5929fcd5"></script>
<script src="_static/doctools.js?v=9a2dae69"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
@ -37,15 +37,28 @@
<h1>Welcome to mediacurators documentation!<a class="headerlink" href="#welcome-to-mediacurator-s-documentation" title="Link to this heading"></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>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>
<li><p>Batch recode videos to more modern codecs (x265 / AV1) based on filters: extensions, 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="admonition warning">
<p class="admonition-title">Warning</p>
<p><strong>Breaking changes in version 1.0.1:</strong></p>
<p>Starting with version 1.0.1, the command-line interface (CLI) has undergone major changes, and the usage is <strong>not backwards-compatible</strong> with previous versions.</p>
<p>If you are using <cite>mediacurator &lt; 1.0.1</cite>, please refer to the legacy documentation available below (<a class="reference internal" href="#legacy-docs"><span class="std std-ref">Legacy Documentation (Pre 1.0)</span></a>).</p>
</div>
<section id="documentation">
<h2>Documentation<a class="headerlink" href="#documentation" title="Link to this heading"></a></h2>
<div class="toctree-wrapper compound">
<p class="caption" role="heading"><span class="caption-text">Usage:</span></p>
<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/warnings.html">Warnings</a><ul>
<li class="toctree-l2"><a class="reference internal" href="usage/warnings.html#example-use-cases-for-the-delete-flag">Example use cases for the <cite>delete</cite> Flag</a></li>
<li class="toctree-l2"><a class="reference internal" href="usage/warnings.html#important-notes">Important Notes</a></li>
<li class="toctree-l2"><a class="reference internal" href="usage/warnings.html#dry-run-example-without-deletion">Dry run example (without deletion)</a></li>
</ul>
</li>
<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-from-pypi">Install from PyPi</a></li>
@ -59,6 +72,8 @@
<li class="toctree-l2"><a class="reference internal" href="usage/manual.html#options">Options</a></li>
<li class="toctree-l2"><a class="reference internal" href="usage/manual.html#examples">Examples</a></li>
<li class="toctree-l2"><a class="reference internal" href="usage/manual.html#see-also">See Also</a></li>
<li class="toctree-l2"><a class="reference internal" href="usage/manual.html#glossary">Glossary</a></li>
<li class="toctree-l2"><a class="reference internal" href="usage/manual.html#error-handling">Error Handling</a></li>
<li class="toctree-l2"><a class="reference internal" href="usage/manual.html#author">Author</a></li>
</ul>
</li>
@ -70,9 +85,9 @@
</ul>
</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>
<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>
</li>
</ul>
@ -81,6 +96,30 @@
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="releasenotes/1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
</div>
<hr class="docutils" />
</section>
<section id="legacy-documentation-pre-1-0">
<span id="legacy-docs"></span><h2>Legacy Documentation (Pre 1.0)<a class="headerlink" href="#legacy-documentation-pre-1-0" title="Link to this heading"></a></h2>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.</p>
</div>
<div class="toctree-wrapper compound">
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/errors.html">Errors</a></li>
</ul>
</div>
<div class="toctree-wrapper compound">
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="releasenotes/0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="releasenotes/0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="releasenotes/0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>
@ -94,6 +133,7 @@
<li class="toctree-l1"><a class="reference internal" href="releasenotes/0.0.1-changelog.html">MediaCurator 0.0.1 Release Notes</a></li>
</ul>
</div>
</section>
</section>
@ -128,6 +168,18 @@
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="releasenotes/1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="releasenotes/0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="releasenotes/0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="releasenotes/0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

View File

@ -0,0 +1,179 @@
<!DOCTYPE html>
<html lang="en" data-content_root="../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Errors &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="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="MediaCurator 0.0.13 Release Notes" href="../releasenotes/0.0.13-changelog.html" />
<link rel="prev" title="Use cases" href="use_cases.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="errors">
<h1>Errors<a class="headerlink" href="#errors" title="Link to this heading"></a></h1>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.</p>
</div>
<p>FFmpeg can detect quite a few errors in the encoding of your source videos encoding and can also be used to repair these errors.</p>
<section id="repairable-encoding-errors">
<h2>Repairable Encoding Errors<a class="headerlink" href="#repairable-encoding-errors" title="Link to this heading"></a></h2>
<p>Here are some example errors that mediacurator will print and can possibly repair by re-encoding:</p>
<ul class="simple">
<li><p><strong>“Referenced QT chapter track not found”</strong>: Indicates that the video references a chapter that doesnt exist.</p></li>
<li><p><strong>“Error, header damaged or not MPEG-4 header”</strong>: The files header is corrupted or missing.</p></li>
<li><p><strong>“Header missing”</strong>: The file lacks the necessary header information for decoding.</p></li>
<li><p><strong>“SEI type”</strong>: Issues related to SEI (Supplemental Enhancement Information) data.</p></li>
<li><p><strong>“no frame!”</strong>: No video frames available for processing.</p></li>
<li><p><strong>“Error while decoding MPEG audio frame.”</strong>: Issues decoding the audio stream.</p></li>
<li><p><strong>“big_values too big”</strong>: Indicates that certain values in the file are larger than expected.</p></li>
<li><p></p></li>
</ul>
</section>
<section id="ffmpeg-issues">
<h2>FFmpeg Issues<a class="headerlink" href="#ffmpeg-issues" title="Link to this heading"></a></h2>
<p>While using FFmpeg, you may encounter other errors (such as segfaults) depending on your version. Mediacurator will also print information when that occurs and will move on to the next video after cleaning up any failures.</p>
<p>If you experience these errors, consider the following steps:</p>
<ul class="simple">
<li><p><strong>Update FFmpeg</strong>: Ensure you are using the latest version by downloading it from <a class="reference external" href="https://ffmpeg.org/download.html">ffmpeg.org</a>, as many distributions provide outdated versions in their repositories.</p></li>
<li><p><strong>Run with Verbose Option</strong>: Execute mediacurator with the verbose print option, which will display the raw FFmpeg output for better troubleshooting.</p></li>
<li><p><strong>Retry</strong>: In my experience, some errors do not necessarily recur…</p></li>
</ul>
</section>
<section id="other-bugs">
<h2>Other Bugs<a class="headerlink" href="#other-bugs" title="Link to this heading"></a></h2>
<p>If you encounter other bugs, issues, or would like 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>
<p>For further assistance, you can reach out through the GitHub repository or the projects support channels.</p>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/mclogo4x.png" alt="Logo of mediacurator"/>
</a></p>
<h1 class="logo"><a href="../index.html">mediacurator</a></h1>
<h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Usage:</span></p>
<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/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/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</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"><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 current"><a class="current reference internal" href="#">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.10-changelog.html">MediaCurator 0.0.10 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.9-changelog.html">MediaCurator 0.0.9 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.8-changelog.html">MediaCurator 0.0.8 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.7-changelog.html">MediaCurator 0.0.7 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.6-changelog.html">MediaCurator 0.0.6 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.5-changelog.html">MediaCurator 0.0.5 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.4-changelog.html">MediaCurator 0.0.4 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.1-changelog.html">MediaCurator 0.0.1 Release Notes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="use_cases.html" title="previous chapter">Use cases</a></li>
<li>Next: <a href="../releasenotes/0.0.13-changelog.html" title="next chapter">MediaCurator 0.0.13 Release Notes</a></li>
</ul></li>
</ul>
</div>
<search 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" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2020, Fabrice Quenneville.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.4.7</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
|
<a href="../_sources/legacy_usage/errors.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@ -0,0 +1,185 @@
<!DOCTYPE html>
<html lang="en" data-content_root="../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Installation &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="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="Quickstart" href="quickstart.html" />
<link rel="prev" title="Warnings" href="warnings.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="installation">
<h1>Installation<a class="headerlink" href="#installation" title="Link to this heading"></a></h1>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.</p>
</div>
<p>This package has been tested on GNU/Linux (e.g., Debian, Ubuntu, Fedora) and Windows, and requires FFmpeg to be installed. For now, it will be distributed on <a class="reference external" href="https://github.com/fabquenneville/mediacurator.git">GitHub</a>.</p>
<section id="install-ffmpeg">
<h2>Install FFmpeg<a class="headerlink" href="#install-ffmpeg" title="Link to this heading"></a></h2>
<p>To install FFmpeg, you can follow the instructions for your platform:</p>
<ul>
<li><dl>
<dt><strong>On Debian and Ubuntu</strong>:</dt><dd><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>apt<span class="w"> </span>update
sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>ffmpeg
</pre></div>
</div>
</dd>
</dl>
</li>
<li><dl>
<dt><strong>On Fedora</strong>:</dt><dd><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>dnf<span class="w"> </span>install<span class="w"> </span>ffmpeg
</pre></div>
</div>
</dd>
</dl>
</li>
<li><p><strong>On Windows</strong>:
- Download the latest build from <a class="reference external" href="https://ffmpeg.org/download.html">FFmpeg</a>.
- Follow the installation instructions provided on the site.</p></li>
</ul>
<p>To verify your FFmpeg installation, you can run:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ffmpeg<span class="w"> </span>-version
</pre></div>
</div>
</section>
<section id="install-from-pypi">
<h2>Install from PyPi<a class="headerlink" href="#install-from-pypi" title="Link to this heading"></a></h2>
<p>You can install the <cite>mediacurator</cite> package directly from PyPi using the following command:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>pip<span class="w"> </span>install<span class="w"> </span>MediaCurator
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/mclogo4x.png" alt="Logo of mediacurator"/>
</a></p>
<h1 class="logo"><a href="../index.html">mediacurator</a></h1>
<h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Usage:</span></p>
<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/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/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="warnings.html">Warnings</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">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>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.10-changelog.html">MediaCurator 0.0.10 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.9-changelog.html">MediaCurator 0.0.9 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.8-changelog.html">MediaCurator 0.0.8 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.7-changelog.html">MediaCurator 0.0.7 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.6-changelog.html">MediaCurator 0.0.6 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.5-changelog.html">MediaCurator 0.0.5 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.4-changelog.html">MediaCurator 0.0.4 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.1-changelog.html">MediaCurator 0.0.1 Release Notes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="warnings.html" title="previous chapter">Warnings</a></li>
<li>Next: <a href="quickstart.html" title="next chapter">Quickstart</a></li>
</ul></li>
</ul>
</div>
<search 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" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2020, Fabrice Quenneville.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.4.7</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
|
<a href="../_sources/legacy_usage/installation.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@ -0,0 +1,334 @@
<!DOCTYPE html>
<html lang="en" data-content_root="../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Manual &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="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" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="manual">
<h1>Manual<a class="headerlink" href="#manual" title="Link to this heading"></a></h1>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.</p>
</div>
<section id="name">
<h2>Name<a class="headerlink" href="#name" title="Link to this heading"></a></h2>
<p>mediacurator</p>
</section>
<section id="synopsis">
<h2>Synopsis<a class="headerlink" href="#synopsis" title="Link to this heading"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>&lt;command&gt;<span class="w"> </span><span class="o">[</span>options<span class="o">]</span>
mediacurator<span class="w"> </span><span class="o">[</span>list,convert<span class="o">]</span><span class="w"> </span><span class="o">[</span>-del<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-in:any,avi,divx,flv,m4v,mkv,mp4,mpg,ogm,vid,webm,wmv<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv,vob<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-out:mkv/mp4,x265/av1<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-print:list,formated,verbose<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-dirs/-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>Available commands:</strong>
- <cite>list</cite>: List all videos with specified filters.
- <cite>convert</cite>: Convert videos to specified formats.</p>
<p><strong>Options:</strong></p>
<ul class="simple">
<li><p><cite>-del</cite>: Delete found results after successful operations. <strong>Use with caution</strong>.</p></li>
<li><p><cite>-in &lt;input&gt;</cite>: Specify input file formats (default: <cite>any</cite>).</p></li>
<li><p><cite>-filters &lt;filter&gt;</cite>: Apply filters to the selection of videos.</p></li>
<li><p><cite>-out &lt;output&gt;</cite>: Specify output formats (default: <cite>mkv</cite>, <cite>x265</cite>).</p></li>
<li><p><cite>-print &lt;print_option&gt;</cite>: Set print options (default: <cite>list</cite>).</p></li>
<li><p><cite>-files &lt;file&gt;</cite>: Specify files to process.</p></li>
<li><p><cite>-dirs &lt;directory&gt;</cite>: Specify directories to process.</p></li>
</ul>
<p><strong>For multiple files or filenames, use double comma separated values (,,).</strong></p>
<p><strong>Default options (if not specified):</strong></p>
<ul class="simple">
<li><p><cite>-in</cite>: <cite>any</cite></p></li>
<li><p><cite>-filters</cite>: (none)</p></li>
<li><p><cite>-out</cite>: <cite>mkv</cite>, <cite>x265</cite></p></li>
<li><p><cite>-print</cite>: <cite>list</cite></p></li>
</ul>
</section>
<section id="description">
<h2>Description<a class="headerlink" href="#description" title="Link to this heading"></a></h2>
<p><strong>mediacurator</strong> is a Python command-line tool designed to manage a media database. It allows you to:</p>
<ul class="simple">
<li><p>List all videos and their metadata, optionally filtered by specified criteria.</p></li>
<li><p>Batch find, repair, or convert videos with encoding errors.</p></li>
<li><p>Batch recode videos to modern codecs (e.g., x265, AV1) based on filters (e.g., container, codec, resolution).</p></li>
</ul>
</section>
<section id="options">
<h2>Options<a class="headerlink" href="#options" title="Link to this heading"></a></h2>
<section id="list">
<h3>list<a class="headerlink" href="#list" title="Link to this heading"></a></h3>
<blockquote>
<div><p>Search and list videos filtered by the user-provided parameters.</p>
</div></blockquote>
</section>
<section id="convert">
<h3>convert<a class="headerlink" href="#convert" title="Link to this heading"></a></h3>
<blockquote>
<div><p>Search and convert all videos filtered by the user-provided parameters.</p>
</div></blockquote>
</section>
<section id="del">
<h3>-del:<a class="headerlink" href="#del" title="Link to this heading"></a></h3>
<blockquote>
<div><p>Deletes the original videos after successful completion of operations (e.g., conversion or listing). <strong>Use with caution</strong>.</p>
<p>See <a class="reference internal" href="warnings.html"><span class="doc">Warnings</span></a></p>
</div></blockquote>
</section>
<section id="in">
<h3>-in:<a class="headerlink" href="#in" title="Link to this heading"></a></h3>
<blockquote>
<div><p>[<strong>any</strong>, avi, divx, flv, m4v, mkv, mp4, mpg, ogm, vid, webm, wmv]</p>
<p>Filters videos by file format (container extensions). The default is <cite>any</cite>, meaning all formats are included.</p>
</div></blockquote>
</section>
<section id="filters">
<h3>-filters:<a class="headerlink" href="#filters" title="Link to this heading"></a></h3>
<blockquote>
<div><p>[fferror, old, lowres, hd, 720p, 1080p, uhd, mpeg, mpeg4, x264, wmv3, wmv]</p>
<p>Filters videos based on specific criteria:</p>
<ul class="simple">
<li><p><strong>fferror</strong>: Select videos with encoding errors (see <a class="reference internal" href="errors.html"><span class="doc">Errors</span></a>)</p></li>
<li><p><strong>old</strong>: Select videos using outdated codecs (anything except hevc or av1)</p></li>
<li><p><strong>hd</strong>: Select videos in HD (720p, 1080p, UHD)</p></li>
<li><p><strong>lowres</strong>: Select videos that are not in HD</p></li>
<li><p><strong>uhd</strong>: Select Ultra-HD videos (width or height &gt;= 2160)</p></li>
<li><p><strong>1080p</strong>: Select Full-HD videos (1440 &lt;= width &lt; 2160 or 1080 &lt;= height &lt; 2160)</p></li>
<li><p><strong>720p</strong>: Select HD videos (1280 &lt;= width &lt; 1440 or 720 &lt;= height &lt; 1080)</p></li>
<li><p><strong>sd</strong>: Select standard-definition videos (480 &lt;= height &lt; 720)</p></li>
<li><p><strong>subsd</strong>: Select substandard-definition videos (height &lt; 480)</p></li>
<li><p><strong>mpeg, mpeg4, x264, wmv3, wmv, vob</strong>: Filter by video codec</p></li>
</ul>
</div></blockquote>
</section>
<section id="out">
<h3>-out:<a class="headerlink" href="#out" title="Link to this heading"></a></h3>
<blockquote>
<div><p>[<strong>mkv</strong>/mp4, x265/av1]</p>
<p>Specifies the output format for video conversions:</p>
<ul class="simple">
<li><p><strong>mkv</strong>: (<strong>Default</strong>) Package the output video in a <a class="reference external" href="https://en.wikipedia.org/wiki/Matroska">Matroska</a> container.</p></li>
<li><p><strong>mp4</strong>: Package the output video in an MP4 container.</p></li>
<li><p><strong>x265</strong> or <strong>hevc</strong>: (<strong>Default</strong>) Encode the video using <a class="reference external" href="https://en.wikipedia.org/wiki/X265">x265</a> (HEVC).</p></li>
<li><p><strong>av1</strong>: Encode the video using <a class="reference external" href="https://en.wikipedia.org/wiki/AV1">AOMedia Video 1</a> (AV1).</p></li>
</ul>
</div></blockquote>
</section>
<section id="print">
<h3>-print:<a class="headerlink" href="#print" title="Link to this heading"></a></h3>
<blockquote>
<div><p>[<strong>list</strong>, formated, verbose]</p>
<p>Specifies how the output should be displayed:</p>
<ul class="simple">
<li><p><strong>list</strong>: (<strong>Default</strong>) Prints video info in a concise, single-line format.</p></li>
</ul>
<a class="reference internal image-reference" href="../_images/Screenshot-print_list-single.png"><img alt="List videos (single-line output)" src="../_images/Screenshot-print_list-single.png" style="width: 600px;" />
</a>
<ul class="simple">
<li><p><strong>formated</strong>: Prints video info in a more readable format with line breaks.</p></li>
</ul>
<a class="reference internal image-reference" href="../_images/Screenshot-print_formatted-single.png"><img alt="List videos (formatted output)" src="../_images/Screenshot-print_formatted-single.png" style="width: 400px;" />
</a>
<ul class="simple">
<li><p><strong>verbose</strong>: Prints the FFmpeg output during conversions.</p></li>
</ul>
</div></blockquote>
</section>
<section id="dirs">
<h3>-dirs:<a class="headerlink" href="#dirs" title="Link to this heading"></a></h3>
<blockquote>
<div><p>[“/mnt/media/”,,”/mnt/media2/”]</p>
<p>Specifies directories to scan, separated by <strong>double commas</strong> (,,).</p>
</div></blockquote>
</section>
<section id="files">
<h3>-files:<a class="headerlink" href="#files" title="Link to this heading"></a></h3>
<blockquote>
<div><p>[“/mnt/media/video.avi”,,”/mnt/media2/video2.mp4”]</p>
<p>Specifies individual video files to process, separated by <strong>double commas</strong> (,,).</p>
</div></blockquote>
</section>
</section>
<section id="examples">
<h2>Examples<a class="headerlink" href="#examples" title="Link to this heading"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># This command lists all videos in the specified directories that use old codecs and</span>
<span class="c1"># formats the output.</span>
mediacurator<span class="w"> </span>list<span class="w"> </span>-filters:old<span class="w"> </span>-print:formated<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>,,<span class="s2">&quot;/mnt/media2/&quot;</span>
<span class="c1"># This command converts all MPEG4 videos found in the specified directories to AV1 format</span>
<span class="c1"># in MP4 containers and deletes the originals.</span>
mediacurator<span class="w"> </span>convert<span class="w"> </span>-del<span class="w"> </span>-filters:mpeg4<span class="w"> </span>-out:av1,mp4<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>,,<span class="s2">&quot;/mnt/media2/&quot;</span>
<span class="c1"># This command converts AVI or MPG videos, displays detailed output during conversion, and</span>
<span class="c1"># deletes originals.</span>
mediacurator<span class="w"> </span>convert<span class="w"> </span>-del<span class="w"> </span>-in:avi,mpg<span class="w"> </span>-print:formated,verbose<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>,,<span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
<p>For more examples, see <a class="reference internal" href="use_cases.html"><span class="doc">Use cases</span></a></p>
</section>
<section id="see-also">
<h2>See Also<a class="headerlink" href="#see-also" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p><a class="reference external" href="https://ffmpeg.org/">FFmpeg</a></p></li>
</ul>
</section>
<section id="glossary">
<h2>Glossary<a class="headerlink" href="#glossary" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p><strong>Codec</strong>: A program or device that compresses and decompresses digital media.</p></li>
<li><p><strong>Container</strong>: A file format that holds video, audio, and metadata.</p></li>
<li><p><strong>UHD</strong>: Ultra High Definition, refers to video resolutions of 3840x2160 pixels or higher.</p></li>
</ul>
</section>
<section id="error-handling">
<h2>Error Handling<a class="headerlink" href="#error-handling" title="Link to this heading"></a></h2>
<p>Common issues users might encounter include:</p>
<ul class="simple">
<li><p><strong>Encoding Errors</strong>: If videos have encoding errors, they can be filtered using the <cite>-filters fferror</cite> option.</p></li>
<li><p><strong>Unsupported Formats</strong>: Ensure that input formats specified in <cite>-in</cite> are supported by mediacurator.</p></li>
</ul>
</section>
<section id="author">
<h2>Author<a class="headerlink" href="#author" title="Link to this heading"></a></h2>
<p>Fabrice Quenneville</p>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/mclogo4x.png" alt="Logo of mediacurator"/>
</a></p>
<h1 class="logo"><a href="../index.html">mediacurator</a></h1>
<h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Usage:</span></p>
<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/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/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</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>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.10-changelog.html">MediaCurator 0.0.10 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.9-changelog.html">MediaCurator 0.0.9 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.8-changelog.html">MediaCurator 0.0.8 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.7-changelog.html">MediaCurator 0.0.7 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.6-changelog.html">MediaCurator 0.0.6 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.5-changelog.html">MediaCurator 0.0.5 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.4-changelog.html">MediaCurator 0.0.4 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.1-changelog.html">MediaCurator 0.0.1 Release Notes</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>
<search 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" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2020, Fabrice Quenneville.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.4.7</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
|
<a href="../_sources/legacy_usage/manual.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@ -0,0 +1,175 @@
<!DOCTYPE html>
<html lang="en" data-content_root="../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Quickstart &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="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="Manual" href="manual.html" />
<link rel="prev" title="Installation" href="installation.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="quickstart">
<h1>Quickstart<a class="headerlink" href="#quickstart" title="Link to this heading"></a></h1>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.</p>
</div>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span><span class="o">[</span>list,convert<span class="o">]</span><span class="w"> </span><span class="o">[</span>-del<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-in:any,avi,mkv,wmv,mpg,mp4,m4v,flv,vid,divx,ogm,webm<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-out:mkv/mp4,x265/av1<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-print:list,formated,verbose<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-dirs/-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><span class="c1"># List all videos with old codec in formated format</span>
mediacurator<span class="w"> </span>list<span class="w"> </span>-filters:old<span class="w"> </span>-print:formated<span class="w"> </span>-dirs:/mnt/media/<span class="w"> </span>&gt;&gt;<span class="w"> </span>../medlist.txt
<span class="c1"># Convert all videos with the codec mpeg4 in a mp4 using the av1 video codec and the delete the originals</span>
mediacurator<span class="w"> </span>convert<span class="w"> </span>-del<span class="w"> </span>-filters:mpeg4<span class="w"> </span>-out:av1,mp4<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/Movies/&quot;</span>
<span class="c1"># Convert any video with avi or mpg extensions, print formated text including ffmpeg&#39;s output and then delete the originals</span>
mediacurator<span class="w"> </span>convert<span class="w"> </span>-del<span class="w"> </span>-in:avi,mpg<span class="w"> </span>-print:formated,verbose<span class="w"> </span>-dirs:/mnt/media/
</pre></div>
</div>
<p>More examples in <a class="reference internal" href="use_cases.html"><span class="doc">Use cases</span></a></p>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/mclogo4x.png" alt="Logo of mediacurator"/>
</a></p>
<h1 class="logo"><a href="../index.html">mediacurator</a></h1>
<h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Usage:</span></p>
<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/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/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</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 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="errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.10-changelog.html">MediaCurator 0.0.10 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.9-changelog.html">MediaCurator 0.0.9 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.8-changelog.html">MediaCurator 0.0.8 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.7-changelog.html">MediaCurator 0.0.7 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.6-changelog.html">MediaCurator 0.0.6 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.5-changelog.html">MediaCurator 0.0.5 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.4-changelog.html">MediaCurator 0.0.4 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.1-changelog.html">MediaCurator 0.0.1 Release Notes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="installation.html" title="previous chapter">Installation</a></li>
<li>Next: <a href="manual.html" title="next chapter">Manual</a></li>
</ul></li>
</ul>
</div>
<search 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" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2020, Fabrice Quenneville.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.4.7</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
|
<a href="../_sources/legacy_usage/quickstart.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@ -0,0 +1,221 @@
<!DOCTYPE html>
<html lang="en" data-content_root="../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Use cases &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="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="Errors" href="errors.html" />
<link rel="prev" title="Manual" href="manual.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="use-cases">
<h1>Use cases<a class="headerlink" href="#use-cases" title="Link to this heading"></a></h1>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.</p>
</div>
<p>The main reasons to use mediacurator would be the following:</p>
<ul class="simple">
<li><dl class="simple">
<dt><a class="reference internal" href="#legacy-list-cmd"><span class="std std-ref">Print information</span></a> on a video library such as:</dt><dd><ul>
<li><p>How many videos of the lot are in HD vs standard or substandard definitions</p></li>
<li><p>What videos are in older codecs</p></li>
<li><p>Are there videos in the library with encoding or corruption errors</p></li>
</ul>
</dd>
</dl>
</li>
<li><p><a class="reference internal" href="#legacy-purge"><span class="std std-ref">Purge</span></a> selected videos in a media library</p></li>
<li><p><a class="reference internal" href="#legacy-fferror"><span class="std std-ref">Batch repair encoding errors</span></a> on selected videos in a media library</p></li>
<li><p><a class="reference internal" href="#legacy-convert"><span class="std std-ref">Batch re-encode</span></a> videos from an old codec to <a class="reference external" href="https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding">High Efficiency Video Coding</a></p></li>
</ul>
<section id="print-information">
<span id="legacy-list-cmd"></span><h2>Print information<a class="headerlink" href="#print-information" title="Link to this heading"></a></h2>
<p>List all videos with old codec in formatted output</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>-filters:old<span class="w"> </span>-print:formated<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>,,<span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
<p>List all videos with substandard definitions with a formatted output</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>-filters:subsd<span class="w"> </span>-print:formated<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>,,<span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
</section>
<section id="purge">
<span id="legacy-purge"></span><h2>Purge<a class="headerlink" href="#purge" title="Link to this heading"></a></h2>
<p>Please see <a class="reference internal" href="warnings.html"><span class="doc">Warnings</span></a></p>
<p>List and delete all videos using the <a class="reference external" href="https://en.wikipedia.org/wiki/Windows_Media_Video">Windows Media Video</a> codecs</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>--delete<span class="w"> </span>-filters:wmv<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>,,<span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
<p>List and delete all videos using <a class="reference external" href="https://en.wikipedia.org/wiki/Audio_Video_Interleave">Audio Video Interleave</a></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>--delete<span class="w"> </span>-in:avi<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>,,<span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
<p>List and delete any videos with encoding errors</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>--delete<span class="w"> </span>-filters:fferror<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>,,<span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
</section>
<section id="batch-repair-encoding-errors">
<span id="legacy-fferror"></span><h2>Batch repair encoding errors<a class="headerlink" href="#batch-repair-encoding-errors" title="Link to this heading"></a></h2>
<p>List all videos with encoding errors</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>-filters:fferror<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>,,<span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
<p>List and delete any videos with encoding errors</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>--delete<span class="w"> </span>-filters:fferror<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>,,<span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
<p>Convert all videos with encoding errors to <a class="reference external" href="https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding">High Efficiency Video Coding</a> and delete the originals</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>convert<span class="w"> </span>--delete<span class="w"> </span>-filters:fferror<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>,,<span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
</section>
<section id="batch-re-encode">
<span id="legacy-convert"></span><h2>Batch re-encode<a class="headerlink" href="#batch-re-encode" title="Link to this heading"></a></h2>
<p>Convert all videos with old codecs to <a class="reference external" href="https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding">High Efficiency Video Coding</a> to save space and delete the originals</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>convert<span class="w"> </span>--delete<span class="w"> </span>-filters:old<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>,,<span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
<p>Convert all videos with the codec mpeg4 to an mkv container using the av1 video codec</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>convert<span class="w"> </span>-filters:mpeg4<span class="w"> </span>-out:av1,mkv<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>,,<span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
<p>Convert any video with avi or mpg extensions, print formatted text including ffmpegs output, and then delete the originals</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>convert<span class="w"> </span>--delete<span class="w"> </span>-in:avi,mpg<span class="w"> </span>-print:formated,verbose<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>,,<span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/mclogo4x.png" alt="Logo of mediacurator"/>
</a></p>
<h1 class="logo"><a href="../index.html">mediacurator</a></h1>
<h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Usage:</span></p>
<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/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/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</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"><a class="reference internal" href="manual.html">Manual</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.10-changelog.html">MediaCurator 0.0.10 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.9-changelog.html">MediaCurator 0.0.9 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.8-changelog.html">MediaCurator 0.0.8 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.7-changelog.html">MediaCurator 0.0.7 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.6-changelog.html">MediaCurator 0.0.6 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.5-changelog.html">MediaCurator 0.0.5 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.4-changelog.html">MediaCurator 0.0.4 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.1-changelog.html">MediaCurator 0.0.1 Release Notes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="manual.html" title="previous chapter">Manual</a></li>
<li>Next: <a href="errors.html" title="next chapter">Errors</a></li>
</ul></li>
</ul>
</div>
<search 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" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2020, Fabrice Quenneville.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.4.7</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
|
<a href="../_sources/legacy_usage/use_cases.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@ -0,0 +1,205 @@
<!DOCTYPE html>
<html lang="en" data-content_root="../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Warnings &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="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="mediacurator 1.0.1 Release Notes" href="../releasenotes/1.0.1-changelog.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="warnings">
<h1>Warnings<a class="headerlink" href="#warnings" title="Link to this heading"></a></h1>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.</p>
</div>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Before using the <strong>delete feature</strong>, we strongly recommend running several dry runs to get acquainted with <cite>mediacurator</cite>, as incorrect usage can cause irreversible damage to your media library.</p>
</div>
<p>The <cite>-del</cite> flag will <strong>permanently delete</strong> files, so it is crucial to ensure that the command is executed correctly. Below are some examples of how the delete feature works.</p>
<section id="example-use-cases-for-the-del-flag">
<h2>Example use Cases for the <cite>-del</cite> Flag<a class="headerlink" href="#example-use-cases-for-the-del-flag" title="Link to this heading"></a></h2>
<ol class="arabic simple">
<li><p><strong>Delete all non-HD (low-resolution) videos in a folder:</strong></p></li>
</ol>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>-del<span class="w"> </span>-filters:lowres<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>
</pre></div>
</div>
<ol class="arabic simple" start="2">
<li><p><strong>Delete all substandard quality videos in a folder:</strong></p></li>
</ol>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>-del<span class="w"> </span>-filters:subsd<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>
</pre></div>
</div>
<a class="reference internal image-reference" href="../_images/Legacy-Screenshot-delete.png"><img alt="Deleting videos" src="../_images/Legacy-Screenshot-delete.png" style="width: 600px;" />
</a>
<ol class="arabic simple" start="3">
<li><p><strong>Delete all videos in a folder with encoding errors:</strong></p></li>
</ol>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>-del<span class="w"> </span>-filters:fferror<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>
</pre></div>
</div>
<ol class="arabic simple" start="4">
<li><p><strong>Convert (repair) and then delete all videos in a folder with encoding errors:</strong></p></li>
</ol>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>convert<span class="w"> </span>-del<span class="w"> </span>-filters:fferror<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>
</pre></div>
</div>
<ol class="arabic simple" start="5">
<li><p><strong>Delete all videos in a folder:</strong></p></li>
</ol>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>-del<span class="w"> </span>-filters:lowres<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>
</pre></div>
</div>
</section>
<section id="important-notes">
<h2>Important Notes<a class="headerlink" href="#important-notes" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p><strong>Irreversibility</strong>: All of these commands involve permanent deletion. Once a file is deleted using the <cite>-del</cite> flag, it cannot be recovered.</p></li>
<li><p><strong>Run without `-del` first</strong>: Always perform several dry runs by omitting the <cite>-del</cite> flag to ensure that the correct files are selected for deletion. Familiarizing yourself with the tool before using destructive commands is essential to avoid unintended consequences.</p></li>
<li><p><strong>Specific File Selection</strong>: If youre unsure about applying filters to an entire directory, you can use the <cite>-files</cite> option to target individual files for deletion or conversion, further reducing the risk of unintended deletions.</p></li>
<li><p><strong>Backup Recommendation</strong>: Before running any commands with the <cite>-del</cite> flag, it is a good practice to back up your media library or the specific directories being processed, especially if they contain valuable or irreplaceable files.</p></li>
</ul>
</section>
<section id="dry-run-example-without-deletion">
<h2>Dry run example (without deletion)<a class="headerlink" href="#dry-run-example-without-deletion" title="Link to this heading"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>-filters:lowres<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/&quot;</span>
</pre></div>
</div>
<p>Make sure you carefully verify the output and files selected during the dry runs to prevent accidental data loss.</p>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/mclogo4x.png" alt="Logo of mediacurator"/>
</a></p>
<h1 class="logo"><a href="../index.html">mediacurator</a></h1>
<h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Usage:</span></p>
<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/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/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</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>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.10-changelog.html">MediaCurator 0.0.10 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.9-changelog.html">MediaCurator 0.0.9 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.8-changelog.html">MediaCurator 0.0.8 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.7-changelog.html">MediaCurator 0.0.7 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.6-changelog.html">MediaCurator 0.0.6 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.5-changelog.html">MediaCurator 0.0.5 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.4-changelog.html">MediaCurator 0.0.4 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.1-changelog.html">MediaCurator 0.0.1 Release Notes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="../releasenotes/1.0.1-changelog.html" title="previous chapter">mediacurator 1.0.1 Release Notes</a></li>
<li>Next: <a href="installation.html" title="next chapter">Installation</a></li>
</ul></li>
</ul>
</div>
<search 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" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&#169;2020, Fabrice Quenneville.
|
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.4.7</a>
&amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
|
<a href="../_sources/legacy_usage/warnings.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@ -2,8 +2,5 @@
# Project: mediacurator
# Version: 0.0.13
# The remainder of this file is compressed using zlib.
xÚ••żRă0Ć{=…®u°ó?”Ü\qĹ1†ˇd„Ľq4ČRN<4E>ŻÇ“`[
±/™¬®“´űíO»Ĺ~\«0ŽZ—_Jö&­,+ࢲđČ™;X»Rž˙ WĚń55<35>€â:˛Z<CB9B>1Úü—vĂ„ˇ­¶zK
PBĺđÖŻ´{mKĐßÍěÓrͤNĆH®K rÁxe<78>ÓćóýĂŇ:»*A9ć„VgD
ëy™G|˝IMšÔĄĘŐĽ•6e[†”MßŢl“]Ŕ˙ëŹÎ+ ˇ<>Me
<EFBFBD>šŘ˛É$ťjfąuk­ú4ęšJ;°é d _3U€ÔEwЧňBÍDú‰Ň6<C587>Ţz˝nTGPi,+Ĺa)Jî,˘5Ľ·a,m<>Ó†(mKá´FGÂĆ(kڎ&‘¨ Šš`¨i$jŠ˘¦j‰šˇ¨†šG˘ć(jގ‘¨ŠZśBeK*;¶¤şkźfGfję-R˙ć Üůř˛^ČÄŻeďPÝotß˝ę—w1Ę:&eë˛ntçkű—P˘dŞbňPěßĂTŰsü­®Ëď‰ö1/Ľůľ“ŚçPŰ÷$z_ϱ˝ĺ+3µCG„»H0ćp#_˘(îš
xΪ•MΣ“0Ηο|<7C>8zΠ} ουθΛΑu<><75>γ±Γ2†¤&AνΝαΧσ,<OΒ¦—°»<C2B0>_v»μΒ¤ψΚm²η<C2B2>~Nβ”T<E2809D>ζpWi80<38>AΟN¦δ<C2A6><CEB4><EFBFBD>Τ°Qƒ`2ƒθx¥¤Ί)φL EΪψBδ¤<CEB4>ΧQΆό+υO[ ς¦Ή<C2A6>®n™d<E284A2>Σΐγ p&K F²²JQ#Υίί4©½«„΅¦<CE85>βQΔ!§μr`®δ;3kϋΈϋιBk<42>k^OΩK΄>oΫkςjx8ςt―€¤³δY/η,sΐ)ϋΈΙ<CE88>w:ΌΠζΐΚμfH7<>{US'z”<7A>lι¥ΟΚαf]µo~£‘»=χ°―G)Z{!΄΅<CE84>ΫRϋD†N}χ]<5D><>K**Κ½RΦlEήµΧγποUΑΎΥΪ]Ί$®.VζΓ<CEB6>ϋΘ]H―<48>ΈΤδ³<06>ή<EFBFBD>u~RUΏxΉ_¦wθ^»ξ.rχ<72>ϋOφwMΩ΄ηƒYpΎΔ½΅«¥Μ*έTp΄<70>g Ω†¨!<21>ύΕ<CF8D>κFΡp¨5…4 οY2KcvΆ".σaΝ¦όΊ$<24>1υ<31><CF85>)<29>z<EFBFBD><7A>6<EFBFBD>ΌoΆ¨$”•ΰ°¥g<16><1A>Ϋ<”6Ηis”¶¥-pΪ£-aK”µΔP«@Τ
E­0Τ:µFQk µ DmPΤCmQ[µΕP»@ΤEν¦Piΰ<69>J]Cjψ-ERΗ<52><CE97>@Uύ<55>1¤φ™ψdνϋz GΎξ]ήΣ[;h]ϋφ΄wAOmft%Oμbd ϋ·οδΪύΚ<*½

View File

@ -8,7 +8,7 @@
<title>MediaCurator 0.0.1 Release Notes &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@ -109,8 +109,20 @@
<li class="toctree-l1"><a class="reference internal" href="../usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul class="current">
<ul>
<li class="toctree-l1"><a class="reference internal" href="1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

View File

@ -8,7 +8,7 @@
<title>MediaCurator 0.0.10 Release Notes &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@ -110,8 +110,20 @@
<li class="toctree-l1"><a class="reference internal" href="../usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul class="current">
<ul>
<li class="toctree-l1"><a class="reference internal" href="1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

View File

@ -8,7 +8,7 @@
<title>MediaCurator 0.0.11 Release Notes &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@ -116,8 +116,20 @@
<li class="toctree-l1"><a class="reference internal" href="../usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul class="current">
<ul>
<li class="toctree-l1"><a class="reference internal" href="1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">MediaCurator 0.0.11 Release Notes</a></li>

View File

@ -8,7 +8,7 @@
<title>MediaCurator 0.0.12 Release Notes &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@ -113,8 +113,20 @@
<li class="toctree-l1"><a class="reference internal" href="../usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul class="current">
<ul>
<li class="toctree-l1"><a class="reference internal" href="1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

View File

@ -8,7 +8,7 @@
<title>MediaCurator 0.0.13 Release Notes &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@ -16,7 +16,7 @@
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="MediaCurator 0.0.12 Release Notes" href="0.0.12-changelog.html" />
<link rel="prev" title="mediacurator 1.0.1 Release Notes" href="1.0.1-changelog.html" />
<link rel="prev" title="Errors" href="../legacy_usage/errors.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
@ -111,8 +111,20 @@
<li class="toctree-l1"><a class="reference internal" href="../usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul class="current">
<ul>
<li class="toctree-l1"><a class="reference internal" href="1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>
@ -130,7 +142,7 @@
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="1.0.1-changelog.html" title="previous chapter">mediacurator 1.0.1 Release Notes</a></li>
<li>Previous: <a href="../legacy_usage/errors.html" title="previous chapter">Errors</a></li>
<li>Next: <a href="0.0.12-changelog.html" title="next chapter">MediaCurator 0.0.12 Release Notes</a></li>
</ul></li>
</ul>

View File

@ -8,7 +8,7 @@
<title>MediaCurator 0.0.4 Release Notes &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@ -111,8 +111,20 @@
<li class="toctree-l1"><a class="reference internal" href="../usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul class="current">
<ul>
<li class="toctree-l1"><a class="reference internal" href="1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

View File

@ -8,7 +8,7 @@
<title>MediaCurator 0.0.5 Release Notes &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@ -112,8 +112,20 @@
<li class="toctree-l1"><a class="reference internal" href="../usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul class="current">
<ul>
<li class="toctree-l1"><a class="reference internal" href="1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

View File

@ -8,7 +8,7 @@
<title>MediaCurator 0.0.6 Release Notes &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@ -115,8 +115,20 @@
<li class="toctree-l1"><a class="reference internal" href="../usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul class="current">
<ul>
<li class="toctree-l1"><a class="reference internal" href="1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

View File

@ -8,7 +8,7 @@
<title>MediaCurator 0.0.7 Release Notes &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@ -111,8 +111,20 @@
<li class="toctree-l1"><a class="reference internal" href="../usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul class="current">
<ul>
<li class="toctree-l1"><a class="reference internal" href="1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

View File

@ -8,7 +8,7 @@
<title>MediaCurator 0.0.8 Release Notes &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@ -110,8 +110,20 @@
<li class="toctree-l1"><a class="reference internal" href="../usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul class="current">
<ul>
<li class="toctree-l1"><a class="reference internal" href="1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

View File

@ -8,7 +8,7 @@
<title>MediaCurator 0.0.9 Release Notes &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@ -110,8 +110,20 @@
<li class="toctree-l1"><a class="reference internal" href="../usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul class="current">
<ul>
<li class="toctree-l1"><a class="reference internal" href="1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

View File

@ -8,14 +8,14 @@
<title>mediacurator 1.0.1 Release Notes &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="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="MediaCurator 0.0.13 Release Notes" href="0.0.13-changelog.html" />
<link rel="next" title="Warnings" href="../legacy_usage/warnings.html" />
<link rel="prev" title="Errors" href="../usage/errors.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
@ -66,9 +66,11 @@
<section id="improvements">
<h2>Improvements<a class="headerlink" href="#improvements" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>Added line break in conversion output before each video to improve readability.</p></li>
<li><p>Standardized audio, subtitle and metadata copying.</p></li>
<li><p>Added support for .mov and .ts formats.</p></li>
<li><p>Introduced CRF (Constant Rate Factor) settings for AV1 and x265 for better control over quality and file size.</p></li>
<li><p>Implemented handling for odd pixel dimensions by adding black pixel padding to ensure even width and height.</p></li>
</ul>
</section>
<section id="changes">
@ -119,6 +121,18 @@
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>
@ -137,7 +151,7 @@
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="../usage/errors.html" title="previous chapter">Errors</a></li>
<li>Next: <a href="0.0.13-changelog.html" title="next chapter">MediaCurator 0.0.13 Release Notes</a></li>
<li>Next: <a href="../legacy_usage/warnings.html" title="next chapter">Warnings</a></li>
</ul></li>
</ul>
</div>

View File

@ -7,7 +7,7 @@
<title>Search &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="_static/custom.css?v=d9b65b63" />
<script src="_static/documentation_options.js?v=5929fcd5"></script>
<script src="_static/doctools.js?v=9a2dae69"></script>
@ -97,6 +97,18 @@
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="releasenotes/1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="releasenotes/0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="releasenotes/0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="releasenotes/0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

File diff suppressed because one or more lines are too long

View File

@ -8,7 +8,7 @@
<title>Errors &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@ -36,34 +36,35 @@
<section id="errors">
<h1>Errors<a class="headerlink" href="#errors" title="Link to this heading"></a></h1>
<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>
<p>FFmpeg can detect quite a few errors in the encoding of your source videos encoding and can also be used to repair these errors.</p>
<section id="repairable-encoding-errors">
<h2>Repairable encoding errors<a class="headerlink" href="#repairable-encoding-errors" title="Link to this heading"></a></h2>
<h2>Repairable Encoding Errors<a class="headerlink" href="#repairable-encoding-errors" title="Link to this heading"></a></h2>
<p>Here are some example errors that mediacurator will print and can possibly repair by re-encoding:</p>
<ul class="simple">
<li><p>“Referenced QT chapter track not found”</p></li>
<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><strong>“Referenced QT chapter track not found”</strong>: Indicates that the video references a chapter that doesnt exist.</p></li>
<li><p><strong>“Error, header damaged or not MPEG-4 header”</strong>: The files header is corrupted or missing.</p></li>
<li><p><strong>“Header missing”</strong>: The file lacks the necessary header information for decoding.</p></li>
<li><p><strong>“SEI type”</strong>: Issues related to SEI (Supplemental Enhancement Information) data.</p></li>
<li><p><strong>“no frame!”</strong>: No video frames available for processing.</p></li>
<li><p><strong>“Error while decoding MPEG audio frame.”</strong>: Issues decoding the audio stream.</p></li>
<li><p><strong>“big_values too big”</strong>: Indicates that certain values in the file are larger than expected.</p></li>
<li><p></p></li>
</ul>
</section>
<section id="ffmpeg-issues">
<h2>FFmpeg issues<a class="headerlink" href="#ffmpeg-issues" title="Link to this heading"></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>
<h2>FFmpeg Issues<a class="headerlink" href="#ffmpeg-issues" title="Link to this heading"></a></h2>
<p>While using FFmpeg, you may encounter other errors (such as segfaults) depending on your version. Mediacurator will also print information when that occurs and will move on to the next video after cleaning up any failures.</p>
<p>If you experience these errors, consider the following steps:</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>
<li><p><strong>Update FFmpeg</strong>: Ensure you are using the latest version by downloading it from <a class="reference external" href="https://ffmpeg.org/download.html">ffmpeg.org</a>, as many distributions provide outdated versions in their repositories.</p></li>
<li><p><strong>Run with Verbose Option</strong>: Execute mediacurator with the verbose print option, which will display the raw FFmpeg output for better troubleshooting.</p></li>
<li><p><strong>Retry</strong>: In my experience, some errors do not necessarily recur…</p></li>
</ul>
</section>
<section id="other-bugs">
<h2>Other bugs<a class="headerlink" href="#other-bugs" title="Link to this heading"></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>
<h2>Other Bugs<a class="headerlink" href="#other-bugs" title="Link to this heading"></a></h2>
<p>If you encounter other bugs, issues, or would like 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>
<p>For further assistance, you can reach out through the GitHub repository or the projects support channels.</p>
</section>
</section>
@ -95,15 +96,27 @@
<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 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>
<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>
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

View File

@ -8,7 +8,7 @@
<title>Installation &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@ -36,14 +36,39 @@
<section id="installation">
<h1>Installation<a class="headerlink" href="#installation" title="Link to this heading"></a></h1>
<p>This package has only been tested on GNU/Linux &amp; Windows and requires FFMPEG installed. For now it will be distributed on <a class="reference external" href="https://github.com/fabquenneville/mediacurator.git">GitHub</a></p>
<p>This package has been tested on GNU/Linux (e.g., Debian, Ubuntu, Fedora) and Windows, and requires FFmpeg to be installed. For now, it will be distributed on <a class="reference external" href="https://github.com/fabquenneville/mediacurator.git">GitHub</a>.</p>
<section id="install-ffmpeg">
<h2>Install FFmpeg<a class="headerlink" href="#install-ffmpeg" title="Link to this heading"></a></h2>
<p><a class="reference external" href="https://ffmpeg.org/download.html">Download FFmpeg</a></p>
<p>To install FFmpeg, you can follow the instructions for your platform:</p>
<ul>
<li><dl>
<dt><strong>On Debian and Ubuntu</strong>:</dt><dd><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>apt<span class="w"> </span>update
sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>ffmpeg
</pre></div>
</div>
</dd>
</dl>
</li>
<li><dl>
<dt><strong>On Fedora</strong>:</dt><dd><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>dnf<span class="w"> </span>install<span class="w"> </span>ffmpeg
</pre></div>
</div>
</dd>
</dl>
</li>
<li><p><strong>On Windows</strong>:
- Download the latest build from <a class="reference external" href="https://ffmpeg.org/download.html">FFmpeg</a>.
- Follow the installation instructions provided on the site.</p></li>
</ul>
<p>To verify your FFmpeg installation, you can run:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ffmpeg<span class="w"> </span>-version
</pre></div>
</div>
</section>
<section id="install-from-pypi">
<h2>Install from PyPi<a class="headerlink" href="#install-from-pypi" title="Link to this heading"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span>pip<span class="w"> </span>install<span class="w"> </span>mediacurator
<p>You can install the <cite>mediacurator</cite> package directly from PyPi using the following command:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>pip<span class="w"> </span>install<span class="w"> </span>mediacurator
</pre></div>
</div>
</section>
@ -85,6 +110,18 @@
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

View File

@ -8,7 +8,7 @@
<title>Manual &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@ -42,123 +42,188 @@
</section>
<section id="synopsis">
<h2>Synopsis<a class="headerlink" href="#synopsis" title="Link to this heading"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span><span class="o">[</span>list,convert<span class="o">]</span><span class="w"> </span><span class="o">[</span>-del<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-in:any,avi,mkv,wmv,mpg,mp4,m4v,flv,vid,divx,ogm,webm<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv,vob<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-out:mkv/mp4,x265/av1<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-print:list,formated,verbose<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-dirs/-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
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>&lt;command&gt;<span class="w"> </span><span class="o">[</span>options<span class="o">]</span>
mediacurator<span class="w"> </span><span class="o">[</span>list<span class="w"> </span>convert<span class="o">]</span><span class="w"> </span><span class="o">[</span>-del/--delete<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-i/--inputs<span class="w"> </span>any<span class="w"> </span>3gp<span class="w"> </span>asf<span class="w"> </span>avi<span class="w"> </span>divx<span class="w"> </span>dv<span class="w"> </span>f4v<span class="w"> </span>flv<span class="w"> </span>gif<span class="w"> </span>m2ts<span class="w"> </span>m4v<span class="w"> </span>mkv<span class="w"> </span>mov<span class="w"> </span>mp4<span class="w"> </span>mpeg<span class="w"> </span>mpg<span class="w"> </span>mts<span class="w"> </span>ogm<span class="w"> </span>ogv<span class="w"> </span>rm<span class="w"> </span>swf<span class="w"> </span>ts<span class="w"> </span>vid<span class="w"> </span>vob<span class="w"> </span>webm<span class="w"> </span>wmv<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-fl/--filters<span class="w"> </span>fferror<span class="w"> </span>old<span class="w"> </span>lowres<span class="w"> </span>hd<span class="w"> </span>720p<span class="w"> </span>1080p<span class="w"> </span>uhd<span class="w"> </span>mpeg<span class="w"> </span>mpeg4<span class="w"> </span>x264<span class="w"> </span>wmv3<span class="w"> </span>wmv<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-o/--outputs<span class="w"> </span>mkv/mp4<span class="w"> </span>x265/av1<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-p/--printop<span class="w"> </span>list<span class="w"> </span>formatted<span class="w"> </span>verbose<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-d/--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span><span class="w"> </span><span class="s2">&quot;/mnt/media2/&quot;</span><span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-f/--files<span class="w"> </span><span class="s2">&quot;file1.ext&quot;</span><span class="w"> </span><span class="s2">&quot;file2.ext&quot;</span><span class="o">]</span>
</pre></div>
</div>
<p><strong>Available commands:</strong>
- <cite>list</cite>: List all videos with specified filters.
- <cite>convert</cite>: Convert videos to specified formats.</p>
<p><strong>Options:</strong></p>
<ul class="simple">
<li><p><cite>-del</cite> or <cite>delete</cite>: Delete found results after successful operations. <strong>Use with caution</strong>.</p></li>
<li><p><cite>-i &lt;input&gt;</cite> or <cite>inputs &lt;input&gt;</cite>: Specify input file formats (default: <cite>any</cite>).</p></li>
<li><p><cite>-fl &lt;filter&gt;</cite> or <cite>filters &lt;filter&gt;</cite>: Apply filters to the selection of videos.</p></li>
<li><p><cite>-o &lt;output&gt;</cite> or <cite>outputs &lt;output&gt;</cite>: Specify output formats (default: <cite>mkv</cite>, <cite>x265</cite>).</p></li>
<li><p><cite>-p &lt;print_option&gt;</cite> or <cite>printop &lt;print_option&gt;</cite>: Set print options (default: <cite>list</cite>).</p></li>
<li><p><cite>-f &lt;file&gt;</cite> or <cite>files &lt;file&gt;</cite>: Specify files to process.</p></li>
<li><p><cite>-d &lt;directory&gt;</cite> or <cite>dirs &lt;directory&gt;</cite>: Specify directories to process.</p></li>
</ul>
<p><strong>For multiple files or filenames, use space-separated values ( ).</strong></p>
<p><strong>Default options (if not specified):</strong></p>
<ul class="simple">
<li><p><cite>-i/inputs</cite>: <cite>any</cite></p></li>
<li><p><cite>-fl/filters</cite>: (none)</p></li>
<li><p><cite>-o/outputs</cite>: <cite>mkv</cite>, <cite>x265</cite></p></li>
<li><p><cite>-p/printop</cite>: <cite>list</cite></p></li>
</ul>
</section>
<section id="description">
<h2>Description<a class="headerlink" href="#description" title="Link to this heading"></a></h2>
<p>mediacurator is a Python command line tool to manage a media database.</p>
<p><strong>mediacurator</strong> is a Python command-line tool designed to manage a media database. It allows you to:</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>
<li><p>List all videos and their metadata, optionally filtered by specified criteria.</p></li>
<li><p>Batch find, repair, or convert videos with encoding errors.</p></li>
<li><p>Batch recode videos to modern codecs (e.g., x265, AV1) based on filters (e.g., container, codec, resolution).</p></li>
</ul>
</section>
<section id="options">
<h2>Options<a class="headerlink" href="#options" title="Link to this heading"></a></h2>
<section id="list">
<h3>list<a class="headerlink" href="#list" title="Link to this heading"></a></h3>
<p>Search and list videos filtered by the parameters passed by the user.</p>
<blockquote>
<div><p>Search and list videos filtered by the user-provided parameters.</p>
</div></blockquote>
</section>
<section id="convert">
<h3>convert<a class="headerlink" href="#convert" title="Link to this heading"></a></h3>
<p>Search and convert all videos filtered by the parameters passed by the user.</p>
<blockquote>
<div><p>Search and convert all videos filtered by the user-provided parameters.</p>
</div></blockquote>
</section>
<section id="del">
<h3>-del:<a class="headerlink" href="#del" title="Link to this heading"></a></h3>
<p>Delete all original videos once selected operations have been done succefully.</p>
<section id="delete">
<h3>delete<a class="headerlink" href="#delete" title="Link to this heading"></a></h3>
<blockquote>
<div><p>Short form: <cite>-del</cite></p>
<p>Deletes the original videos after successful completion of operations (e.g., conversion or listing). <strong>Use with caution</strong>.</p>
<p>See <a class="reference internal" href="warnings.html"><span class="doc">Warnings</span></a></p>
</div></blockquote>
</section>
<section id="in">
<h3>-in:<a class="headerlink" href="#in" title="Link to this heading"></a></h3>
<p>[<strong>any</strong>,avi,mkv,wmv,mpg,mp4,m4v,flv,vid,divx,ogm]</p>
<p>Search all videos of the selected container <strong>extensions</strong> in the directories. By default it will include any file format.</p>
<section id="inputs">
<h3>inputs<a class="headerlink" href="#inputs" title="Link to this heading"></a></h3>
<blockquote>
<div><p>Short form: <cite>-i</cite></p>
<p>[<strong>any</strong>, 3gp, asf, avi, divx, dv, f4v, flv, gif, m2ts, m4v, mkv, mov, mp4, mpeg, mpg, mts, ogm, ogv, rm, swf, ts, vid, vob, webm, wmv]</p>
<p>Filters videos by file format (container extensions). The default is <cite>any</cite>, meaning all formats are included.</p>
</div></blockquote>
</section>
<section id="filters">
<h3>-filters:<a class="headerlink" href="#filters" title="Link to this heading"></a></h3>
<p>[fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv]</p>
<p>Filter the selected videos for parameters:</p>
<h3>filters<a class="headerlink" href="#filters" title="Link to this heading"></a></h3>
<blockquote>
<div><p>Short form: <cite>-fl</cite></p>
<p>[fferror, old, lowres, hd, 720p, 1080p, uhd, mpeg, mpeg4, x264, wmv3, wmv]</p>
<p>Filters videos based on specific criteria:</p>
<ul class="simple">
<li><p>fferror: Select all videos with encoding errors (See <a class="reference internal" href="errors.html"><span class="doc">Errors</span></a>)</p></li>
<li><p>old: Select all videos using old codecs (Everything except hevc or av1)</p></li>
<li><p>hd: 720p, 1080p, uhd</p></li>
<li><p>lowres: Everything not hd</p></li>
<li><p>uhd: if width &gt;= 2160 or height &gt;= 2160</p></li>
<li><p>1080p: if less than uhd and width &gt;= 1440 or height &gt;= 1080</p></li>
<li><p>720p: if less than 1080p and width &gt;= 1280 or height &gt;= 720:</p></li>
<li><p>sd: if less than 720p and if height &gt;= 480</p></li>
<li><p>subsd: Substandard definitions: Everything under 480p</p></li>
<li><p>mpeg,mpeg4,x264,wmv3,wmv,vob: Filter for videos encoded in the requested video codec</p></li>
<li><p><strong>fferror</strong>: Select videos with encoding errors (see <a class="reference internal" href="errors.html"><span class="doc">Errors</span></a>)</p></li>
<li><p><strong>old</strong>: Select videos using outdated codecs (anything except hevc or av1)</p></li>
<li><p><strong>hd</strong>: Select videos in HD (720p, 1080p, UHD)</p></li>
<li><p><strong>lowres</strong>: Select videos that are not in HD</p></li>
<li><p><strong>uhd</strong>: Select Ultra-HD videos (width or height &gt;= 2160)</p></li>
<li><p><strong>1080p</strong>: Select Full-HD videos (1440 &lt;= width &lt; 2160 or 1080 &lt;= height &lt; 2160)</p></li>
<li><p><strong>720p</strong>: Select HD videos (1280 &lt;= width &lt; 1440 or 720 &lt;= height &lt; 1080)</p></li>
<li><p><strong>sd</strong>: Select standard-definition videos (480 &lt;= height &lt; 720)</p></li>
<li><p><strong>subsd</strong>: Select substandard-definition videos (height &lt; 480)</p></li>
<li><p><strong>mpeg, mpeg4, x264, wmv3, wmv, vob</strong>: Filter by video codec</p></li>
</ul>
</div></blockquote>
</section>
<section id="out">
<h3>-out:<a class="headerlink" href="#out" title="Link to this heading"></a></h3>
<p>[<strong>mkv</strong>/mp4,x265/av1]</p>
<p>Select the outputs for the video conversions</p>
<section id="outputs">
<h3>outputs<a class="headerlink" href="#outputs" title="Link to this heading"></a></h3>
<blockquote>
<div><p>Short form: <cite>-o</cite></p>
<p>[<strong>mkv</strong>/mp4, x265/av1]</p>
<p>Specifies the output format for video conversions:</p>
<ul class="simple">
<li><p>mkv: (<strong>Default</strong>) Package the resulting video in a <a class="reference external" href="https://en.wikipedia.org/wiki/Matroska">Matroska</a> container.</p></li>
<li><p>mp4: Package the resulting video in a container.</p></li>
<li><p>x265/hevc: (<strong>Default</strong>) Encode the video using the <a class="reference external" href="https://en.wikipedia.org/wiki/X265">x265</a> compression format.</p></li>
<li><p>av1: Encode the video using the <a class="reference external" href="https://en.wikipedia.org/wiki/AV1">AOMedia Video 1</a> compression format. This will be used as default once the developpers at FFmpeg move it out of <a class="reference external" href="https://trac.ffmpeg.org/wiki/Encode/AV1">experimental</a> .</p></li>
<li><p><strong>mkv</strong>: (<strong>Default</strong>) Package the output video in a <a class="reference external" href="https://en.wikipedia.org/wiki/Matroska">Matroska</a> container.</p></li>
<li><p><strong>mp4</strong>: Package the output video in an MP4 container.</p></li>
<li><p><strong>x265</strong> or <strong>hevc</strong>: (<strong>Default</strong>) Encode the video using <a class="reference external" href="https://en.wikipedia.org/wiki/X265">x265</a> (HEVC).</p></li>
<li><p><strong>av1</strong>: Encode the video using <a class="reference external" href="https://en.wikipedia.org/wiki/AV1">AOMedia Video 1</a> (AV1).</p></li>
</ul>
</div></blockquote>
</section>
<section id="print">
<h3>-print:<a class="headerlink" href="#print" title="Link to this heading"></a></h3>
<p>[<strong>list</strong>,formated,verbose]</p>
<section id="printop">
<h3>printop<a class="headerlink" href="#printop" title="Link to this heading"></a></h3>
<blockquote>
<div><p>Short form: <cite>-p</cite></p>
<p>[<strong>list</strong>, formatted, verbose]</p>
<p>Specifies how the output should be displayed:</p>
<ul class="simple">
<li><p>list: (<strong>Default</strong>) Print the information about the videos on a single line</p></li>
<li><p><strong>list</strong>: (<strong>Default</strong>) Prints video info in a concise, single-line format.</p></li>
</ul>
<a class="reference internal image-reference" href="../_images/Screenshot-print_list-single.png"><img alt="Deleting videos" src="../_images/Screenshot-print_list-single.png" style="width: 600px;" />
<a class="reference internal image-reference" href="../_images/Screenshot-print_list-single.png"><img alt="List videos (single-line output)" src="../_images/Screenshot-print_list-single.png" style="width: 600px;" />
</a>
<ul class="simple">
<li><p>formated: Print the information in an aerated format</p></li>
<li><p><strong>formatted</strong>: Prints video info in a more readable format with line breaks.</p></li>
</ul>
<a class="reference internal image-reference" href="../_images/Screenshot-print_formated-single.png"><img alt="Deleting videos" src="../_images/Screenshot-print_formated-single.png" style="width: 400px;" />
<a class="reference internal image-reference" href="../_images/Screenshot-print_formatted-single.png"><img alt="List videos (formatted output)" src="../_images/Screenshot-print_formatted-single.png" style="width: 400px;" />
</a>
<ul class="simple">
<li><p>verbose: Print the FFmpeg output during the video conversions</p></li>
<li><p><strong>verbose</strong>: Prints the FFmpeg output during conversions.</p></li>
</ul>
</div></blockquote>
</section>
<section id="dirs">
<h3>-dirs:<a class="headerlink" href="#dirs" title="Link to this heading"></a></h3>
<p>[“/mnt/media/”,,”/mnt/media2/”]</p>
<p>The directories to scan as a <strong>double comma</strong> separated values list.</p>
<h3>dirs<a class="headerlink" href="#dirs" title="Link to this heading"></a></h3>
<blockquote>
<div><p>Short form: <cite>-d</cite></p>
<p>[“/mnt/media/”, “/mnt/media2/”]</p>
<p>Specifies directories to scan, separated by spaces.</p>
</div></blockquote>
</section>
<section id="files">
<h3>-files:<a class="headerlink" href="#files" title="Link to this heading"></a></h3>
<p>[“/mnt/media/video.avi”,,”/mnt/media2/video2.mp4”]</p>
<p>Specific videos to include as a <strong>double comma</strong> separated values list.</p>
<h3>files<a class="headerlink" href="#files" title="Link to this heading"></a></h3>
<blockquote>
<div><p>Short form: <cite>-f</cite></p>
<p>[“/mnt/media/video.avi”, “/mnt/media2/video2.mp4”]</p>
<p>Specifies individual video files to process, separated by spaces.</p>
</div></blockquote>
</section>
</section>
<section id="examples">
<h2>Examples<a class="headerlink" href="#examples" title="Link to this heading"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># List all videos with old codec in formated format</span>
mediacurator<span class="w"> </span>list<span class="w"> </span>-filters:old<span class="w"> </span>-print:formated<span class="w"> </span>-dirs:/mnt/media/<span class="w"> </span>&gt;&gt;<span class="w"> </span>../medlist.txt
<span class="c1"># Convert all videos with the codec mpeg4 in a mp4 using the av1 video codec and the delete the originals</span>
mediacurator<span class="w"> </span>convert<span class="w"> </span>-del<span class="w"> </span>-filters:mpeg4<span class="w"> </span>-out:av1,mp4<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/Movies/&quot;</span>
<span class="c1"># Convert any video with avi or mpg extensions, print formated text including ffmpeg&#39;s output and then delete the originals</span>
mediacurator<span class="w"> </span>convert<span class="w"> </span>-del<span class="w"> </span>-in:avi,mpg<span class="w"> </span>-print:formated,verbose<span class="w"> </span>-dirs:/mnt/media/
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># This command lists all videos in the specified directories that use old codecs and</span>
<span class="c1"># formats the output.</span>
mediacurator<span class="w"> </span>list<span class="w"> </span>--filters<span class="w"> </span>old<span class="w"> </span>--printop<span class="w"> </span>formatted<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span><span class="w"> </span><span class="s2">&quot;/mnt/media2/&quot;</span>
<span class="c1"># This command converts all MPEG4 videos found in the specified directories to AV1 format</span>
<span class="c1"># in MP4 containers and deletes the originals.</span>
mediacurator<span class="w"> </span>convert<span class="w"> </span>--delete<span class="w"> </span>--filters<span class="w"> </span>mpeg4<span class="w"> </span>--outputs<span class="w"> </span>av1<span class="w"> </span>mp4<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span><span class="w"> </span><span class="s2">&quot;/mnt/media2/&quot;</span>
<span class="c1"># This command converts AVI or MPG videos, displays detailed output during conversion, and</span>
<span class="c1"># deletes originals.</span>
mediacurator<span class="w"> </span>convert<span class="w"> </span>--delete<span class="w"> </span>--inputs<span class="w"> </span>avi<span class="w"> </span>mpg<span class="w"> </span>--printop<span class="w"> </span>formatted<span class="w"> </span>verbose<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span><span class="w"> </span><span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
<p>More examples in <a class="reference internal" href="use_cases.html"><span class="doc">Use cases</span></a></p>
<p>For more examples, see <a class="reference internal" href="use_cases.html"><span class="doc">Use cases</span></a></p>
</section>
<section id="see-also">
<h2>See Also<a class="headerlink" href="#see-also" title="Link to this heading"></a></h2>
<p><a class="reference external" href="https://ffmpeg.org/">FFmpeg</a></p>
<ul class="simple">
<li><p><a class="reference external" href="https://ffmpeg.org/">FFmpeg</a></p></li>
</ul>
</section>
<section id="glossary">
<h2>Glossary<a class="headerlink" href="#glossary" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p><strong>Codec</strong>: A program or device that compresses and decompresses digital media.</p></li>
<li><p><strong>Container</strong>: A file format that holds video, audio, and metadata.</p></li>
<li><p><strong>UHD</strong>: Ultra High Definition, refers to video resolutions of 3840x2160 pixels or higher.</p></li>
</ul>
</section>
<section id="error-handling">
<h2>Error Handling<a class="headerlink" href="#error-handling" title="Link to this heading"></a></h2>
<p>Common issues users might encounter include:</p>
<ul class="simple">
<li><p><strong>Encoding Errors</strong>: If videos have encoding errors, they can be filtered using the <cite>filters fferror</cite> option.</p></li>
<li><p><strong>Unsupported Formats</strong>: Ensure that input formats specified in <cite>inputs</cite> are supported by mediacurator.</p></li>
</ul>
</section>
<section id="author">
<h2>Author<a class="headerlink" href="#author" title="Link to this heading"></a></h2>
@ -198,6 +263,8 @@ mediacurator<span class="w"> </span>convert<span class="w"> </span>-del<span cla
<li class="toctree-l2"><a class="reference internal" href="#options">Options</a></li>
<li class="toctree-l2"><a class="reference internal" href="#examples">Examples</a></li>
<li class="toctree-l2"><a class="reference internal" href="#see-also">See Also</a></li>
<li class="toctree-l2"><a class="reference internal" href="#glossary">Glossary</a></li>
<li class="toctree-l2"><a class="reference internal" href="#error-handling">Error Handling</a></li>
<li class="toctree-l2"><a class="reference internal" href="#author">Author</a></li>
</ul>
</li>
@ -207,6 +274,18 @@ mediacurator<span class="w"> </span>convert<span class="w"> </span>-del<span cla
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

View File

@ -8,7 +8,7 @@
<title>Quickstart &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@ -36,32 +36,52 @@
<section id="quickstart">
<h1>Quickstart<a class="headerlink" href="#quickstart" title="Link to this heading"></a></h1>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span><span class="o">[</span>list,convert<span class="o">]</span><span class="w"> </span><span class="o">[</span>-del<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-in:any,avi,mkv,wmv,mpg,mp4,m4v,flv,vid,divx,ogm,webm<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-out:mkv/mp4,x265/av1<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-print:list,formated,verbose<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-dirs/-files:<span class="s2">&quot;/mnt/media/&quot;</span>,,<span class="s2">&quot;/mnt/media2/&quot;</span><span class="o">]</span>
<p>To use <cite>mediacurator</cite>, execute the following command structure:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>&lt;command&gt;<span class="w"> </span><span class="o">[</span>options<span class="o">]</span>
mediacurator<span class="w"> </span><span class="o">[</span>list<span class="w"> </span>convert<span class="o">]</span><span class="w"> </span><span class="o">[</span>-del/--delete<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-i/--inputs<span class="w"> </span>any<span class="w"> </span>3gp<span class="w"> </span>asf<span class="w"> </span>avi<span class="w"> </span>divx<span class="w"> </span>dv<span class="w"> </span>f4v<span class="w"> </span>flv<span class="w"> </span>gif<span class="w"> </span>m2ts<span class="w"> </span>m4v<span class="w"> </span>mkv<span class="w"> </span>mov<span class="w"> </span>mp4<span class="w"> </span>mpeg<span class="w"> </span>mpg<span class="w"> </span>mts<span class="w"> </span>ogm<span class="w"> </span>ogv<span class="w"> </span>rm<span class="w"> </span>swf<span class="w"> </span>ts<span class="w"> </span>vid<span class="w"> </span>vob<span class="w"> </span>webm<span class="w"> </span>wmv<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-fl/--filters<span class="w"> </span>fferror<span class="w"> </span>old<span class="w"> </span>lowres<span class="w"> </span>hd<span class="w"> </span>720p<span class="w"> </span>1080p<span class="w"> </span>uhd<span class="w"> </span>mpeg<span class="w"> </span>mpeg4<span class="w"> </span>x264<span class="w"> </span>wmv3<span class="w"> </span>wmv<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-o/--outputs<span class="w"> </span>mkv/mp4<span class="w"> </span>x265/av1<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-p/--printop<span class="w"> </span>list<span class="w"> </span>formatted<span class="w"> </span>verbose<span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-d/--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span><span class="w"> </span><span class="s2">&quot;/mnt/media2/&quot;</span><span class="o">]</span>
<span class="w"> </span><span class="o">[</span>-f/--files<span class="w"> </span><span class="s2">&quot;file1.ext&quot;</span><span class="w"> </span><span class="s2">&quot;file2.ext&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
<p><strong>Available commands:</strong>
- <cite>list</cite>: List all videos with specified filters.
- <cite>convert</cite>: Convert videos to specified formats.</p>
<p><strong>Options:</strong></p>
<ul class="simple">
<li><p><cite>-del</cite> or <cite>delete</cite>: Delete found results after successful operations.</p></li>
<li><p><cite>-i &lt;input&gt;</cite> or <cite>inputs &lt;input&gt;</cite>: Specify input file formats (default: <cite>any</cite>).</p></li>
<li><p><cite>-fl &lt;filter&gt;</cite> or <cite>filters &lt;filter&gt;</cite>: Apply filters to the selection of videos.</p></li>
<li><p><cite>-o &lt;output&gt;</cite> or <cite>outputs &lt;output&gt;</cite>: Specify output formats (default: <cite>mkv</cite>, <cite>x265</cite>).</p></li>
<li><p><cite>-p &lt;print_option&gt;</cite> or <cite>printop &lt;print_option&gt;</cite>: Set print options (default: <cite>list</cite>).</p></li>
<li><p><cite>-f &lt;file&gt;</cite> or <cite>files &lt;file&gt;</cite>: Specify files to process.</p></li>
<li><p><cite>-d &lt;directory&gt;</cite> or <cite>dirs &lt;directory&gt;</cite>: Specify directories to process.</p></li>
</ul>
<p><strong>For multiple files or filenames, use space-separated values ( ).</strong></p>
<p><strong>Default options:</strong></p>
<ul class="simple">
<li><p><cite>-i/inputs any</cite></p></li>
<li><p><cite>-fl/filters</cite></p></li>
<li><p><cite>-o/outputs mkv x265</cite></p></li>
<li><p><cite>-p/printop list</cite></p></li>
</ul>
<p><strong>Examples:</strong></p>
<p>The following examples demonstrate how to use <cite>mediacurator</cite> with the options listed above:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># List all videos with an old codec in formatted format</span>
mediacurator<span class="w"> </span>list<span class="w"> </span>--filters<span class="w"> </span>old<span class="w"> </span>--printop<span class="w"> </span>formatted<span class="w"> </span>--dirs<span class="w"> </span>/mnt/media/<span class="w"> </span>&gt;&gt;<span class="w"> </span>../medlist.txt
<span class="c1"># Convert all videos with the MPEG4 codec to MP4 using the AV1 codec and delete the originals</span>
mediacurator<span class="w"> </span>convert<span class="w"> </span>--delete<span class="w"> </span>--filters<span class="w"> </span>mpeg4<span class="w"> </span>--outputs<span class="w"> </span>av1,mp4<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/Movies/&quot;</span>
<span class="c1"># Convert any video with AVI or MPG extensions, print formatted text including FFmpeg&#39;s output, and then delete the originals</span>
mediacurator<span class="w"> </span>convert<span class="w"> </span>--delete<span class="w"> </span>--inputs<span class="w"> </span>avi,mpg<span class="w"> </span>--printop<span class="w"> </span>formatted,verbose<span class="w"> </span>--dirs<span class="w"> </span>/mnt/media/
</pre></div>
</div>
<p>Examples:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># List all videos with old codec in formated format</span>
mediacurator<span class="w"> </span>list<span class="w"> </span>-filters:old<span class="w"> </span>-print:formated<span class="w"> </span>-dirs:/mnt/media/<span class="w"> </span>&gt;&gt;<span class="w"> </span>../medlist.txt
<span class="c1"># Convert all videos with the codec mpeg4 in a mp4 using the av1 video codec and the delete the originals</span>
mediacurator<span class="w"> </span>convert<span class="w"> </span>-del<span class="w"> </span>-filters:mpeg4<span class="w"> </span>-out:av1,mp4<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/Movies/&quot;</span>
<span class="c1"># Convert any video with avi or mpg extensions, print formated text including ffmpeg&#39;s output and then delete the originals</span>
mediacurator<span class="w"> </span>convert<span class="w"> </span>-del<span class="w"> </span>-in:avi,mpg<span class="w"> </span>-print:formated,verbose<span class="w"> </span>-dirs:/mnt/media/
</pre></div>
</div>
<p>More examples in <a class="reference internal" href="use_cases.html"><span class="doc">Use cases</span></a></p>
<p>For more examples, see <a class="reference internal" href="use_cases.html"><span class="doc">Use cases</span></a>.</p>
</section>
@ -96,6 +116,18 @@ mediacurator<span class="w"> </span>convert<span class="w"> </span>-del<span cla
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

View File

@ -8,7 +8,7 @@
<title>Use cases &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@ -53,12 +53,12 @@
</ul>
<section id="print-information">
<span id="list-cmd"></span><h2>Print information<a class="headerlink" href="#print-information" title="Link to this heading"></a></h2>
<p>List all videos with old codec in formated format</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>-filters:old<span class="w"> </span>-dirs:/mnt/media/
<p>List all videos with old codec in formatted output</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>--filters<span class="w"> </span>old<span class="w"> </span>--printop<span class="w"> </span>formatted<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span><span class="w"> </span><span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
<p>List all videos with substandard definitions with a formated output</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>-filters:subsd<span class="w"> </span>-print:formated<span class="w"> </span>-dirs:/mnt/media/
<p>List all videos with substandard definitions with a formatted output</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>--filters<span class="w"> </span>subsd<span class="w"> </span>--printop<span class="w"> </span>formatted<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span><span class="w"> </span><span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
</section>
@ -66,45 +66,45 @@
<span id="id1"></span><h2>Purge<a class="headerlink" href="#purge" title="Link to this heading"></a></h2>
<p>Please see <a class="reference internal" href="warnings.html"><span class="doc">Warnings</span></a></p>
<p>List and delete all videos using the <a class="reference external" href="https://en.wikipedia.org/wiki/Windows_Media_Video">Windows Media Video</a> codecs</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>-del<span class="w"> </span>-filters:wmv<span class="w"> </span>-dirs:/mnt/media/
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>--delete<span class="w"> </span>--filters<span class="w"> </span>wmv<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span><span class="w"> </span><span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
<p>List and delete all videos using an <a class="reference external" href="https://en.wikipedia.org/wiki/Audio_Video_Interleave">Audio Video Interleave</a></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>-del<span class="w"> </span>-in:avi<span class="w"> </span>-dirs:/mnt/media/
<p>List and delete all videos using <a class="reference external" href="https://en.wikipedia.org/wiki/Audio_Video_Interleave">Audio Video Interleave</a></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>--delete<span class="w"> </span>--inputs<span class="w"> </span>avi<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span><span class="w"> </span><span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
<p>List and delete any videos with encoding errors</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>-del<span class="w"> </span>-filters:fferror<span class="w"> </span>-dirs:/mnt/media/
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>--delete<span class="w"> </span>--filters<span class="w"> </span>fferror<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span><span class="w"> </span><span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
</section>
<section id="batch-repair-encoding-errors">
<span id="fferror"></span><h2>Batch repair encoding errors<a class="headerlink" href="#batch-repair-encoding-errors" title="Link to this heading"></a></h2>
<p>List all videos with encoding errors</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>-filters:fferror<span class="w"> </span>-dirs:/mnt/media/
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>--filters<span class="w"> </span>fferror<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span><span class="w"> </span><span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
<p>List and delete any videos with encoding errors</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>-del<span class="w"> </span>-filters:fferror<span class="w"> </span>-dirs:/mnt/media/
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>--delete<span class="w"> </span>--filters<span class="w"> </span>fferror<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span><span class="w"> </span><span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
<p>Convert all videos with encoding errors to <a class="reference external" href="https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding">High Efficiency Video Coding</a> and the delete the originals</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>convert<span class="w"> </span>-del<span class="w"> </span>-filters:fferror<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/Movies/&quot;</span>
<p>Convert all videos with encoding errors to <a class="reference external" href="https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding">High Efficiency Video Coding</a> and delete the originals</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>convert<span class="w"> </span>--delete<span class="w"> </span>--filters<span class="w"> </span>fferror<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span><span class="w"> </span><span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
</section>
<section id="batch-re-encode">
<span id="convert"></span><h2>Batch re-encode<a class="headerlink" href="#batch-re-encode" title="Link to this heading"></a></h2>
<p>Convert all videos with old codecs to <a class="reference external" href="https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding">High Efficiency Video Coding</a> to save space and delete the originals</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>convert<span class="w"> </span>-del<span class="w"> </span>-filters:old<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/Movies/&quot;</span>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>convert<span class="w"> </span>--delete<span class="w"> </span>--filters<span class="w"> </span>old<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span><span class="w"> </span><span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
<p>Convert all videos with the codec mpeg4 to an mkv container using the av1 video codec</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>convert<span class="w"> </span>-filters:mpeg4<span class="w"> </span>-out:av1,mkv<span class="w"> </span>-dirs:<span class="s2">&quot;/mnt/media/Movies/&quot;</span>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>convert<span class="w"> </span>--filters<span class="w"> </span>mpeg4<span class="w"> </span>--outputs<span class="w"> </span>av1,mkv<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span><span class="w"> </span><span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
<p>Convert any video with avi or mpg extensions, print formated text including ffmpegs output and then delete the originals</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>convert<span class="w"> </span>-del<span class="w"> </span>-in:avi,mpg<span class="w"> </span>-print:formated,verbose<span class="w"> </span>-dirs:/mnt/media/
<p>Convert any video with avi or mpg extensions, print formatted text including ffmpegs output, and then delete the originals</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>convert<span class="w"> </span>--delete<span class="w"> </span>--inputs<span class="w"> </span>avi,mpg<span class="w"> </span>--printop<span class="w"> </span>formatted,verbose<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span><span class="w"> </span><span class="s2">&quot;/mnt/media2/&quot;</span>
</pre></div>
</div>
</section>
@ -148,6 +148,18 @@
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

View File

@ -8,7 +8,7 @@
<title>Warnings &#8212; mediacurator documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d1102ebc" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=12dfc556" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=bc254afd" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=d9b65b63" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=9a2dae69"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
@ -36,32 +36,62 @@
<section id="warnings">
<h1>Warnings<a class="headerlink" href="#warnings" title="Link to this heading"></a></h1>
<p>Before using the delete feature please try a few dry runs to get acquainted with mediacurator as it can irreparably 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>mediacurator<span class="w"> </span>list<span class="w"> </span>-del<span class="w"> </span>-filters:lowres<span class="w"> </span>-dirs/-files:<span class="s2">&quot;/mnt/media/&quot;</span>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Before using the <strong>delete feature</strong>, we strongly recommend running several dry runs to get acquainted with <cite>mediacurator</cite>, as incorrect usage can cause irreversible damage to your media library.</p>
</div>
<p>The <cite>delete</cite> flag will <strong>permanently delete</strong> files, so it is crucial to ensure that the command is executed correctly. Below are some examples of how the delete feature works.</p>
<section id="example-use-cases-for-the-delete-flag">
<h2>Example use cases for the <cite>delete</cite> Flag<a class="headerlink" href="#example-use-cases-for-the-delete-flag" title="Link to this heading"></a></h2>
<ol class="arabic simple">
<li><p><strong>Delete all non-HD (low-resolution) videos in a folder:</strong></p></li>
</ol>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>--delete<span class="w"> </span>--filters<span class="w"> </span>lowres<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span>
</pre></div>
</div>
<p>To delete all substandard videos in a folder:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>-del<span class="w"> </span>-filters:subsd<span class="w"> </span>-dirs/-files:<span class="s2">&quot;/mnt/media/&quot;</span>
<ol class="arabic simple" start="2">
<li><p><strong>Delete all substandard quality videos in a folder:</strong></p></li>
</ol>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>--delete<span class="w"> </span>--filters<span class="w"> </span>subsd<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span>
</pre></div>
</div>
<a class="reference internal image-reference" href="../_images/Screenshot-delete.png"><img alt="Deleting videos" src="../_images/Screenshot-delete.png" style="width: 600px;" />
</a>
<p>To delete all videos in a folder with encoding errors:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>-del<span class="w"> </span>-filters:fferror<span class="w"> </span>-dirs/-files:<span class="s2">&quot;/mnt/media/&quot;</span>
<ol class="arabic simple" start="3">
<li><p><strong>Delete all videos in a folder with encoding errors:</strong></p></li>
</ol>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>--delete<span class="w"> </span>--filters<span class="w"> </span>fferror<span class="w"> </span>--dirs<span class="w"> </span><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>mediacurator<span class="w"> </span>convert<span class="w"> </span>-del<span class="w"> </span>-filters:fferror<span class="w"> </span>-dirs/-files:<span class="s2">&quot;/mnt/media/&quot;</span>
<ol class="arabic simple" start="4">
<li><p><strong>Convert (repair) and then delete all videos in a folder with encoding errors:</strong></p></li>
</ol>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>convert<span class="w"> </span>--delete<span class="w"> </span>--filters<span class="w"> </span>fferror<span class="w"> </span>--dirs<span class="w"> </span><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>mediacurator<span class="w"> </span>list<span class="w"> </span>-del<span class="w"> </span>-filters:lowres<span class="w"> </span>-dirs/-files:<span class="s2">&quot;/mnt/media/&quot;</span>
<ol class="arabic simple" start="5">
<li><p><strong>Delete all videos in a folder:</strong></p></li>
</ol>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>--delete<span class="w"> </span>--dirs<span class="w"> </span><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 try a few dry runs without -del until you are acquainted with mediacurator.</p>
</section>
<section id="important-notes">
<h2>Important Notes<a class="headerlink" href="#important-notes" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p><strong>Irreversibility</strong>: All of these commands involve permanent deletion. Once a file is deleted using the <cite>delete</cite> flag, it cannot be recovered.</p></li>
<li><p><strong>Run without `delete` first</strong>: Always perform several dry runs by omitting the <cite>delete</cite> flag to ensure that the correct files are selected for deletion. Familiarizing yourself with the tool before using destructive commands is essential to avoid unintended consequences.</p></li>
<li><p><strong>Specific File Selection</strong>: If youre unsure about applying filters to an entire directory, you can use the <cite>files</cite> option to target individual files for deletion or conversion, further reducing the risk of unintended deletions.</p></li>
<li><p><strong>Backup Recommendation</strong>: Before running any commands with the <cite>delete</cite> flag, it is a good practice to back up your media library or the specific directories being processed, especially if they contain valuable or irreplaceable files.</p></li>
</ul>
</section>
<section id="dry-run-example-without-deletion">
<h2>Dry run example (without deletion)<a class="headerlink" href="#dry-run-example-without-deletion" title="Link to this heading"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mediacurator<span class="w"> </span>list<span class="w"> </span>--filters<span class="w"> </span>lowres<span class="w"> </span>--dirs<span class="w"> </span><span class="s2">&quot;/mnt/media/&quot;</span>
</pre></div>
</div>
<p>Make sure you carefully verify the output and files selected during the dry runs to prevent accidental data loss.</p>
</section>
</section>
@ -86,7 +116,12 @@
<h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Usage:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Warnings</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Warnings</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#example-use-cases-for-the-delete-flag">Example use cases for the <cite>delete</cite> Flag</a></li>
<li class="toctree-l2"><a class="reference internal" href="#important-notes">Important Notes</a></li>
<li class="toctree-l2"><a class="reference internal" href="#dry-run-example-without-deletion">Dry run example (without deletion)</a></li>
</ul>
</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>
@ -96,6 +131,18 @@
<p class="caption" role="heading"><span class="caption-text">Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/1.0.1-changelog.html">mediacurator 1.0.1 Release Notes</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Usage:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/warnings.html">Warnings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/manual.html">Manual</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/use_cases.html">Use cases</a></li>
<li class="toctree-l1"><a class="reference internal" href="../legacy_usage/errors.html">Errors</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Legacy Release Notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.13-changelog.html">MediaCurator 0.0.13 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.12-changelog.html">MediaCurator 0.0.12 Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../releasenotes/0.0.11-changelog.html">MediaCurator 0.0.11 Release Notes</a></li>

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

View File

@ -1,53 +1,57 @@
/* custom.css */
/* Add text wrap to code blocks */
/* pre {
white-space: pre-wrap;
} */
/* Add breakpoints for responsive design */
@media screen and (min-width: 1200px) {
/* Adjust layout for large screens */
div.document {
width: 90%; /* Adjust width for large screens */
margin: 30px auto; /* Center the document */
display: grid; /* Use grid layout */
grid-template-columns: 1fr 3fr; /* Sidebar takes 1/4, main content takes 3/4 of available space */
grid-template-areas:
"sidebar main"; /* Define grid areas */
}
/* Adjust layout for large screens */
div.document {
width: 90%; /* Adjust width for large screens */
margin: 30px auto; /* Center the document */
display: grid; /* Use grid layout */
grid-template-columns: 1fr 3fr; /* Sidebar takes 1/4, main content takes 3/4 of available space */
grid-template-areas: "sidebar main"; /* Define grid areas */
}
div.sphinxsidebar {
/* Add some content or set a min-width to ensure it occupies the grid area */
width: 100%; /* Example min-width */
grid-area: sidebar; /* Assign to sidebar grid area */
padding: 0 20px; /* Add padding to maintain spacing */
margin-top: 0;
margin-right: 20px;
margin-bottom: 0;
margin-left: 0; /* Adjust margins to fit within the layout */
}
div.sphinxsidebar {
/* Add some content or set a min-width to ensure it occupies the grid area */
width: 100%; /* Example min-width */
grid-area: sidebar; /* Assign to sidebar grid area */
padding: 0 20px; /* Add padding to maintain spacing */
margin-top: 0;
margin-right: 20px;
margin-bottom: 0;
margin-left: 0; /* Adjust margins to fit within the layout */
}
div.bodywrapper {
/* Ensure it occupies the grid area */
width: 100%;
grid-area: main; /* Assign to main grid area */
padding: 0 20px; /* Add padding to maintain spacing */
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
margin-left: 20px; /* Adjust margins to fit within the layout */
}
div.bodywrapper {
/* Ensure it occupies the grid area */
width: 100%;
grid-area: main; /* Assign to main grid area */
padding: 0 20px; /* Add padding to maintain spacing */
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
margin-left: 20px; /* Adjust margins to fit within the layout */
}
}
@media screen and (max-width: 767px) {
/* Adjust layout for mobile phones */
body {
padding: 10px; /* Add padding to body for better spacing */
}
/* Adjust layout for mobile phones */
body {
padding: 10px; /* Add padding to body for better spacing */
}
div.document {
width: 100%; /* Set width to full for mobile phones */
margin: 10px auto; /* Center the document */
display: block; /* Revert to block layout */
}
div.document {
width: 100%; /* Set width to full for mobile phones */
margin: 10px auto; /* Center the document */
display: block; /* Revert to block layout */
}
div.sphinxsidebar {
display: none; /* Hide sidebar on mobile phones */
}
div.sphinxsidebar {
display: none; /* Hide sidebar on mobile phones */
}
}

View File

@ -1,20 +1,27 @@
.. mediacurator documentation master file, created by
sphinx-quickstart on Fri Nov 20 22:46:06 2020.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
========================================
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
* List all the videos 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 ...
* Batch recode videos to more modern codecs (x265 / AV1) based on filters: extensions, codecs, resolutions ...
The source code can be found on `GitHub <https://github.com/fabquenneville/mediacurator>`_
.. warning::
**Breaking changes in version 1.0.1:**
Starting with version 1.0.1, the command-line interface (CLI) has undergone major changes, and the usage is **not backwards-compatible** with previous versions.
If you are using `mediacurator < 1.0.1`, please refer to the legacy documentation available below (:ref:`legacy_docs`).
----------------------------------------
Documentation
----------------------------------------
.. toctree::
:maxdepth: 2
:caption: Usage:
@ -31,6 +38,34 @@ The source code can be found on `GitHub <https://github.com/fabquenneville/media
:caption: Release Notes:
releasenotes/1.0.1-changelog
----
.. _legacy_docs:
----------------------------------------
Legacy Documentation (Pre 1.0)
----------------------------------------
.. warning::
The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.
.. toctree::
:maxdepth: 1
:caption: Legacy Usage:
legacy_usage/warnings
legacy_usage/installation
legacy_usage/quickstart
legacy_usage/manual
legacy_usage/use_cases
legacy_usage/errors
.. toctree::
:maxdepth: 1
:caption: Legacy Release Notes:
releasenotes/0.0.13-changelog
releasenotes/0.0.12-changelog
releasenotes/0.0.11-changelog

View File

@ -0,0 +1,41 @@
======
Errors
======
.. warning::
The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.
FFmpeg can detect quite a few errors in the encoding of your source video's encoding and can also be used to repair these 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"**: Indicates that the video references a chapter that doesn't exist.
* **"Error, header damaged or not MPEG-4 header"**: The file's header is corrupted or missing.
* **"Header missing"**: The file lacks the necessary header information for decoding.
* **"SEI type"**: Issues related to SEI (Supplemental Enhancement Information) data.
* **"no frame!"**: No video frames available for processing.
* **"Error while decoding MPEG audio frame."**: Issues decoding the audio stream.
* **"big_values too big"**: Indicates that certain values in the file are larger than expected.
* ...
FFmpeg Issues
-------------
While using FFmpeg, you may encounter other errors (such as segfaults) depending on your version. Mediacurator will also print information when that occurs and will move on to the next video after cleaning up any failures.
If you experience these errors, consider the following steps:
* **Update FFmpeg**: Ensure you are using the latest version by downloading it from `ffmpeg.org <https://ffmpeg.org/download.html>`_, as many distributions provide outdated versions in their repositories.
* **Run with Verbose Option**: Execute mediacurator with the verbose print option, which will display the raw FFmpeg output for better troubleshooting.
* **Retry**: In my experience, some errors do not necessarily recur...
Other Bugs
----------
If you encounter other bugs, issues, or would like to suggest features, feel free to open a bug report on `GitHub <https://github.com/fabquenneville/mediacurator/issues>`_.
For further assistance, you can reach out through the GitHub repository or the projects support channels.

View File

@ -0,0 +1,45 @@
============
Installation
============
.. warning::
The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.
This package has been tested on GNU/Linux (e.g., Debian, Ubuntu, Fedora) and Windows, and requires FFmpeg to be installed. For now, it will be distributed on `GitHub <https://github.com/fabquenneville/mediacurator.git>`_.
Install FFmpeg
--------------
To install FFmpeg, you can follow the instructions for your platform:
- **On Debian and Ubuntu**:
.. code-block:: bash
sudo apt update
sudo apt install ffmpeg
- **On Fedora**:
.. code-block:: bash
sudo dnf install ffmpeg
- **On Windows**:
- Download the latest build from `FFmpeg <https://ffmpeg.org/download.html>`_.
- Follow the installation instructions provided on the site.
To verify your FFmpeg installation, you can run:
.. code-block:: bash
ffmpeg -version
Install from PyPi
-----------------
You can install the `mediacurator` package directly from PyPi using the following command:
.. code-block:: bash
pip install MediaCurator

View File

@ -0,0 +1,185 @@
======
Manual
======
.. warning::
The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.
Name
----
mediacurator
Synopsis
--------
.. code-block:: bash
mediacurator <command> [options]
mediacurator [list,convert] [-del]
[-in:any,avi,divx,flv,m4v,mkv,mp4,mpg,ogm,vid,webm,wmv]
[-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv,vob]
[-out:mkv/mp4,x265/av1]
[-print:list,formated,verbose]
[-dirs/-files:"/mnt/media/",,"/mnt/media2/"]
**Available commands:**
- `list`: List all videos with specified filters.
- `convert`: Convert videos to specified formats.
**Options:**
- `-del`: Delete found results after successful operations. **Use with caution**.
- `-in <input>`: Specify input file formats (default: `any`).
- `-filters <filter>`: Apply filters to the selection of videos.
- `-out <output>`: Specify output formats (default: `mkv`, `x265`).
- `-print <print_option>`: Set print options (default: `list`).
- `-files <file>`: Specify files to process.
- `-dirs <directory>`: Specify directories to process.
**For multiple files or filenames, use double comma separated values (,,).**
**Default options (if not specified):**
- `-in`: `any`
- `-filters`: (none)
- `-out`: `mkv`, `x265`
- `-print`: `list`
Description
-----------
**mediacurator** is a Python command-line tool designed to manage a media database. It allows you to:
- List all videos and their metadata, optionally filtered by specified criteria.
- Batch find, repair, or convert videos with encoding errors.
- Batch recode videos to modern codecs (e.g., x265, AV1) based on filters (e.g., container, codec, resolution).
Options
-------
list
====
Search and list videos filtered by the user-provided parameters.
convert
=======
Search and convert all videos filtered by the user-provided parameters.
-del:
=====
Deletes the original videos after successful completion of operations (e.g., conversion or listing). **Use with caution**.
See :doc:`warnings`
-in:
====
[**any**, avi, divx, flv, m4v, mkv, mp4, mpg, ogm, vid, webm, wmv]
Filters videos by file format (container extensions). The default is `any`, meaning all formats are included.
-filters:
=========
[fferror, old, lowres, hd, 720p, 1080p, uhd, mpeg, mpeg4, x264, wmv3, wmv]
Filters videos based on specific criteria:
- **fferror**: Select videos with encoding errors (see :doc:`errors`)
- **old**: Select videos using outdated codecs (anything except hevc or av1)
- **hd**: Select videos in HD (720p, 1080p, UHD)
- **lowres**: Select videos that are not in HD
- **uhd**: Select Ultra-HD videos (width or height >= 2160)
- **1080p**: Select Full-HD videos (1440 <= width < 2160 or 1080 <= height < 2160)
- **720p**: Select HD videos (1280 <= width < 1440 or 720 <= height < 1080)
- **sd**: Select standard-definition videos (480 <= height < 720)
- **subsd**: Select substandard-definition videos (height < 480)
- **mpeg, mpeg4, x264, wmv3, wmv, vob**: Filter by video codec
-out:
=====
[**mkv**/mp4, x265/av1]
Specifies the output format for video conversions:
- **mkv**: (**Default**) Package the output video in a `Matroska <https://en.wikipedia.org/wiki/Matroska>`_ container.
- **mp4**: Package the output video in an MP4 container.
- **x265** or **hevc**: (**Default**) Encode the video using `x265 <https://en.wikipedia.org/wiki/X265>`_ (HEVC).
- **av1**: Encode the video using `AOMedia Video 1 <https://en.wikipedia.org/wiki/AV1>`_ (AV1).
-print:
=======
[**list**, formated, verbose]
Specifies how the output should be displayed:
- **list**: (**Default**) Prints video info in a concise, single-line format.
.. image:: ../_static/Screenshot-print_list-single.png
:width: 600
:alt: List videos (single-line output)
- **formated**: Prints video info in a more readable format with line breaks.
.. image:: ../_static/Screenshot-print_formatted-single.png
:width: 400
:alt: List videos (formatted output)
- **verbose**: Prints the FFmpeg output during conversions.
-dirs:
======
["/mnt/media/",,"/mnt/media2/"]
Specifies directories to scan, separated by **double commas** (,,).
-files:
=======
["/mnt/media/video.avi",,"/mnt/media2/video2.mp4"]
Specifies individual video files to process, separated by **double commas** (,,).
Examples
--------
.. code-block:: bash
# This command lists all videos in the specified directories that use old codecs and
# formats the output.
mediacurator list -filters:old -print:formated -dirs:"/mnt/media/",,"/mnt/media2/"
# This command converts all MPEG4 videos found in the specified directories to AV1 format
# in MP4 containers and deletes the originals.
mediacurator convert -del -filters:mpeg4 -out:av1,mp4 -dirs:"/mnt/media/",,"/mnt/media2/"
# This command converts AVI or MPG videos, displays detailed output during conversion, and
# deletes originals.
mediacurator convert -del -in:avi,mpg -print:formated,verbose -dirs:"/mnt/media/",,"/mnt/media2/"
For more examples, see :doc:`use_cases`
See Also
--------
- `FFmpeg <https://ffmpeg.org/>`_
Glossary
--------
- **Codec**: A program or device that compresses and decompresses digital media.
- **Container**: A file format that holds video, audio, and metadata.
- **UHD**: Ultra High Definition, refers to video resolutions of 3840x2160 pixels or higher.
Error Handling
--------------
Common issues users might encounter include:
- **Encoding Errors**: If videos have encoding errors, they can be filtered using the `-filters fferror` option.
- **Unsupported Formats**: Ensure that input formats specified in `-in` are supported by mediacurator.
Author
------
Fabrice Quenneville

View File

@ -0,0 +1,40 @@
==========
Quickstart
==========
.. warning::
The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.
.. code-block:: bash
mediacurator [list,convert] [-del]
[-in:any,avi,mkv,wmv,mpg,mp4,m4v,flv,vid,divx,ogm,webm]
[-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv]
[-out:mkv/mp4,x265/av1]
[-print:list,formated,verbose]
[-dirs/-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
# List all videos with old codec in formated format
mediacurator list -filters:old -print:formated -dirs:/mnt/media/ >> ../medlist.txt
# Convert all videos with the codec mpeg4 in a mp4 using the av1 video codec and the delete the originals
mediacurator convert -del -filters:mpeg4 -out:av1,mp4 -dirs:"/mnt/media/Movies/"
# Convert any video with avi or mpg extensions, print formated text including ffmpeg's output and then delete the originals
mediacurator convert -del -in:avi,mpg -print:formated,verbose -dirs:/mnt/media/
More examples in :doc:`use_cases`

View File

@ -0,0 +1,106 @@
=========
Use cases
=========
.. warning::
The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.
The main reasons to use mediacurator would be the following:
* :ref:`legacy_list_cmd` on a video library such as:
- How many videos of the lot are in HD vs standard or substandard definitions
- What videos are in older codecs
- Are there videos in the library with encoding or corruption errors
* :ref:`legacy_purge` selected videos in a media library
* :ref:`legacy_fferror` on selected videos in a media library
* :ref:`legacy_convert` videos from an old codec to `High Efficiency Video Coding <https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding>`_
.. _legacy_list_cmd:
Print information
-----------------
List all videos with old codec in formatted output
.. code-block:: bash
mediacurator list -filters:old -print:formated -dirs:"/mnt/media/",,"/mnt/media2/"
List all videos with substandard definitions with a formatted output
.. code-block:: bash
mediacurator list -filters:subsd -print:formated -dirs:"/mnt/media/",,"/mnt/media2/"
.. _legacy_purge:
Purge
-----
Please see :doc:`warnings`
List and delete all videos using the `Windows Media Video <https://en.wikipedia.org/wiki/Windows_Media_Video>`_ codecs
.. code-block:: bash
mediacurator list --delete -filters:wmv -dirs:"/mnt/media/",,"/mnt/media2/"
List and delete all videos using `Audio Video Interleave <https://en.wikipedia.org/wiki/Audio_Video_Interleave>`_
.. code-block:: bash
mediacurator list --delete -in:avi -dirs:"/mnt/media/",,"/mnt/media2/"
List and delete any videos with encoding errors
.. code-block:: bash
mediacurator list --delete -filters:fferror -dirs:"/mnt/media/",,"/mnt/media2/"
.. _legacy_fferror:
Batch repair encoding errors
----------------------------
List all videos with encoding errors
.. code-block:: bash
mediacurator list -filters:fferror -dirs:"/mnt/media/",,"/mnt/media2/"
List and delete any videos with encoding errors
.. code-block:: bash
mediacurator list --delete -filters:fferror -dirs:"/mnt/media/",,"/mnt/media2/"
Convert all videos with encoding errors to `High Efficiency Video Coding <https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding>`_ and delete the originals
.. code-block:: bash
mediacurator convert --delete -filters:fferror -dirs:"/mnt/media/",,"/mnt/media2/"
.. _legacy_convert:
Batch re-encode
---------------
Convert all videos with old codecs to `High Efficiency Video Coding <https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding>`_ to save space and delete the originals
.. code-block:: bash
mediacurator convert --delete -filters:old -dirs:"/mnt/media/",,"/mnt/media2/"
Convert all videos with the codec mpeg4 to an mkv container using the av1 video codec
.. code-block:: bash
mediacurator convert -filters:mpeg4 -out:av1,mkv -dirs:"/mnt/media/",,"/mnt/media2/"
Convert any video with avi or mpg extensions, print formatted text including ffmpeg's output, and then delete the originals
.. code-block:: bash
mediacurator convert --delete -in:avi,mpg -print:formated,verbose -dirs:"/mnt/media/",,"/mnt/media2/"

View File

@ -0,0 +1,67 @@
========
Warnings
========
.. warning::
The following documentation is for versions prior to 1.0.1. It may contain features and usage instructions that are incompatible with the current version of mediacurator.
.. warning::
Before using the **delete feature**, we strongly recommend running several dry runs to get acquainted with `mediacurator`, as incorrect usage can cause irreversible damage to your media library.
The `-del` flag will **permanently delete** files, so it is crucial to ensure that the command is executed correctly. Below are some examples of how the delete feature works.
Example use Cases for the `-del` Flag
-----------------------------------------
1. **Delete all non-HD (low-resolution) videos in a folder:**
.. code-block:: bash
mediacurator list -del -filters:lowres -dirs:"/mnt/media/"
2. **Delete all substandard quality videos in a folder:**
.. code-block:: bash
mediacurator list -del -filters:subsd -dirs:"/mnt/media/"
.. image:: ../_static/Legacy-Screenshot-delete.png
:width: 600
:alt: Deleting videos
3. **Delete all videos in a folder with encoding errors:**
.. code-block:: bash
mediacurator list -del -filters:fferror -dirs:"/mnt/media/"
4. **Convert (repair) and then delete all videos in a folder with encoding errors:**
.. code-block:: bash
mediacurator convert -del -filters:fferror -dirs:"/mnt/media/"
5. **Delete all videos in a folder:**
.. code-block:: bash
mediacurator list -del -filters:lowres -dirs:"/mnt/media/"
Important Notes
---------------
- **Irreversibility**: All of these commands involve permanent deletion. Once a file is deleted using the `-del` flag, it cannot be recovered.
- **Run without `-del` first**: Always perform several dry runs by omitting the `-del` flag to ensure that the correct files are selected for deletion. Familiarizing yourself with the tool before using destructive commands is essential to avoid unintended consequences.
- **Specific File Selection**: If you're unsure about applying filters to an entire directory, you can use the `-files` option to target individual files for deletion or conversion, further reducing the risk of unintended deletions.
- **Backup Recommendation**: Before running any commands with the `-del` flag, it is a good practice to back up your media library or the specific directories being processed, especially if they contain valuable or irreplaceable files.
Dry run example (without deletion)
----------------------------------
.. code-block:: bash
mediacurator list -filters:lowres -dirs:"/mnt/media/"
Make sure you carefully verify the output and files selected during the dry runs to prevent accidental data loss.

View File

@ -1,37 +1,37 @@
======
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.
FFmpeg can detect quite a few errors in the encoding of your source video's encoding and can also be used to repair these errors.
Repairable encoding 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"
* **"Referenced QT chapter track not found"**: Indicates that the video references a chapter that doesn't exist.
* **"Error, header damaged or not MPEG-4 header"**: The file's header is corrupted or missing.
* **"Header missing"**: The file lacks the necessary header information for decoding.
* **"SEI type"**: Issues related to SEI (Supplemental Enhancement Information) data.
* **"no frame!"**: No video frames available for processing.
* **"Error while decoding MPEG audio frame."**: Issues decoding the audio stream.
* **"big_values too big"**: Indicates that certain values in the file are larger than expected.
* ...
FFmpeg issues
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.
While using FFmpeg, you may encounter other errors (such as segfaults) depending on your version. Mediacurator will also print information when that occurs and will move on to the next video after cleaning up any failures.
If that happens there are a few steps you can take:
If you experience these errors, consider the following steps:
* **Update FFmpeg**: Ensure you are using the latest version by downloading it from `ffmpeg.org <https://ffmpeg.org/download.html>`_, as many distributions provide outdated versions in their repositories.
* **Run with Verbose Option**: Execute mediacurator with the verbose print option, which will display the raw FFmpeg output for better troubleshooting.
* **Retry**: In my experience, some errors do not necessarily recur...
* `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
* 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
Other Bugs
----------
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>`_
If you encounter other bugs, issues, or would like to suggest features, feel free to open a bug report on `GitHub <https://github.com/fabquenneville/mediacurator/issues>`_.
For further assistance, you can reach out through the GitHub repository or the projects support channels.

View File

@ -2,17 +2,40 @@
Installation
============
This package has only been tested on GNU/Linux & Windows and requires FFMPEG installed. For now it will be distributed on `GitHub <https://github.com/fabquenneville/mediacurator.git>`_
This package has been tested on GNU/Linux (e.g., Debian, Ubuntu, Fedora) and Windows, and requires FFmpeg to be installed. For now, it will be distributed on `GitHub <https://github.com/fabquenneville/mediacurator.git>`_.
Install FFmpeg
--------------
`Download FFmpeg <https://ffmpeg.org/download.html>`_
To install FFmpeg, you can follow the instructions for your platform:
- **On Debian and Ubuntu**:
.. code-block:: bash
sudo apt update
sudo apt install ffmpeg
- **On Fedora**:
.. code-block:: bash
sudo dnf install ffmpeg
- **On Windows**:
- Download the latest build from `FFmpeg <https://ffmpeg.org/download.html>`_.
- Follow the installation instructions provided on the site.
To verify your FFmpeg installation, you can run:
.. code-block:: bash
ffmpeg -version
Install from PyPi
-----------------
You can install the `mediacurator` package directly from PyPi using the following command:
.. code-block:: bash
:linenos:
pip install mediacurator

View File

@ -12,134 +12,183 @@ Synopsis
.. code-block:: bash
mediacurator [list,convert] [-del]
[-in:any,avi,mkv,wmv,mpg,mp4,m4v,flv,vid,divx,ogm,webm]
[-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv,vob]
[-out:mkv/mp4,x265/av1]
[-print:list,formated,verbose]
[-dirs/-files:"/mnt/media/",,"/mnt/media2/"]
mediacurator <command> [options]
mediacurator [list convert] [-del/--delete]
[-i/--inputs any 3gp asf avi divx dv f4v flv gif m2ts m4v mkv mov mp4 mpeg mpg mts ogm ogv rm swf ts vid vob webm wmv]
[-fl/--filters fferror old lowres hd 720p 1080p uhd mpeg mpeg4 x264 wmv3 wmv]
[-o/--outputs mkv/mp4 x265/av1]
[-p/--printop list formatted verbose]
[-d/--dirs "/mnt/media/" "/mnt/media2/"]
[-f/--files "file1.ext" "file2.ext"]
**for multiple files or filenames use double comma separated values ",,"**
**Available commands:**
- `list`: List all videos with specified filters.
- `convert`: Convert videos to specified formats.
default options are:
**Options:**
.. code-block:: bash
- `-del` or `--delete`: Delete found results after successful operations. **Use with caution**.
- `-i <input>` or `--inputs <input>`: Specify input file formats (default: `any`).
- `-fl <filter>` or `--filters <filter>`: Apply filters to the selection of videos.
- `-o <output>` or `--outputs <output>`: Specify output formats (default: `mkv`, `x265`).
- `-p <print_option>` or `--printop <print_option>`: Set print options (default: `list`).
- `-f <file>` or `--files <file>`: Specify files to process.
- `-d <directory>` or `--dirs <directory>`: Specify directories to process.
-in:any
-filters:
-out:mkv,x265
-print:list
**For multiple files or filenames, use space-separated values ( ).**
**Default options (if not specified):**
- `-i/--inputs`: `any`
- `-fl/--filters`: (none)
- `-o/--outputs`: `mkv`, `x265`
- `-p/--printop`: `list`
Description
-----------
mediacurator is a Python command line tool to manage a media database.
**mediacurator** is a Python command-line tool designed to manage a media database. It allows you to:
* 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 ...
- List all videos and their metadata, optionally filtered by specified criteria.
- Batch find, repair, or convert videos with encoding errors.
- Batch recode videos to modern codecs (e.g., x265, AV1) based on filters (e.g., container, codec, resolution).
Options
-------
list
====
Search and list videos filtered by the parameters passed by the user.
Search and list videos filtered by the user-provided parameters.
convert
=======
Search and convert all videos filtered by the parameters passed by the user.
Search and convert all videos filtered by the user-provided parameters.
-del:
=====
Delete all original videos once selected operations have been done succefully.
--delete
========
Short form: `-del`
See :doc:`warnings`
Deletes the original videos after successful completion of operations (e.g., conversion or listing). **Use with caution**.
-in:
====
[**any**,avi,mkv,wmv,mpg,mp4,m4v,flv,vid,divx,ogm]
See :doc:`warnings`
Search all videos of the selected container **extensions** in the directories. By default it will include any file format.
--inputs
========
Short form: `-i`
-filters:
[**any**, 3gp, asf, avi, divx, dv, f4v, flv, gif, m2ts, m4v, mkv, mov, mp4, mpeg, mpg, mts, ogm, ogv, rm, swf, ts, vid, vob, webm, wmv]
Filters videos by file format (container extensions). The default is `any`, meaning all formats are included.
--filters
=========
[fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv]
Short form: `-fl`
Filter the selected videos for parameters:
[fferror, old, lowres, hd, 720p, 1080p, uhd, mpeg, mpeg4, x264, wmv3, wmv]
* fferror: Select all videos with encoding errors (See :doc:`errors`)
* old: Select all videos using old codecs (Everything except hevc or av1)
* hd: 720p, 1080p, uhd
* lowres: Everything not hd
* uhd: if width >= 2160 or height >= 2160
* 1080p: if less than uhd and width >= 1440 or height >= 1080
* 720p: if less than 1080p and width >= 1280 or height >= 720:
* sd: if less than 720p and if height >= 480
* subsd: Substandard definitions: Everything under 480p
* mpeg,mpeg4,x264,wmv3,wmv,vob: Filter for videos encoded in the requested video codec
Filters videos based on specific criteria:
-out:
=====
[**mkv**/mp4,x265/av1]
- **fferror**: Select videos with encoding errors (see :doc:`errors`)
- **old**: Select videos using outdated codecs (anything except hevc or av1)
- **hd**: Select videos in HD (720p, 1080p, UHD)
- **lowres**: Select videos that are not in HD
- **uhd**: Select Ultra-HD videos (width or height >= 2160)
- **1080p**: Select Full-HD videos (1440 <= width < 2160 or 1080 <= height < 2160)
- **720p**: Select HD videos (1280 <= width < 1440 or 720 <= height < 1080)
- **sd**: Select standard-definition videos (480 <= height < 720)
- **subsd**: Select substandard-definition videos (height < 480)
- **mpeg, mpeg4, x264, wmv3, wmv, vob**: Filter by video codec
Select the outputs for the video conversions
--outputs
=========
Short form: `-o`
* mkv: (**Default**) Package the resulting video in a `Matroska <https://en.wikipedia.org/wiki/Matroska>`_ container.
* mp4: Package the resulting video in a container.
* x265/hevc: (**Default**) Encode the video using the `x265 <https://en.wikipedia.org/wiki/X265>`_ compression format.
* av1: Encode the video using the `AOMedia Video 1 <https://en.wikipedia.org/wiki/AV1>`_ compression format. This will be used as default once the developpers at FFmpeg move it out of `experimental <https://trac.ffmpeg.org/wiki/Encode/AV1>`_ .
[**mkv**/mp4, x265/av1]
-print:
=======
[**list**,formated,verbose]
Specifies the output format for video conversions:
* list: (**Default**) Print the information about the videos on a single line
- **mkv**: (**Default**) Package the output video in a `Matroska <https://en.wikipedia.org/wiki/Matroska>`_ container.
- **mp4**: Package the output video in an MP4 container.
- **x265** or **hevc**: (**Default**) Encode the video using `x265 <https://en.wikipedia.org/wiki/X265>`_ (HEVC).
- **av1**: Encode the video using `AOMedia Video 1 <https://en.wikipedia.org/wiki/AV1>`_ (AV1).
.. image:: ../_static/Screenshot-print_list-single.png
:width: 600
:alt: Deleting videos
--printop
=========
Short form: `-p`
* formated: Print the information in an aerated format
[**list**, formatted, verbose]
.. image:: ../_static/Screenshot-print_formated-single.png
:width: 400
:alt: Deleting videos
Specifies how the output should be displayed:
* verbose: Print the FFmpeg output during the video conversions
- **list**: (**Default**) Prints video info in a concise, single-line format.
-dirs:
.. image:: ../_static/Screenshot-print_list-single.png
:width: 600
:alt: List videos (single-line output)
- **formatted**: Prints video info in a more readable format with line breaks.
.. image:: ../_static/Screenshot-print_formatted-single.png
:width: 400
:alt: List videos (formatted output)
- **verbose**: Prints the FFmpeg output during conversions.
--dirs
======
["/mnt/media/",,"/mnt/media2/"]
Short form: `-d`
The directories to scan as a **double comma** separated values list.
["/mnt/media/", "/mnt/media2/"]
Specifies directories to scan, separated by spaces.
-files:
--files
=======
["/mnt/media/video.avi",,"/mnt/media2/video2.mp4"]
Short form: `-f`
Specific videos to include as a **double comma** separated values list.
["/mnt/media/video.avi", "/mnt/media2/video2.mp4"]
Specifies individual video files to process, separated by spaces.
Examples
--------
.. code-block:: bash
# List all videos with old codec in formated format
mediacurator list -filters:old -print:formated -dirs:/mnt/media/ >> ../medlist.txt
# Convert all videos with the codec mpeg4 in a mp4 using the av1 video codec and the delete the originals
mediacurator convert -del -filters:mpeg4 -out:av1,mp4 -dirs:"/mnt/media/Movies/"
# Convert any video with avi or mpg extensions, print formated text including ffmpeg's output and then delete the originals
mediacurator convert -del -in:avi,mpg -print:formated,verbose -dirs:/mnt/media/
# This command lists all videos in the specified directories that use old codecs and
# formats the output.
mediacurator list --filters old --printop formatted --dirs "/mnt/media/" "/mnt/media2/"
# This command converts all MPEG4 videos found in the specified directories to AV1 format
# in MP4 containers and deletes the originals.
mediacurator convert --delete --filters mpeg4 --outputs av1 mp4 --dirs "/mnt/media/" "/mnt/media2/"
# This command converts AVI or MPG videos, displays detailed output during conversion, and
# deletes originals.
mediacurator convert --delete --inputs avi mpg --printop formatted verbose --dirs "/mnt/media/" "/mnt/media2/"
More examples in :doc:`use_cases`
For more examples, see :doc:`use_cases`
See Also
--------
`FFmpeg <https://ffmpeg.org/>`_
- `FFmpeg <https://ffmpeg.org/>`_
Glossary
--------
- **Codec**: A program or device that compresses and decompresses digital media.
- **Container**: A file format that holds video, audio, and metadata.
- **UHD**: Ultra High Definition, refers to video resolutions of 3840x2160 pixels or higher.
Error Handling
--------------
Common issues users might encounter include:
- **Encoding Errors**: If videos have encoding errors, they can be filtered using the `--filters fferror` option.
- **Unsupported Formats**: Ensure that input formats specified in `--inputs` are supported by mediacurator.
Author
------

View File

@ -2,35 +2,56 @@
Quickstart
==========
.. code-block:: bash
mediacurator [list,convert] [-del]
[-in:any,avi,mkv,wmv,mpg,mp4,m4v,flv,vid,divx,ogm,webm]
[-filters:fferror,old,lowres,hd,720p,1080p,uhd,mpeg,mpeg4,x264,wmv3,wmv]
[-out:mkv/mp4,x265/av1]
[-print:list,formated,verbose]
[-dirs/-files:"/mnt/media/",,"/mnt/media2/"]
**for multiple files or filenames use double comma separated values ",,"**
default options are:
To use `mediacurator`, execute the following command structure:
.. code-block:: bash
-in:any
-filters:
-out:mkv,x265
-print:list
mediacurator <command> [options]
Examples:
mediacurator [list convert] [-del/--delete]
[-i/--inputs any 3gp asf avi divx dv f4v flv gif m2ts m4v mkv mov mp4 mpeg mpg mts ogm ogv rm swf ts vid vob webm wmv]
[-fl/--filters fferror old lowres hd 720p 1080p uhd mpeg mpeg4 x264 wmv3 wmv]
[-o/--outputs mkv/mp4 x265/av1]
[-p/--printop list formatted verbose]
[-d/--dirs "/mnt/media/" "/mnt/media2/"]
[-f/--files "file1.ext" "file2.ext"]
**Available commands:**
- `list`: List all videos with specified filters.
- `convert`: Convert videos to specified formats.
**Options:**
- `-del` or `--delete`: Delete found results after successful operations.
- `-i <input>` or `--inputs <input>`: Specify input file formats (default: `any`).
- `-fl <filter>` or `--filters <filter>`: Apply filters to the selection of videos.
- `-o <output>` or `--outputs <output>`: Specify output formats (default: `mkv`, `x265`).
- `-p <print_option>` or `--printop <print_option>`: Set print options (default: `list`).
- `-f <file>` or `--files <file>`: Specify files to process.
- `-d <directory>` or `--dirs <directory>`: Specify directories to process.
**For multiple files or filenames, use space-separated values ( ).**
**Default options:**
- `-i/--inputs any`
- `-fl/--filters`
- `-o/--outputs mkv x265`
- `-p/--printop list`
**Examples:**
The following examples demonstrate how to use `mediacurator` with the options listed above:
.. code-block:: bash
# List all videos with old codec in formated format
mediacurator list -filters:old -print:formated -dirs:/mnt/media/ >> ../medlist.txt
# Convert all videos with the codec mpeg4 in a mp4 using the av1 video codec and the delete the originals
mediacurator convert -del -filters:mpeg4 -out:av1,mp4 -dirs:"/mnt/media/Movies/"
# Convert any video with avi or mpg extensions, print formated text including ffmpeg's output and then delete the originals
mediacurator convert -del -in:avi,mpg -print:formated,verbose -dirs:/mnt/media/
# List all videos with an old codec in formatted format
mediacurator list --filters old --printop formatted --dirs /mnt/media/ >> ../medlist.txt
More examples in :doc:`use_cases`
# Convert all videos with the MPEG4 codec to MP4 using the AV1 codec and delete the originals
mediacurator convert --delete --filters mpeg4 --outputs av1,mp4 --dirs "/mnt/media/Movies/"
# Convert any video with AVI or MPG extensions, print formatted text including FFmpeg's output, and then delete the originals
mediacurator convert --delete --inputs avi,mpg --printop formatted,verbose --dirs /mnt/media/
For more examples, see :doc:`use_cases`.

View File

@ -17,18 +17,17 @@ The main reasons to use mediacurator would be the following:
Print information
-----------------
List all videos with old codec in formated format
List all videos with old codec in formatted output
.. code-block:: bash
mediacurator list -filters:old -dirs:/mnt/media/
mediacurator list --filters old --printop formatted --dirs "/mnt/media/" "/mnt/media2/"
List all videos with substandard definitions with a formated output
List all videos with substandard definitions with a formatted output
.. code-block:: bash
mediacurator list -filters:subsd -print:formated -dirs:/mnt/media/
mediacurator list --filters subsd --printop formatted --dirs "/mnt/media/" "/mnt/media2/"
.. _purge:
@ -41,21 +40,19 @@ List and delete all videos using the `Windows Media Video <https://en.wikipedia.
.. code-block:: bash
mediacurator list -del -filters:wmv -dirs:/mnt/media/
mediacurator list --delete --filters wmv --dirs "/mnt/media/" "/mnt/media2/"
List and delete all videos using an `Audio Video Interleave <https://en.wikipedia.org/wiki/Audio_Video_Interleave>`_
List and delete all videos using `Audio Video Interleave <https://en.wikipedia.org/wiki/Audio_Video_Interleave>`_
.. code-block:: bash
mediacurator list -del -in:avi -dirs:/mnt/media/
mediacurator list --delete --inputs avi --dirs "/mnt/media/" "/mnt/media2/"
List and delete any videos with encoding errors
.. code-block:: bash
mediacurator list -del -filters:fferror -dirs:/mnt/media/
mediacurator list --delete --filters fferror --dirs "/mnt/media/" "/mnt/media2/"
.. _fferror:
@ -66,20 +63,19 @@ List all videos with encoding errors
.. code-block:: bash
mediacurator list -filters:fferror -dirs:/mnt/media/
mediacurator list --filters fferror --dirs "/mnt/media/" "/mnt/media2/"
List and delete any videos with encoding errors
.. code-block:: bash
mediacurator list -del -filters:fferror -dirs:/mnt/media/
mediacurator list --delete --filters fferror --dirs "/mnt/media/" "/mnt/media2/"
Convert all videos with encoding errors to `High Efficiency Video Coding <https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding>`_ and the delete the originals
Convert all videos with encoding errors to `High Efficiency Video Coding <https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding>`_ and delete the originals
.. code-block:: bash
mediacurator convert -del -filters:fferror -dirs:"/mnt/media/Movies/"
mediacurator convert --delete --filters fferror --dirs "/mnt/media/" "/mnt/media2/"
.. _convert:
@ -90,16 +86,16 @@ Convert all videos with old codecs to `High Efficiency Video Coding <https://en.
.. code-block:: bash
mediacurator convert -del -filters:old -dirs:"/mnt/media/Movies/"
mediacurator convert --delete --filters old --dirs "/mnt/media/" "/mnt/media2/"
Convert all videos with the codec mpeg4 to an mkv container using the av1 video codec
.. code-block:: bash
mediacurator convert -filters:mpeg4 -out:av1,mkv -dirs:"/mnt/media/Movies/"
mediacurator convert --filters mpeg4 --outputs av1,mkv --dirs "/mnt/media/" "/mnt/media2/"
Convert any video with avi or mpg extensions, print formated text including ffmpeg's output and then delete the originals
Convert any video with avi or mpg extensions, print formatted text including ffmpeg's output, and then delete the originals
.. code-block:: bash
mediacurator convert -del -in:avi,mpg -print:formated,verbose -dirs:/mnt/media/
mediacurator convert --delete --inputs avi,mpg --printop formatted,verbose --dirs "/mnt/media/" "/mnt/media2/"

View File

@ -2,44 +2,62 @@
Warnings
========
Before using the delete feature please try a few dry runs to get acquainted with mediacurator as it can irreparably damage your media library when not used properly.
.. warning::
When using the -del flag here is the expected behavior:
Before using the **delete feature**, we strongly recommend running several dry runs to get acquainted with `mediacurator`, as incorrect usage can cause irreversible damage to your media library.
To delete all non-hd videos in a folder:
The `--delete` flag will **permanently delete** files, so it is crucial to ensure that the command is executed correctly. Below are some examples of how the delete feature works.
Example use cases for the `--delete` Flag
-----------------------------------------
1. **Delete all non-HD (low-resolution) videos in a folder:**
.. code-block:: bash
mediacurator list -del -filters:lowres -dirs/-files:"/mnt/media/"
mediacurator list --delete --filters lowres --dirs "/mnt/media/"
To delete all substandard videos in a folder:
2. **Delete all substandard quality videos in a folder:**
.. code-block:: bash
mediacurator list -del -filters:subsd -dirs/-files:"/mnt/media/"
mediacurator list --delete --filters subsd --dirs "/mnt/media/"
.. image:: ../_static/Screenshot-delete.png
:width: 600
:alt: Deleting videos
To delete all videos in a folder with encoding errors:
3. **Delete all videos in a folder with encoding errors:**
.. code-block:: bash
mediacurator list -del -filters:fferror -dirs/-files:"/mnt/media/"
mediacurator list --delete --filters fferror --dirs "/mnt/media/"
To convert (repair) then delete all videos in a folder with encoding errors:
4. **Convert (repair) and then delete all videos in a folder with encoding errors:**
.. code-block:: bash
mediacurator convert -del -filters:fferror -dirs/-files:"/mnt/media/"
mediacurator convert --delete --filters fferror --dirs "/mnt/media/"
To delete all videos in a folder:
5. **Delete all videos in a folder:**
.. code-block:: bash
mediacurator list -del -filters:lowres -dirs/-files:"/mnt/media/"
mediacurator list --delete --dirs "/mnt/media/"
All these commands can have valuable use but are irrecoverable if done unintended.
Important Notes
---------------
Again, please try a few dry runs without -del until you are acquainted with mediacurator.
- **Irreversibility**: All of these commands involve permanent deletion. Once a file is deleted using the `--delete` flag, it cannot be recovered.
- **Run without `--delete` first**: Always perform several dry runs by omitting the `--delete` flag to ensure that the correct files are selected for deletion. Familiarizing yourself with the tool before using destructive commands is essential to avoid unintended consequences.
- **Specific File Selection**: If you're unsure about applying filters to an entire directory, you can use the `--files` option to target individual files for deletion or conversion, further reducing the risk of unintended deletions.
- **Backup Recommendation**: Before running any commands with the `--delete` flag, it is a good practice to back up your media library or the specific directories being processed, especially if they contain valuable or irreplaceable files.
Dry run example (without deletion)
----------------------------------
.. code-block:: bash
mediacurator list --filters lowres --dirs "/mnt/media/"
Make sure you carefully verify the output and files selected during the dry runs to prevent accidental data loss.

View File

@ -1 +1 @@
__all__ = ["bcolors", "medialibrary", "tools", "video"]
__all__ = ["medialibrary", "tools", "video"]

View File

@ -12,6 +12,7 @@ import colorama
colorama.init()
# Define color codes for colored output
ccyan = colorama.Fore.CYAN
cgreen = colorama.Fore.GREEN
creset = colorama.Fore.RESET
@ -20,8 +21,8 @@ class MediaLibrary():
'''This class manages information about the workspace and all videos in it.'''
def __init__(self,
files=False,
directories=False,
files=None,
directories=None,
inputs=["any"],
filters=[],
verbose=False):
@ -29,30 +30,32 @@ class MediaLibrary():
Initializes a MediaLibrary instance with provided parameters.
Args:
files (list or False): A list of video files.
directories (list or False): A list of directories containing videos directly or in subdirectories.
inputs (list): A list of filters to keep when browsing the directories.
filters (list): A list of filters to apply to the videos.
verbose (bool): A flag to enable verbose output.
files (list or None): A list of video files to load into the library.
directories (list or None): A list of directories containing videos directly or in subdirectories.
inputs (list): A list of input filters used to determine which videos to include when browsing directories (default is ["any"]).
filters (list): A list of filters to apply to the videos (default is an empty list).
verbose (bool): A flag to enable verbose output (default is False).
'''
if not files and not directories:
return
self.directories = None
self.inputs = inputs
self.filters = filters
self.videos = dict()
# Load files if provided
if files:
for filepath in files:
self.videos[filepath] = Video(filepath, verbose=verbose)
self.load_files(files, verbose)
if directories:
# Load directories if provided
elif directories:
self.directories = directories
self.load_directories(verbose=verbose)
self.load_directories(verbose)
self.filter_videos(verbose=verbose)
else:
raise ValueError("No files or directories provided.")
# Filter the loaded videos based on the specified filters
self.filter_videos(verbose)
def __str__(self):
'''
@ -69,6 +72,10 @@ class MediaLibrary():
text += f"mediacurator is tracking {len(self.videos)} video files"
return text
def load_files(self, files, verbose=False):
for filepath in files:
self.videos[filepath] = Video(filepath, verbose=verbose)
def load_directories(self, verbose=False):
'''
Scans folders for video files respecting the inputs requested by the user and saves them to the videos dictionary.
@ -85,51 +92,81 @@ class MediaLibrary():
for directory in self.directories:
path = Path(directory)
# get all video filetypes
if "wmv" in self.inputs or "any" in self.inputs or len(
if "3gp" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[wW][mM][vV]"))
videolist += list(path.rglob("*.[3G][Pp][Pp]"))
if "asf" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[aA][sS][fF]"))
if "avi" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[aA][vV][iI]"))
if "mkv" in self.inputs or "any" in self.inputs or len(
if "divx" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[mM][kK][vV]"))
if "mp4" in self.inputs or "any" in self.inputs or len(
videolist += list(path.rglob("*.[dD][iI][vV][xX]"))
if "dv" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[mM][pP]4"))
if "m4v" in self.inputs or "any" in self.inputs or len(
videolist += list(path.rglob("*.[dD][vV]"))
if "f4v" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[mM]4[vV]"))
videolist += list(path.rglob("*.[fF]4[vV]"))
if "flv" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[fF][lL][vV]"))
if "mpg" in self.inputs or "any" in self.inputs or len(
if "gif" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[mM][pP][gG]"))
videolist += list(path.rglob("*.[gG][iI][fF]"))
if "m2ts" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[mM]2[tT][sS]"))
if "m4v" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[mM]4[vV]"))
if "mkv" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[mM][kK][vV]"))
if "mov" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[mM][oO][vV]"))
if "mp4" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[mM][pP]4"))
if "mpeg" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[mM][pP][eE][gG]"))
if "mpg" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[mM][pP][gG]"))
if "mts" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[mM][tT][sS]"))
if "ogm" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[oO][gG][mM]"))
if "ogv" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[oO][gG][vV]"))
if "rm" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[rR][mM]"))
if "swf" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[sS][wW][fF]"))
if "ts" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[tT][sS]"))
if "vid" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[vV][iI][dD]"))
if "vob" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[vV][oO][bB]"))
if "divx" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[dD][iI][vV][xX]"))
if "ogm" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[oO][gG][mM]"))
if "ts" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[tT][sS]"))
if "webm" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[wW][eE][bB][mM]"))
if "wmv" in self.inputs or "any" in self.inputs or len(
self.inputs) < 1:
videolist += list(path.rglob("*.[wW][mM][vV]"))
# Remove folders
videolist_tmp = videolist
@ -261,3 +298,67 @@ class MediaLibrary():
except KeyError:
pass
return False
def list_videos(self, formatted: bool = False, delete: bool = False):
# Create a sorted list of videos marked for operation
keylist = sorted(filepath for filepath in self.videos
if self.videos[filepath].operate)
for filepath in keylist:
self.videos[filepath].print_details(formatted)
# If deletion is requested, delete and unwatch the video
if delete:
self.unwatch(filepath, delete=True)
def test_videos(self, formatted: bool = False, delete: bool = False):
# For testing, we can just call the list_videos method as they behave similarly
self.list_videos(formatted, delete)
def convert_videos(self,
vcodec: str,
formatted: bool = False,
verbose: bool = False,
delete: bool = False):
counter = 0
# Create a sorted list of videos marked for operation
keylist = sorted(filepath for filepath in self.videos
if self.videos[filepath].operate)
for filepath in keylist:
counter += 1
# Print conversion start information
print(
f"{cgreen}\n****** Starting conversion {counter} of {len(keylist)}: '{ccyan}{self.videos[filepath].filename_origin}{cgreen}' from {ccyan}{self.videos[filepath].codec}{cgreen} to {ccyan}{vcodec}{cgreen}...{creset}"
)
print(f"{ccyan}Original file:{creset}")
self.videos[filepath].print_details(formatted)
print(f"{cgreen}Converting, please wait...{creset}", end="\r")
# Perform the conversion
if self.videos[filepath].convert(vcodec, verbose=verbose):
# Mark video as processed
self.videos[filepath].operate = False
# Get the path for the new video file
newfpath = self.videos[filepath].path + self.videos[
filepath].filename_new
# Add the new video to the library
self.videos[newfpath] = Video(newfpath, verbose=verbose)
# Print success message with details about the conversion
print(
f"{cgreen}Successfully converted '{self.videos[filepath].filename_origin}'{ccyan}({self.videos[filepath].filesize}mb){cgreen} to '{self.videos[newfpath].filename_origin}'{ccyan}({self.videos[newfpath].filesize}mb){cgreen}, {ccyan}new file:{creset}"
)
# Display detailed information about the new video
self.videos[newfpath].print_details(formatted)
# If deletion is requested, delete and unwatch the original video
if delete:
self.unwatch(filepath, delete=True)

View File

@ -3,9 +3,10 @@
These are various tools used by mediacurator
'''
import argparse
import argcomplete
import subprocess
import os
import sys
# Import colorama for colored output
import colorama
@ -13,9 +14,10 @@ import colorama
colorama.init()
# Define color codes for colored output
cblue = colorama.Fore.BLUE
cgreen = colorama.Fore.GREEN
cyellow = colorama.Fore.YELLOW
cred = colorama.Fore.RED
cyellow = colorama.Fore.YELLOW
creset = colorama.Fore.RESET
@ -23,40 +25,79 @@ def load_arguments():
'''Get/load command parameters
Returns:
dict: A dictionary containing lists of options passed by the user
Namespace: An argparse.Namespace object containing options passed by the user
'''
arguments = {
"directories": list(),
"files": list(),
"inputs": list(),
"filters": list(),
"outputs": list(),
"printop": list(),
}
parser = argparse.ArgumentParser(description='mediacurator CLI Tool')
for arg in sys.argv:
# Confirm with the user that they selected to delete found files
if "-del" in arg:
print(f"{cyellow}WARNING: Delete option selected!{creset}")
if not user_confirm(
f"Are you sure you wish to delete all found results after selected operations are successful? [Y/N] ?",
color="yellow"):
print(f"{cgreen}Exiting!{creset}")
exit()
elif "-in:" in arg:
arguments["inputs"] += arg[4:].split(",")
elif "-filters:" in arg:
arguments["filters"] += arg[9:].split(",")
elif "-out:" in arg:
arguments["outputs"] += arg[5:].split(",")
elif "-print:" in arg:
arguments["printop"] += arg[7:].split(",")
elif "-files:" in arg:
arguments["files"] += arg[7:].split(",,")
elif "-dirs:" in arg:
arguments["directories"] += arg[6:].split(",,")
# Add a positional argument for the command
parser.add_argument('command',
choices=['list', 'test', 'convert'],
help='Command to run')
return arguments
# Add other arguments with both short and long options, including defaults
parser.add_argument(
'-del',
'--delete',
action='store_true',
help='Delete found results after successful operations')
parser.add_argument('-i',
'--inputs',
type=str,
nargs='*',
default=['any'],
help='Input options (default: any)')
parser.add_argument('-fl',
'--filters',
type=str,
nargs='*',
default=[],
help='Filters to apply')
parser.add_argument('-o',
'--outputs',
type=str,
nargs='*',
default=['mkv', 'x265'],
help='Output options (default: mkv, x265)')
parser.add_argument('-p',
'--printop',
type=str,
nargs='*',
default=['list'],
help='Print options (default: list)')
parser.add_argument('-f',
'--files',
type=str,
nargs='*',
default=[],
help='Files to process')
parser.add_argument('-d',
'--dirs',
type=str,
nargs='*',
default=[],
help='Directories to process')
# Activate argcomplete
argcomplete.autocomplete(parser)
args = parser.parse_args()
# Confirm with the user about deletion if delete option is selected
if args.delete:
print(f"{cyellow}WARNING: Delete option selected!{creset}")
if not user_confirm(
f"Are you sure you wish to delete all found results after selected operations are successful? [Y/N] ?",
color="yellow"):
print(f"{cgreen}Exiting!{creset}")
exit()
return args
def detect_ffmpeg():
@ -77,6 +118,21 @@ def detect_ffmpeg():
return False
def check_ffmpeg():
'''
Checks if ffmpeg is installed and returns its version.
Returns:
str: ffmpeg version or None if not detected
'''
ffmpeg_version = detect_ffmpeg()
if not ffmpeg_version:
print(f"{cred}No ffmpeg version detected{creset}")
exit()
print(f"{cblue}ffmpeg version detected: {ffmpeg_version}{creset}")
return ffmpeg_version
def user_confirm(question, color=False):
'''Returns the user's answer to a yes or no question

View File

@ -145,6 +145,21 @@ class Video():
return text
def print_details(self, formatted=False):
'''Prints the video details, checking for errors and formatting.
Args:
formatted (bool): Whether to print in a formatted or unformatted style.
'''
if self.error:
# Print error details in red if the video has an error
output = f"{cred}{self.fprint() if formatted else self}{creset}"
else:
# Print regular video details
output = self.fprint() if formatted else str(self)
print(output)
def convert(self,
vcodec="x265",
acodec=False,

View File

@ -1,26 +1,24 @@
#!/usr/bin/env python3
'''
mediacurator is a Python command line tool to manage a media database.
* List all the video's and their codecs with or without filters
* Batch recode videos to more modern codecs (x265 / AV1) based on filters: extentions, codecs ...
ex:
mediacurator list -in:any -filters:old -dirs:/mnt/media/ >> ../medlist.txt
mediacurator convert -del -in:any -filters:mpeg4 -out:x265,mkv -dirs:"/mnt/media/Movies/"
mediacurator convert -del -in:avi,mpg -dirs:/mnt/media/
* List all the videos 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: extensions, codecs, resolutions...
Examples:
mediacurator list --filters old --printop formatted --dirs "/mnt/media/" "/mnt/media2/"
mediacurator convert --delete --filters mpeg4 --outputs av1 mp4 --dirs "/mnt/media/" "/mnt/media2/"
mediacurator convert --delete --inputs avi mpg --printop formatted verbose --dirs "/mnt/media/" "/mnt/media2/"
'''
import sys
# Normal import
try:
from mediacurator.library.video import Video
from mediacurator.library.medialibrary import MediaLibrary
from mediacurator.library.tools import detect_ffmpeg, user_confirm, load_arguments
from mediacurator.library.tools import check_ffmpeg, load_arguments
# Allow local import for development purposes
except ModuleNotFoundError:
from library.video import Video
from library.medialibrary import MediaLibrary
from library.tools import detect_ffmpeg, user_confirm, load_arguments
from library.tools import check_ffmpeg, load_arguments
# Import colorama for colored output
import colorama
@ -28,174 +26,52 @@ import colorama
colorama.init()
# Define color codes for colored output
ccyan = colorama.Fore.CYAN
cblue = colorama.Fore.BLUE
cgreen = colorama.Fore.GREEN
cred = colorama.Fore.RED
creset = colorama.Fore.RESET
def main():
'''
mediacurator's main function
Main function for mediacurator CLI tool.
Returns:
Handles command execution based on user input.
'''
print(f"{colorama.Style.BRIGHT}")
# confirm that the command has enough parameters
if len(sys.argv) < 2:
print(
f"{cred}ERROR: Command not understood, please see documentation.{creset}"
)
# Check if ffmpeg is installed
check_ffmpeg()
# confirm that ffmpeg in indeed installed
ffmpeg_version = detect_ffmpeg()
if not ffmpeg_version:
print(f"{cred}No ffmpeg version detected{creset}")
exit()
print(f"{cblue}ffmpeg version detected: {ffmpeg_version}{creset}")
# Get/load command parameters
# Load command-line arguments
arguments = load_arguments()
formatted = "formatted" in arguments.printop or "verbose" in arguments.printop
# Loading the media library
if len(arguments["files"]) > 0:
medialibrary = MediaLibrary(files=arguments["files"],
inputs=arguments["inputs"],
filters=arguments["filters"])
elif len(arguments["directories"]) > 0:
medialibrary = MediaLibrary(directories=arguments["directories"],
inputs=arguments["inputs"],
filters=arguments["filters"])
else:
print(f"{cred}ERROR: No files or directories selected.{creset}")
try:
# Initialize MediaLibrary with user-provided arguments
medialibrary = MediaLibrary(files=arguments.files,
directories=arguments.dirs,
inputs=arguments.inputs,
filters=arguments.filters,
verbose='verbose' in arguments.printop)
print(medialibrary) # Optionally display the state of the MediaLibrary
except ValueError as e:
# Handle initialization errors
print(f"{cred}ERROR: {str(e)}{creset}")
return
# Actions
if sys.argv[1] == "list":
# Pulling list of marked videos / original keys for the medialibrary.videos dictionary
keylist = [
filepath for filepath in medialibrary.videos
if medialibrary.videos[filepath].operate
]
keylist.sort()
# Execute command based on the user's input
if arguments.command == "list":
medialibrary.list_videos(formatted, delete=arguments.delete)
for filepath in keylist:
if medialibrary.videos[filepath].operate:
if "formated" in arguments[
"printop"] or "verbose" in arguments["printop"]:
if medialibrary.videos[filepath].error:
print(
f"{cred}{medialibrary.videos[filepath].fprint()}{creset}"
)
else:
print(medialibrary.videos[filepath].fprint())
else:
if medialibrary.videos[filepath].error:
print(f"{cred}{medialibrary.videos[filepath]}{creset}")
else:
print(medialibrary.videos[filepath])
elif arguments.command == "test":
medialibrary.test_videos(formatted, delete=arguments.delete)
# if marked for deletion delete and unwatch the video
if "-del" in sys.argv:
medialibrary.unwatch(filepath, delete=True)
elif sys.argv[1] == "test":
# Pulling list of marked videos / original keys for the medialibrary.videos dictionary
keylist = [
filepath for filepath in medialibrary.videos
if medialibrary.videos[filepath].operate
]
keylist.sort()
for filepath in keylist:
if medialibrary.videos[filepath].operate:
if "formated" in arguments[
"printop"] or "verbose" in arguments["printop"]:
if medialibrary.videos[filepath].error:
print(
f"{cred}{medialibrary.videos[filepath].fprint()}{creset}"
)
else:
print(medialibrary.videos[filepath].fprint())
else:
if medialibrary.videos[filepath].error:
print(f"{cred}{medialibrary.videos[filepath]}{creset}")
else:
print(medialibrary.videos[filepath])
# if marked for deletion delete and unwatch the video
if "-del" in sys.argv:
medialibrary.unwatch(filepath, delete=True)
elif sys.argv[1] == "convert":
counter = 0
# Pulling list of marked videos / original keys for the medialibrary.videos dictionary
keylist = [
filepath for filepath in medialibrary.videos
if medialibrary.videos[filepath].operate
]
keylist.sort()
for filepath in keylist:
counter += 1
# Setting required variables
if "av1" in arguments["outputs"]:
vcodec = "av1"
else:
vcodec = "x265"
# Verbosing
print(
f"{cgreen}\n****** Starting conversion {counter} of {len(keylist)}: '{ccyan}{medialibrary.videos[filepath].filename_origin}{cgreen}' from {ccyan}{medialibrary.videos[filepath].codec}{cgreen} to {ccyan}{vcodec}{cgreen}...{creset}"
)
print(f"{ccyan}Original file:{creset}")
if "formated" in arguments["printop"] or "verbose" in arguments[
"printop"]:
print(medialibrary.videos[filepath].fprint())
else:
print(medialibrary.videos[filepath])
print(f"{cgreen}Converting please wait...{creset}", end="\r")
# Converting
if medialibrary.videos[filepath].convert(
verbose="verbose" in arguments["printop"]):
# Mark the job as done
medialibrary.videos[filepath].operate = False
# Scan the new video
newfpath = medialibrary.videos[
filepath].path + medialibrary.videos[filepath].filename_new
medialibrary.videos[newfpath] = Video(newfpath,
verbose="verbose"
in arguments["printop"])
# Verbose
print(
f"{cgreen}Successfully converted '{medialibrary.videos[filepath].filename_origin}'{ccyan}({medialibrary.videos[filepath].filesize}mb){cgreen} to '{medialibrary.videos[newfpath].filename_origin}'{ccyan}({medialibrary.videos[newfpath].filesize}mb){cgreen}, {ccyan}new file:{creset}"
)
if "formated" in arguments[
"printop"] or "verbose" in arguments["printop"]:
if medialibrary.videos[newfpath].error:
print(
f"{cred}{medialibrary.videos[newfpath].fprint()}{creset}"
)
else:
print(medialibrary.videos[newfpath].fprint())
else:
if medialibrary.videos[newfpath].error:
print(f"{cred}{medialibrary.videos[newfpath]}{creset}")
else:
print(medialibrary.videos[newfpath])
# if marked for deletion delete and unwatch the video
if "-del" in sys.argv:
medialibrary.unwatch(filepath, delete=True)
elif arguments.command == "convert":
vcodec = "av1" if "av1" in arguments.outputs else "x265"
medialibrary.convert_videos(vcodec,
formatted=formatted,
verbose="verbose" in arguments.printop,
delete=arguments.delete)
if __name__ == '__main__':

View File

@ -1,2 +1,3 @@
pathlib
colorama
argcomplete

View File

@ -7,7 +7,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
setuptools.setup(
name="mediacurator",
version="0.0.13",
version="1.0.1",
author="Fabrice Quenneville",
author_email="fab@fabq.ca",
url="https://github.com/fabquenneville/mediacurator",
@ -25,8 +25,15 @@ setuptools.setup(
classifiers=[
"Topic :: Multimedia :: Video :: Conversion",
"Development Status :: 5 - Production/Stable",
"Intended Audience :: End Users/Desktop",
"Natural Language :: English",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
"Operating System :: OS Independent",
"Environment :: Console",
@ -36,12 +43,12 @@ setuptools.setup(
},
keywords=[
"codecs", "filters", "video", "x265", "av1", "media-database",
"python-command", "hevc"
"python-command", "hevc", "multimedia", "video-processing"
],
install_requires=["pathlib", "colorama"],
install_requires=["pathlib", "colorama", "argcomplete"],
license='GPL-3.0',
license_files=('LICENSE', ),
python_requires='>=3.6',
test_suite='nose.collector',
tests_require=['nose'],
platforms='any',
zip_safe=True,
)