mirror of
https://github.com/vondas-network/videobeaux.git
synced 2025-12-12 02:40:04 +01:00
Merge pull request #1 from vondas-network/dev
Merging new features: steel_wash, pickle_juice
This commit is contained in:
@@ -23,6 +23,7 @@
|
|||||||
| nostalgic_stutter | Apply frame stutter akin to a corrupted file |
|
| nostalgic_stutter | Apply frame stutter akin to a corrupted file |
|
||||||
| overexposed_stutter | Apply a frame stutter and exposing the video like the file is corrupted |
|
| overexposed_stutter | Apply a frame stutter and exposing the video like the file is corrupted |
|
||||||
| overlay_img_pro | Overlay an image with location & dimension control |
|
| overlay_img_pro | Overlay an image with location & dimension control |
|
||||||
|
| pickle_juice | Apply filter like the video was dipped in pickle juice |
|
||||||
| resize | Resizing the dimensions of a video file |
|
| resize | Resizing the dimensions of a video file |
|
||||||
| reverse | Reverse video file |
|
| reverse | Reverse video file |
|
||||||
| scrolling_pro | Apply video scrolling effect with definable parameters |
|
| scrolling_pro | Apply video scrolling effect with definable parameters |
|
||||||
@@ -31,6 +32,7 @@
|
|||||||
| slight_smear | Slightly smearing RGB color space |
|
| slight_smear | Slightly smearing RGB color space |
|
||||||
| speed | Change the video and audio speed of a file |
|
| speed | Change the video and audio speed of a file |
|
||||||
| stack_2x | Stack 2 videos on top of each other keeping the original orientation |
|
| stack_2x | Stack 2 videos on top of each other keeping the original orientation |
|
||||||
|
| steel_wash | Apply steel blue filter to video |
|
||||||
| stutter_pro | Apply frame stutter effect with definable parameters |
|
| stutter_pro | Apply frame stutter effect with definable parameters |
|
||||||
| transraibe | AI-based transcription tool |
|
| transraibe | AI-based transcription tool |
|
||||||
|
|
||||||
|
|||||||
16
config.yaml
16
config.yaml
@@ -48,6 +48,10 @@ extract_sound:
|
|||||||
input_file: 'inputs/input.mp4'
|
input_file: 'inputs/input.mp4'
|
||||||
output_file: 'outputs/extract_sound.wav'
|
output_file: 'outputs/extract_sound.wav'
|
||||||
|
|
||||||
|
fever:
|
||||||
|
input_file: 'inputs/input.mp4'
|
||||||
|
output_file: 'outputs/fever.mp4'
|
||||||
|
|
||||||
frame_delay_pro1:
|
frame_delay_pro1:
|
||||||
input_file: 'inputs/input.mp4'
|
input_file: 'inputs/input.mp4'
|
||||||
# num_of_frames: "10"
|
# num_of_frames: "10"
|
||||||
@@ -62,6 +66,10 @@ frame_delay_pro2:
|
|||||||
planes: "7"
|
planes: "7"
|
||||||
output_file: 'outputs/frame_delay_pro2.mp4'
|
output_file: 'outputs/frame_delay_pro2.mp4'
|
||||||
|
|
||||||
|
light_snow:
|
||||||
|
input_file: 'inputs/input2.mp4'
|
||||||
|
output_file: 'outputs/light_snow.mp4'
|
||||||
|
|
||||||
looper_pro:
|
looper_pro:
|
||||||
input_file: 'inputs/input.mp4'
|
input_file: 'inputs/input.mp4'
|
||||||
loop_count: '3'
|
loop_count: '3'
|
||||||
@@ -100,6 +108,10 @@ overlay_img_pro:
|
|||||||
overlay_height: "100"
|
overlay_height: "100"
|
||||||
output_file: 'outputs/overlay_img_pro.mp4'
|
output_file: 'outputs/overlay_img_pro.mp4'
|
||||||
|
|
||||||
|
pickle_juice:
|
||||||
|
input_file: 'inputs/input.mp4'
|
||||||
|
output_file: 'outputs/pickle_juice.mp4'
|
||||||
|
|
||||||
rb_blur:
|
rb_blur:
|
||||||
input_file: 'inputs/input.mp4'
|
input_file: 'inputs/input.mp4'
|
||||||
output_file: 'outputs/rb_blur.mp4'
|
output_file: 'outputs/rb_blur.mp4'
|
||||||
@@ -143,6 +155,10 @@ stack_2x:
|
|||||||
input_file2: 'inputs/input.mp4'
|
input_file2: 'inputs/input.mp4'
|
||||||
output_file: 'outputs/stack_2x.mp4'
|
output_file: 'outputs/stack_2x.mp4'
|
||||||
|
|
||||||
|
steel_wash:
|
||||||
|
input_file: 'inputs/input.mp4'
|
||||||
|
output_file: 'outputs/steel_wash.mp4'
|
||||||
|
|
||||||
stutter_pro:
|
stutter_pro:
|
||||||
input_file: 'inputs/input.mp4'
|
input_file: 'inputs/input.mp4'
|
||||||
stutter: "233.4"
|
stutter: "233.4"
|
||||||
|
|||||||
22
programs/fever.py
Normal file
22
programs/fever.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
from utils.ffmpeg_operations import run_ffmpeg_command
|
||||||
|
|
||||||
|
def fever(input_file, output_file):
|
||||||
|
command = [
|
||||||
|
"ffmpeg",
|
||||||
|
"-i", input_file,
|
||||||
|
"-filter_complex", "[0:v]shuffleplanes=map1=0:map3=2,smartblur=luma_radius=.6:lr=2.88:luma_strength=0.11:lt=-17:cr=0.93,amplify=radius=1.4:factor=4[out_v]",
|
||||||
|
"-map", "[out_v]",
|
||||||
|
"-map", "0:a",
|
||||||
|
"-c:v", "libx264",
|
||||||
|
"-profile:v", "high",
|
||||||
|
"-level:v", "4.2",
|
||||||
|
"-pix_fmt", "yuv420p",
|
||||||
|
"-movflags", "+faststart",
|
||||||
|
"-c:a", "aac",
|
||||||
|
"-b:a", "128",
|
||||||
|
output_file
|
||||||
|
]
|
||||||
|
run_ffmpeg_command(command)
|
||||||
|
print(f"Video processed with fever and file is {output_file}")
|
||||||
|
|
||||||
|
# ffmpeg -i shoe.mp4 -filter_complex "[0:v]shuffleplanes=map1=0:map3=2,smartblur=luma_radius=1.6:lr=2.88:luma_strength=0.11:lt=-17:cr=0.93,amplify=radius=33:factor=4:threshold=10721.12:tolerance=12[out_v]" -map "[out_v]" -map 0:a out.mp4
|
||||||
20
programs/light_snow.py
Normal file
20
programs/light_snow.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
from utils.ffmpeg_operations import run_ffmpeg_command
|
||||||
|
|
||||||
|
def light_snow(input_file, output_file):
|
||||||
|
command = [
|
||||||
|
"ffmpeg",
|
||||||
|
"-i", input_file,
|
||||||
|
"-filter_complex", "[0:v]minterpolate,chromashift=cbh=-5.7:cbv=22:crh=1.44:crv=10.8,deband=1thr=0.45003:2thr=0.48003:3thr=0.21003:4thr=0.30003:range=-1.3:r=16:d=1.69681[out_v]",
|
||||||
|
"-map", "[out_v]",
|
||||||
|
"-map", "0:a",
|
||||||
|
"-c:v", "libx264",
|
||||||
|
"-profile:v", "high",
|
||||||
|
"-level:v", "4.2",
|
||||||
|
"-pix_fmt", "yuv420p",
|
||||||
|
"-movflags", "+faststart",
|
||||||
|
"-c:a", "aac",
|
||||||
|
"-b:a", "128",
|
||||||
|
output_file
|
||||||
|
]
|
||||||
|
run_ffmpeg_command(command)
|
||||||
|
print(f"Video processed with light_snow and file is {output_file}")
|
||||||
20
programs/pickle_juice.py
Normal file
20
programs/pickle_juice.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
from utils.ffmpeg_operations import run_ffmpeg_command
|
||||||
|
|
||||||
|
def pickle_juice(input_file, output_file):
|
||||||
|
command = [
|
||||||
|
"ffmpeg",
|
||||||
|
"-i", input_file,
|
||||||
|
"-filter_complex", "[0:v]shear,vibrance=intensity=0.36:rbal=2.94:gbal=3.34:bbal=-3.83:rlum=0.41:glum=0.15:blum=0.28[out_v]",
|
||||||
|
"-map", "[out_v]",
|
||||||
|
"-map", "0:a",
|
||||||
|
"-c:v", "libx264",
|
||||||
|
"-profile:v", "high",
|
||||||
|
"-level:v", "4.2",
|
||||||
|
"-pix_fmt", "yuv420p",
|
||||||
|
"-movflags", "+faststart",
|
||||||
|
"-c:a", "aac",
|
||||||
|
"-b:a", "128",
|
||||||
|
output_file
|
||||||
|
]
|
||||||
|
run_ffmpeg_command(command)
|
||||||
|
print(f"Video processed with pickle_juice and file is {output_file}")
|
||||||
22
programs/steel_wash.py
Normal file
22
programs/steel_wash.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
from utils.ffmpeg_operations import run_ffmpeg_command
|
||||||
|
|
||||||
|
def steel_wash(input_file, output_file):
|
||||||
|
command = [
|
||||||
|
"ffmpeg",
|
||||||
|
"-i", input_file,
|
||||||
|
"-filter_complex", "[0:v]shear,vibrance=intensity=0.36:rbal=2.44:gbal=1.13:bbal=-1.28:rlum=0.69:glum=0.35:blum=0.39[out_v]",
|
||||||
|
"-map", "[out_v]",
|
||||||
|
"-map", "0:a",
|
||||||
|
"-c:v", "libx264",
|
||||||
|
"-profile:v", "high",
|
||||||
|
"-level:v", "4.2",
|
||||||
|
"-pix_fmt", "yuv420p",
|
||||||
|
"-movflags", "+faststart",
|
||||||
|
"-c:a", "aac",
|
||||||
|
"-b:a", "128",
|
||||||
|
output_file
|
||||||
|
]
|
||||||
|
run_ffmpeg_command(command)
|
||||||
|
print(f"Video processed with steel_wash and file is {output_file}")
|
||||||
|
|
||||||
|
# hello
|
||||||
@@ -5,7 +5,6 @@ from typing_extensions import Annotated
|
|||||||
import os
|
import os
|
||||||
import calendar
|
import calendar
|
||||||
|
|
||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from programs import (
|
from programs import (
|
||||||
@@ -18,8 +17,10 @@ from programs import (
|
|||||||
download_yt,
|
download_yt,
|
||||||
extract_frames,
|
extract_frames,
|
||||||
extract_sound,
|
extract_sound,
|
||||||
|
fever,
|
||||||
frame_delay_pro1,
|
frame_delay_pro1,
|
||||||
frame_delay_pro2,
|
frame_delay_pro2,
|
||||||
|
light_snow,
|
||||||
looper_pro,
|
looper_pro,
|
||||||
lsd_feedback,
|
lsd_feedback,
|
||||||
mirror_delay,
|
mirror_delay,
|
||||||
@@ -27,6 +28,7 @@ from programs import (
|
|||||||
num_edits,
|
num_edits,
|
||||||
overexposed_stutter,
|
overexposed_stutter,
|
||||||
overlay_img_pro,
|
overlay_img_pro,
|
||||||
|
pickle_juice,
|
||||||
rb_blur,
|
rb_blur,
|
||||||
resize,
|
resize,
|
||||||
reverse,
|
reverse,
|
||||||
@@ -35,6 +37,7 @@ from programs import (
|
|||||||
slight_smear,
|
slight_smear,
|
||||||
speed,
|
speed,
|
||||||
stack_2x,
|
stack_2x,
|
||||||
|
steel_wash,
|
||||||
stutter_pro,
|
stutter_pro,
|
||||||
transcraibe)
|
transcraibe)
|
||||||
|
|
||||||
@@ -143,6 +146,22 @@ def convert_vb(
|
|||||||
params = {key: params.get(key) or defaults[key] for key in defaults}
|
params = {key: params.get(key) or defaults[key] for key in defaults}
|
||||||
convert.convert(**params)
|
convert.convert(**params)
|
||||||
|
|
||||||
|
###########
|
||||||
|
# fever
|
||||||
|
###########
|
||||||
|
@app.command('fever', help='Apply fever effect to video.')
|
||||||
|
def fever_vb(
|
||||||
|
input_file: str = typer.Argument(None, help="Input video file"),
|
||||||
|
output_file: str = typer.Argument(None, help="Output video file")
|
||||||
|
):
|
||||||
|
params = {
|
||||||
|
"input_file": input_file,
|
||||||
|
"output_file": output_file
|
||||||
|
}
|
||||||
|
defaults = config['fever']
|
||||||
|
params = {key: params.get(key) or defaults[key] for key in defaults}
|
||||||
|
fever.fever(**params)
|
||||||
|
|
||||||
###########
|
###########
|
||||||
# double_cup
|
# double_cup
|
||||||
###########
|
###########
|
||||||
@@ -252,21 +271,21 @@ def frame_delay_pro2_vb(
|
|||||||
params = {key: params.get(key) or defaults[key] for key in defaults}
|
params = {key: params.get(key) or defaults[key] for key in defaults}
|
||||||
frame_delay_pro2.frame_delay_pro2(**params)
|
frame_delay_pro2.frame_delay_pro2(**params)
|
||||||
|
|
||||||
################
|
###########
|
||||||
# lsd-feedback
|
# light_snow
|
||||||
################
|
###########
|
||||||
@app.command('lsd-feedback', help='Apply LSD feedback effect to video file.')
|
@app.command('light_snow', help='Slightly smearing RGB color space.')
|
||||||
def lsd_feedback_vb(
|
def light_snow_vb(
|
||||||
input_file: str = typer.Argument(None, help="Input video file "),
|
input_file: str = typer.Argument(None, help="Input video file"),
|
||||||
output_file: str = typer.Argument(None, help="Output video file")
|
output_file: str = typer.Argument(None, help="Output video file")
|
||||||
):
|
):
|
||||||
params = {
|
params = {
|
||||||
"input_file": input_file,
|
"input_file": input_file,
|
||||||
"output_file": output_file
|
"output_file": output_file
|
||||||
}
|
}
|
||||||
defaults = config['lsd_feedback']
|
defaults = config['light_snow']
|
||||||
params = {key: params.get(key) or defaults[key] for key in defaults}
|
params = {key: params.get(key) or defaults[key] for key in defaults}
|
||||||
lsd_feedback.lsd_feedback(**params)
|
light_snow.light_snow(**params)
|
||||||
|
|
||||||
#################
|
#################
|
||||||
# looper-pro
|
# looper-pro
|
||||||
@@ -290,6 +309,22 @@ def scrolling_pro_video(
|
|||||||
params = {key: params.get(key) or defaults[key] for key in defaults}
|
params = {key: params.get(key) or defaults[key] for key in defaults}
|
||||||
looper_pro.looper_pro(**params)
|
looper_pro.looper_pro(**params)
|
||||||
|
|
||||||
|
################
|
||||||
|
# lsd-feedback
|
||||||
|
################
|
||||||
|
@app.command('lsd-feedback', help='Apply LSD feedback effect to video file.')
|
||||||
|
def lsd_feedback_vb(
|
||||||
|
input_file: str = typer.Argument(None, help="Input video file "),
|
||||||
|
output_file: str = typer.Argument(None, help="Output video file")
|
||||||
|
):
|
||||||
|
params = {
|
||||||
|
"input_file": input_file,
|
||||||
|
"output_file": output_file
|
||||||
|
}
|
||||||
|
defaults = config['lsd_feedback']
|
||||||
|
params = {key: params.get(key) or defaults[key] for key in defaults}
|
||||||
|
lsd_feedback.lsd_feedback(**params)
|
||||||
|
|
||||||
################
|
################
|
||||||
# mirror-delay
|
# mirror-delay
|
||||||
################
|
################
|
||||||
@@ -358,8 +393,9 @@ def overexposed_stutter_vb(
|
|||||||
params = {key: params.get(key) or defaults[key] for key in defaults}
|
params = {key: params.get(key) or defaults[key] for key in defaults}
|
||||||
overexposed_stutter.overexposed_stutter(**params)
|
overexposed_stutter.overexposed_stutter(**params)
|
||||||
|
|
||||||
|
######################
|
||||||
# overlay_img_pro
|
# overlay_img_pro
|
||||||
####################
|
######################
|
||||||
@app.command('overlay-img-pro', help='Overlay an image with location & dimension control.')
|
@app.command('overlay-img-pro', help='Overlay an image with location & dimension control.')
|
||||||
def overlay_img_pro_vb(
|
def overlay_img_pro_vb(
|
||||||
input_file: str = typer.Argument(None, help="Input video file "),
|
input_file: str = typer.Argument(None, help="Input video file "),
|
||||||
@@ -383,6 +419,24 @@ def overlay_img_pro_vb(
|
|||||||
params = {key: params.get(key) or defaults[key] for key in defaults}
|
params = {key: params.get(key) or defaults[key] for key in defaults}
|
||||||
overlay_img_pro.overlay_img_pro(**params)
|
overlay_img_pro.overlay_img_pro(**params)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##########
|
||||||
|
# pickle_juice
|
||||||
|
##########
|
||||||
|
@app.command('pickle_juice', help='Apply filter like the video was dipped in pickle juice.')
|
||||||
|
def pickle_juice_vb(
|
||||||
|
input_file: str = typer.Argument(None, help="Input video file"),
|
||||||
|
output_file: str = typer.Argument(None, help="Output video file"),
|
||||||
|
):
|
||||||
|
params = {
|
||||||
|
"input_file": input_file,
|
||||||
|
"output_file": output_file
|
||||||
|
}
|
||||||
|
defaults = config['pickle_juice']
|
||||||
|
params = {key: params.get(key) or defaults[key] for key in defaults}
|
||||||
|
pickle_juice.pickle_juice(**params)
|
||||||
|
|
||||||
##########
|
##########
|
||||||
# rb_blur
|
# rb_blur
|
||||||
##########
|
##########
|
||||||
@@ -480,7 +534,6 @@ def silence_xtraction_vb(
|
|||||||
params = {key: params.get(key) or defaults[key] for key in defaults}
|
params = {key: params.get(key) or defaults[key] for key in defaults}
|
||||||
silence_xtraction.silence_xtraction(**params)
|
silence_xtraction.silence_xtraction(**params)
|
||||||
|
|
||||||
|
|
||||||
###########
|
###########
|
||||||
# slight_smear
|
# slight_smear
|
||||||
###########
|
###########
|
||||||
@@ -531,6 +584,22 @@ def stack_2x_vb(
|
|||||||
params = {key: params.get(key) or defaults[key] for key in defaults}
|
params = {key: params.get(key) or defaults[key] for key in defaults}
|
||||||
stack_2x.stack_2x(**params)
|
stack_2x.stack_2x(**params)
|
||||||
|
|
||||||
|
############
|
||||||
|
# steel_wash
|
||||||
|
############
|
||||||
|
@app.command('steel_wash', help='Apply steel blue filter to video.')
|
||||||
|
def steel_wash_vb(
|
||||||
|
input_file: str = typer.Argument(None, help="Input video file 1"),
|
||||||
|
output_file: str = typer.Argument(None, help="Output video file")
|
||||||
|
):
|
||||||
|
params = {
|
||||||
|
"input_file": input_file,
|
||||||
|
"output_file": output_file
|
||||||
|
}
|
||||||
|
defaults = config['steel_wash']
|
||||||
|
params = {key: params.get(key) or defaults[key] for key in defaults}
|
||||||
|
steel_wash.steel_wash(**params)
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# stutter-pro
|
# stutter-pro
|
||||||
###############
|
###############
|
||||||
|
|||||||
Reference in New Issue
Block a user