Coder Social home page Coder Social logo

hunterap23 / vcat Goto Github PK

View Code? Open in Web Editor NEW
4.0 3.0 1.0 2.17 MB

All-In-One suite of tools to run different video encoding variations, calculate their VMAF & related metrics, and create human-readable graphs and spreadsheets

Python 100.00%
vmaf python python3 ffmpeg

vcat's Introduction

Hi there ๐Ÿ‘‹

vcat's People

Contributors

dependabot[bot] avatar hunterap23 avatar master-of-zen avatar mergify[bot] avatar pre-commit-ci[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

flaeri

vcat's Issues

[FEATURE ADD] Add weighting to metrics

Describe the feature that is being tested/implemented
Add weighting to the different metrics.

  • Metrics include (from highest to lowest weight importance)
    • VMAF score
    • MS-SSIM
    • SSIM
    • Encode time
    • Output file size (only when not targeting specific file sizes / bit rates)
    • PSNR
  • Allow weights for each metric to be user-configurable or turned off completely

List any relations to other issues in this repository or in other repositories
Provide a list of issues.

[FEATURE ADD] Update provided samples

Describe the feature that is being tested/implemented
Provide updated samples of reference videos, encoded videos, VMAF score reports, plotted graph images, and plotted graph videos.
Samples should be displayed in the README

List any relations to other issues in this repository or in other repositories
Most likely requires completion of entire project before this can be provided.

[FEATURE ADD] Add logging support

Describe the feature that is being tested/implemented
Add support to log information to a log file for debugging purposes

List any relations to other issues in this repository or in other repositories
N/A

[FEATURE ADD] Create priority queue for video encoding

Describe the feature that is being tested/implemented
Create a priority queue of what files to encode first.

  • Prioritize completing all encodes for a single reference file before moving on to the other reference files.
  • Prioritize hardware encoders first, as they are typically faster than software encoders, which would create the bigger chunk of files first.
  • Prioritize completing all VMAF score calculations for a single reference file before moving on to the other reference files.
  • Prioritize completing all VMAF plotting for a single reference file before moving on to the other reference files.

List any relations to other issues in this repository or in other repositories
N/A

[FEATURE ADD] Add progress save state file

Describe the feature that is being tested/implemented
Add file to record the state of the program in case the program was closed before all tasks were completed.

  • Add save state functionality to encoder module
    • Save state file should record what video encodes were not started, completed, or cancelled/stopped.
    • For cancelled/stopped encodes, make sure the output file does not exist, and if so delete it before reattempting the encode.
  • Add save state functionality to VMAF calculations
    • Save state file should record what VMAF calculations were not started, completed, or cancelled/stopped.
    • For cancelled/stopped calculations, make sure the output report file does not exist, and if so delete it before reattempting the calculation
  • Add save state functionality to VMAF plotter
    • Save state file should record what VMAF plotting were not started, completed, or cancelled/stopped.
    • For cancelled/stopped plots, make sure the output graph photo and video files do not exist, and if so delete it before reattempting the plotting

List any relations to other issues in this repository or in other repositories
N/A

[FEATURE ADD] Allow plotting of selected metrics on a single graph

Describe the feature that is being tested/implemented
Allow user selection of metrics to be plotted onto a single graph by using data normalization.
This includes photo and video graphs.

List any relations to other issues in this repository or in other repositories
N/A

[FEATURE ADD] Scan for available encoders present in the installed version of FFmpeg

Describe the feature that is being tested/implemented
Scan for and present a list of encoders available in the installed version of FFmpeg to the user.
The scan should include checking for valid hardware for different hardware video encoders.

Get and store the FFmpeg version and feature set. This is so we can know whether the FFmpeg build being used by the user supports the encoders they wish to use, and if it supports the libvmaf filter

  • On first launch, get ffmpeg version and and enabled features with ffmpeg -version
    • On subsequent launches (or if the config file is deleted), check if ffmpeg version changes. If the version changed, then tell the user that it must go through an FFmpeg feature rescan
  • Provide option to user to scan for all encoders and test if they work on the system with their available hardware.
    • If user agrees to the FFmpeg scan, get and parse list of available video encoders with ffmpeg -encoders
      • Then in a multithreaded/asynchronous fashion, scan for all options used in all encoders by running ffmpeg -h encoder=X for all found video encoders
      • For hardware encoders, use sample video as an input to check if the encoders work with `ffmpeg -i SAMPLE -c:v ENCODER -t 0.01 -pix_fmt nv12 -f null -"
    • Otherwise block out the encoder application tab in the GUI, and throw an error when trying to encode through CLI
  • Save all this information into the TOML config file

List any relations to other issues in this repository or in other repositories
N/A

[FEATURE ADD] Create proper with Qt-based GUI with Pyside6

Describe the feature that is being tested/implemented
Replace existing GUI generated with gooey tool with GUI generated using the Pyside6 library.

  • General GUI:
    • Text box to display console output, shared between all suite modules
    • Progress bar to display progress of current task
    • Option to load existing TOML configuration file
    • Option to load progress TOML file
  • Encoder application:
    • Display left-hand list box that lists the individual reference files
    • Have text box showing the location of the reference files.
    • Have button for the reference files text box to open a single file / multi-file / single directory chooser.
    • Have a similar text box and button combo for choosing a directory where the encoded output files will be stored.
    • Selectors for different options (need to do more research on what to do for each option):
      • Encoders
        • Individual options for each encoder
      • B-frames
      • Bit rates
      • Hardware acceleration
      • Specify a decoder on a per-reference file basis
      • Frame rate (only allow down sampling)
      • Resolution (only allow down scaling)
        • Provide options for what scaling method to use (bilinear, bicubic, lanzcos, nearest neighbor, area, etc.)
      • Constant bit rate vs Variable bit rate vs Constant Rate Factor / Constant Quantization Parameter
  • Calculator application:
    • VMAF arguments
      • Models (normal, 4k, NEG) and/or user-provided model
      • SSIM / MS-SSIM / PSNR / etc. features
      • Subsamples
      • Threads
      • Log format (xml, json, csv)
    • FFmpeg arguments
      • FFmpeg executable location (by default looks for it in env path)
      • Decode threads
      • Hardware accelerated decoding
    • General arguments
      • Number of FFmpeg processes to run at one time
        • Limited to N processes with 1 thread per process OR one process with N threads (where N = number of threads available on the system)
      • Location of reference file(s)
      • Location of encoded output file(s)
      • Location of where VAMF results should be stored
  • Plotter application:
    • Location of VMAF results
    • Location of where to store the output graphs
    • Whether or not to produce a photo or video graph, or both
    • Resolution of the given photo graph
    • Resolution of the given video graph
    • Frame rate of the output video graph
    • Whether the photo graph should be transparent or not
    • Whether the video graph should be transparent or not
    • Output format of the photo graph
    • Output format of the video graph

List any relations to other issues in this repository or in other repositories
Provide a list of issues.

[FEATURE ADD] Code comments and auto-generated documentation

Describe the feature that is being tested/implemented
Write useful code comments and generate documentation with the sphinx tool to host on readthedocs.org

List any relations to other issues in this repository or in other repositories
N/A

[FEATURE ADD] Replace pipenv tool with poetry tool for package management

Describe the feature that is being tested/implemented
Replace the usage of the pipenv tool with the poetry tool.
pipenv does not allow for setting a minimum and a maximum supported Python runtime, while poetry does allow for this. poetry also allows for packaging Python wheels for the different Python versions.

List any relations to other issues in this repository or in other repositories
N/A

[FEATURE ADD] Convert config file format to TOML

Describe the feature that is being tested/implemented
TOML format is more human-readable than any other formats (JSON, YAML, INI, etc.)

  • Convert existing config files into TOML format
  • Change parsing functionality to handle TOML files

List any relations to other issues in this repository or in other repositories
N/A

[FEATURE ADD] Add functionality to measure encode time for different encoders/settings

Describe the feature that is being tested/implemented
Add functionality to the encoder application to measure the time it takes to encode different variations of a reference video.

  • Encoder: Measure and save time it takes to encode a given variation of the reference video
  • Calculator: Use the encode time to create a metric

List any relations to other issues in this repository or in other repositories
Provide a list of issues.

[FEATURE ADD] Update file search and validation functionality

Describe the feature that is being tested/implemented
Update file searching/scanning functionality.

  • Reference files
    • By default, should be stored in directory named reference that's located in the project root folder
    • Can be changed by the user either through a command line argument or through the GUI
    • Should scan for any files with the following extensions:
      • MP4
      • MKV
      • MOV
      • AVI
      • WEBM
      • TS
      • FLV
    • Should validate the files by doing an ffmpeg encode to nul with them like ffmpeg -i INPUT -f null -. Validated fiels are given a "validated" status in the completions file.
  • Encoded files
    • By default, should be stored in directory named encoded that's located in the project root folder
    • Can be changed by the user either through a command line argument or through the GUI
    • Should contain a subdirectory for each reference file
  • VMAF report files
    • By default, should be stored in directory named data that's located in the project root folder
    • Should contain a subdirectory for each reference file that stores each output VMAF report that is named after the encoded file it came from.
  • VMAF score graph files
    • By default, should be stored in directory named graphs that's located in the project root folder
    • Can be changed by the user either through a command line argument or through the GUI
    • Should contain a subdirectory for each reference file that stores each output VMAF score graph that is named after the encoded file it came from.

List any relations to other issues in this repository or in other repositories
N/A

[FEATURE ADD] Rewrite handling of matplotlib writing to files through FFmpeg directly

Describe the feature that is being tested/implemented
The current method of writing graph files is that they are dependent on matplotlib's functionality with FFmpeg.
This causes issues when some settings that worked previously no longer do so.
This should rewrite the logic to instead output the graph from matplotlib directly into an external FFmpeg process.

  • Need to check if this is even possible

List any relations to other issues in this repository or in other repositories
N/A

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.