init
This commit is contained in:
commit
a1b5dd9ce8
7 changed files with 85 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
/target
|
||||
out/*
|
||||
|
7
Cargo.lock
generated
Normal file
7
Cargo.lock
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "bad-apple-mpv"
|
||||
version = "0.1.0"
|
8
Cargo.toml
Normal file
8
Cargo.toml
Normal file
|
@ -0,0 +1,8 @@
|
|||
[package]
|
||||
name = "bad-apple-mpv"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
BIN
bad_apple.webm
Normal file
BIN
bad_apple.webm
Normal file
Binary file not shown.
BIN
bad_apple_audio.webm
Normal file
BIN
bad_apple_audio.webm
Normal file
Binary file not shown.
1
rustfmt.toml
Normal file
1
rustfmt.toml
Normal file
|
@ -0,0 +1 @@
|
|||
hard_tabs = true
|
66
src/main.rs
Normal file
66
src/main.rs
Normal file
|
@ -0,0 +1,66 @@
|
|||
use std::{env, process::Command, thread, time::Duration};
|
||||
|
||||
// const WIDTH: u32 = 7;
|
||||
// const HEIGHT: u32 = 7;
|
||||
const WIDTH: u32 = 14;
|
||||
const HEIGHT: u32 = 13;
|
||||
const _SIZE: u32 = WIDTH * HEIGHT;
|
||||
const SCALE: u32 = 2; // resolution of chunks
|
||||
const OFFSET: f32 = 0.1; // time offset for starting
|
||||
|
||||
fn main() {
|
||||
let args: Vec<_> = env::args().collect();
|
||||
if args.contains(&"gen".into()) {
|
||||
generate();
|
||||
} else {
|
||||
launch();
|
||||
}
|
||||
}
|
||||
|
||||
fn generate() {
|
||||
for x in 0..WIDTH {
|
||||
for y in 0..HEIGHT {
|
||||
let name = format!("out/{x:02}_{y:02}.mp4");
|
||||
let index = (WIDTH - x) + (HEIGHT - y) * WIDTH;
|
||||
let offset = index as f32 * OFFSET;
|
||||
// println!("{name}");
|
||||
|
||||
// if PathBuf::from(&name).exists() {
|
||||
// continue;
|
||||
// }
|
||||
Command::new("ffmpeg")
|
||||
.arg("-i")
|
||||
.arg("bad_apple.webm")
|
||||
.arg("-ss")
|
||||
.arg(format!("{:.1}", offset))
|
||||
.arg("-filter_complex")
|
||||
.arg(dbg!(format!(
|
||||
"[0:v]scale={}:{}[SC];[SC]crop={SCALE}:{SCALE}:{}:{}",
|
||||
WIDTH * SCALE,
|
||||
HEIGHT * SCALE,
|
||||
x * SCALE,
|
||||
y * SCALE
|
||||
)))
|
||||
.arg("-an")
|
||||
.arg("-y")
|
||||
.arg(&name)
|
||||
.spawn()
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn launch() {
|
||||
thread::sleep(Duration::from_secs(2));
|
||||
Command::new("mpv")
|
||||
.arg(format!("bad_apple_audio.webm"))
|
||||
.spawn()
|
||||
.unwrap();
|
||||
for y in (0..HEIGHT).rev() {
|
||||
for x in (0..WIDTH).rev() {
|
||||
let name = format!("out/{x:02}_{y:02}.mp4");
|
||||
Command::new("mpv").arg(name).spawn().unwrap();
|
||||
thread::sleep(Duration::from_millis((1000.0 * OFFSET) as u64));
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue