GithubHelp home page GithubHelp logo

animafps / teres Goto Github PK

View Code? Open in Web Editor NEW
46.0 3.0 1.0 36.6 MB

๐ŸŽž๏ธ Utility for realistic motion blur through frame intepolation and blending

Home Page: https://animafps.github.io/teres

License: GNU General Public License v3.0

Rust 81.11% Python 14.79% HTML 0.90% Ruby 3.20%
rust video video-processing ffmpeg frame-blending frame-interpolation interpolation motion-blur vapoursynth

teres's Introduction

Teres

Discord GitHub Workflow Status

Teres is a program made to easily and efficiently add motion blur or frames to videos through frame blending and interpolation.

NOTE: This program is unstable and is sub v1.0.0 so has lots of bugs and api/config changes will occur with its development


Before After Teres
without with teres

60fps => 960fps(rife) => 60fps (blur amount 1)

Packaging status

Features

  • Interpolate video to higher framerate
  • Blur frames together for motion blur
  • Both CLI and a minimal GUI usage
  • Supports multiple videos simultatiously
  • Progress bar
  • Global configuration file
  • Multiple file queue

Installing

Use the packages in the repos above

For manual installation, see CONTRIBUTING.md

๐ŸŽˆ Usage

Support and development Discord

Teres can be run from the command line or seperately

Non CLI

You can run the program and follow the instructions or use the "open with" function in explorer

CLI

USAGE:
    teres [OPTIONS] [INPUT]...

ARGS:
    [INPUT]...    Input file name(s) (space separated) or glob pattern

OPTIONS:
    -n, --noui       Disable user interface (CLI only)
    -v, --verbose... More output per occurence
    -q, --quiet...   Less output per occurence
    -h, --help       Print help information
    -V, --version    Print version information

For configuration options see the docs

โœจ Contributors

Thanks goes to these wonderful people (emoji key):


Anima

๐Ÿ’ป

renovate[bot]

๐Ÿšง

allcontributors[bot]

๐Ÿ“–

This project follows the all-contributors specification. Contributions of any kind welcome!

See CONTRIBUTING.md, CODE_OF_CONDUCT.md and active issues if you want to contribute

๐ŸŽ‰ Acknowledgements

  • foe's blur - Was the basis for the entire code base
  • Smoothie - Couleur and the ctt team helped create more inovation and colaboration with similar goals
  • vs-frameblender - Plugin used for blending the resulting frames of interpolation
  • ffmpeg - The program used for encoding the interpreted frames
  • vapoursynth - Program for manipulating and interpolating videos
  • ffms2 - Plugin for inputting the video file
  • havsfunc - Plugin that provides the svp interpolation function
  • mvsfunc - Plugin that provides colour manipulation
  • vs-rife - Vapoursynth implementation of the interpolation algorithm RIFE
  • VapourSynth-RIFE-ncnn-Vulkan - Vulkan implementation of RIFE

License

This repository is licensed under GPL-3.0-or-later see COPYING for more details

teres's People

Contributors

allcontributors[bot] avatar animafps avatar renovate-bot avatar renovate[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

spritzerland

teres's Issues

File with the same name at file output already exists

When there exists a file with the same name as the proposed output file at the same location, ffmpeg errors and halts

So there are a couple ways to handle this

  1. delete file
  2. prompt user
  3. append an increment to the suffix of the file name
  4. append a pseudo random suffix to the end of the file name

Preset configs

Describe the solution you'd like
Create a set of configuration presets that can be plugged by flag or config key that have recommended configuration for certain workloads or input/output file specs/fps and amount of blur

More cli flags

  • -o, --output to specify output file
  • fix quiet to suppress everything not necessary
  • flag to set output dir
  • -c, --config specify different config
  • -o - for outputting ffmpeg stdout to parent stdout
  • A flag/option for every setting in config to override temp

use vapoursynth api directly in rust to execute plugin calls

There exists a vapoursynth api wrapper for rust: https://github.com/YaLTeR/vapoursynth-rs so to optimize and create total memory safety we can call all the plugin calls within rust then push the resulting buffer to ffmpeg.

This will allow for easier config management and code base because we wouldnt need to create a temp script and can allow for our own plugin integration within the codebase

This is very long term improvement and currently better to implement a vspipe replacement in rust and call it

Vs-rife checks

Need to add a a check if using rife in interp to see if it istalled and if models are downloaded if not former the exit and latter download models by running the Python module

python -m vsrife

File name templating

Should create a semi templating solution like OBS for file names for people to customise the resulting file name

i.e. %name - blur - %interp-fps %outfps %interp-prog would be for example demo - blur - 960 60 RIFE.mp4

personally dont like spaces in file names and so does *nix so maybe require escapes and remove white space

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

This repository currently has no open or pending branches.

Detected dependencies

bundler
Gemfile
  • jekyll "~> 4.3.1"
  • just-the-docs undefined
  • tzinfo ">= 1", "< 3"
  • wdm "~> 0.1.1"
  • http_parser.rb "~> 0.8.0"
cargo
Cargo.toml
  • clap 4.0
  • dirs 4.0.0
  • rand 0.8.5
  • serde 1.0
  • serde_yaml 0.9
  • human-panic 1.0.3
  • rfd 0.10.0
  • indicatif 0.17.2
  • regex 1.7.0
  • ctrlc 3.2.4
  • winconsole 0.11
  • exitcode 1.1.2
  • clap-verbosity-flag 2.0.0
  • log 0.4
  • env_logger 0.10.0
  • wild 2
  • clap_mangen 0.2
  • clap 4.0
  • clap-verbosity-flag 2.0.0
  • winres 0.1
github-actions
.github/workflows/ci.yml
  • actions/checkout v3@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
  • actions-rs/toolchain v1@16499b5e05bf2e26879000db0c1d13f7e13fa3af
  • actions/cache v3@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7
  • actions-rs/cargo v1@844f36862e911db73fe0815f00a4a2602c279505
  • actions/upload-artifact v3@83fd05a356d7e2593de66fc9913b3002723633cb
  • actions/checkout v3@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
  • actions-rs/toolchain v1@16499b5e05bf2e26879000db0c1d13f7e13fa3af
  • actions/cache v3@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7
  • actions-rs/cargo v1@844f36862e911db73fe0815f00a4a2602c279505
  • actions/upload-artifact v3@83fd05a356d7e2593de66fc9913b3002723633cb
  • actions/checkout v3@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
  • actions-rs/toolchain v1@16499b5e05bf2e26879000db0c1d13f7e13fa3af
  • actions/cache v3@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7
  • actions-rs/cargo v1@844f36862e911db73fe0815f00a4a2602c279505
  • actions/checkout v3@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
  • actions-rs/toolchain v1@16499b5e05bf2e26879000db0c1d13f7e13fa3af
  • actions/cache v3@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7
  • actions-rs/cargo v1@844f36862e911db73fe0815f00a4a2602c279505
  • actions-rs/cargo v1@844f36862e911db73fe0815f00a4a2602c279505
.github/workflows/docs.yml
  • actions/checkout v3@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
  • ruby/setup-ruby v1
  • actions/configure-pages v2@c5a3e1159e0cbdf0845eb8811bd39e39fc3099c2
  • actions/upload-pages-artifact v1@c8641e80048cf33d329c39df3bcc53196178335a
  • actions/deploy-pages v1@20a4baa1095bad40ba7d6ca0d9abbc220b76603f

  • Check this box to trigger a request for Renovate to run again on this repository

GPU is not fully utilised

There is somewhere in the pipeline that is cpu bottlenecking for most systems

couleur says it might be the blending and can opencl or cuda that part of the process https://github.com/animafps/vs-frameblender-opencl is my attempt but i am not fluent with gpu processing

or can bypass the plugin system and work with the raw video node in rust and opencl that

Action Required: Fix Renovate Configuration

There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.

Location: renovate.json
Error type: Invalid JSON (parsing failed)
Message: Syntax error: expecting String near nday"], }

Teres workflows

Allow rule based workflows where multiple passes of interpolation and encoding at different stages

I.e. 60 -> 480 with RIFE then 480 -> 960 with SVP then blended down to 60 again

Like microscripting logic into a config

Unit testing

Use rusts'/cargo tests to test all components so can develop more reliably

Currently there is a single test that is testing if it can do the initial launch of the program and up to file selection but dependencies are in the way need to fix #39

Better error printing/handling

For most of the issues that come from teres there is not much information we can get from the generic ffmpeg error from sterr so need to integrate the verbosity with the verbosity of ffmpeg or capture and handle errors better

  • Out with generic errors
  • Use verbosity flag

Branding

create a uniform set of branding for teres i.e. logo, cli styling, etc...

Compiling fails with error 'expected identifier found keyword 'as'

Describe the bug
A clear and concise description of what the bug is.

**

Compiling teres v0.3.4 (/home/sam/.cache/yay/teres-git/src/teres-git)
error: expected identifier, found keyword as
--> src/config.rs:42:21
|
40 | pub struct Timescale {
| --------- while parsing this struct
41 | pub input: f32,
42 | pub output: f32,as saying cuz of dependencies being really annoying
| ^^ expected identifier, found keyword

error: expected identifier
--> src/config.rs:42:21
|
42 | pub output: f32,as saying cuz of dependencies being really annoying
| ^^

error[E0277]: the trait bound Timescale: Serialize is not satisfied
--> src/config.rs:6:17
|
6 | #[derive(Debug, Serialize, Deserialize, Clone)]
| ^^^^^^^^^ the trait Serialize is not implemented for Timescale
...
11 | pub timescale: Timescale,
| --- required by a bound introduced by this call
|
= help: the following other types implement trait Serialize:
bool
char
isize
i8
i16
i32
i64
i128
and 139 others
note: required by a bound in config::_::_serde::ser::SerializeStruct::serialize_field
--> /home/sam/.cargo/registry/src/index.crates.io-6f17d22bba15001f/serde-1.0.149/src/ser/mod.rs:1899:12
|
1893 | fn serialize_field<T: ?Sized>(
| --------------- required by a bound in this associated function
...
1899 | T: Serialize;
| ^^^^^^^^^ required by this bound in SerializeStruct::serialize_field

error[E0277]: the trait bound Timescale: Deserialize<'_> is not satisfied
--> src/config.rs:11:20
|
11 | pub timescale: Timescale,
| ^^^^^^^^^ the trait Deserialize<'_> is not implemented for Timescale
|
= help: the following other types implement trait Deserialize<'de>:
bool
char
isize
i8
i16
i32
i64
i128
and 147 others
note: required by a bound in next_element
--> /home/sam/.cargo/registry/src/index.crates.io-6f17d22bba15001f/serde-1.0.149/src/de/mod.rs:1730:12
|
1728 | fn next_element(&mut self) -> Result<Option, Self::Error>
| ------------ required by a bound in this associated function
1729 | where
1730 | T: Deserialize<'de>,
| ^^^^^^^^^^^^^^^^ required by this bound in SeqAccess::next_element

error[E0277]: the trait bound Timescale: Deserialize<'_> is not satisfied
--> src/config.rs:11:20
|
11 | pub timescale: Timescale,
| ^^^^^^^^^ the trait Deserialize<'_> is not implemented for Timescale
|
= help: the following other types implement trait Deserialize<'de>:
bool
char
isize
i8
i16
i32
i64
i128
and 147 others
note: required by a bound in next_value
--> /home/sam/.cargo/registry/src/index.crates.io-6f17d22bba15001f/serde-1.0.149/src/de/mod.rs:1869:12
|
1867 | fn next_value(&mut self) -> Result<V, Self::Error>
| ---------- required by a bound in this associated function
1868 | where
1869 | V: Deserialize<'de>,
| ^^^^^^^^^^^^^^^^ required by this bound in MapAccess::next_value

error[E0277]: the trait bound Timescale: Deserialize<'_> is not satisfied
--> src/config.rs:11:5
|
11 | pub timescale: Timescale,
| ^^^ the trait Deserialize<'_> is not implemented for Timescale
|
= help: the following other types implement trait Deserialize<'de>:
bool
char
isize
i8
i16
i32
i64
i128
and 147 others
note: required by a bound in config::_::_serde::__private::de::missing_field
--> /home/sam/.cargo/registry/src/index.crates.io-6f17d22bba15001f/serde-1.0.149/src/private/de.rs:22:8
|
20 | pub fn missing_field<'de, V, E>(field: &'static str) -> Result<V, E>
| ------------- required by a bound in this function
21 | where
22 | V: Deserialize<'de>,
| ^^^^^^^^^^^^^^^^ required by this bound in missing_field

error[E0609]: no field adjust_audio_pitch on type Timescale
--> src/rendering.rs:205:35
|
205 | if settings.timescale.adjust_audio_pitch {
| ^^^^^^^^^^^^^^^^^^ unknown field
|
= note: available fields are: input, output

Some errors have detailed explanations: E0277, E0609.
For more information about an error, try rustc --explain E0277.
error: could not compile teres (bin "teres") due to 7 previous errors
==> ERROR: A failure occurred in build().
Aborting...
-> error making: teres-git-exit status 4
-> Failed to install the following packages. Manual intervention is required:
teres-git - exit status 4

**
To Reproduce
Steps to reproduce the behavior:
Compile teres-git from the AUR using arch linux and rustup default stable or nightly

Expected behavior
A clear and concise description of what you expected to happen.
Successful compilation

Desktop (please complete the following information):
Arch Linux CachyOS x86_64
rustup 1.26.0-3

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.