diff options
| author | BardofSprites <[email protected]> | 2026-04-23 00:09:51 -0400 |
|---|---|---|
| committer | BardofSprites <[email protected]> | 2026-04-23 00:09:51 -0400 |
| commit | c6b3a0b36cee2bef043f0fef75ae99cd80ba1569 (patch) | |
| tree | 341d235bc1f86956954203132def457b512032e3 | |
| parent | 01fd56d1567fcb8011e8897801e362537f8f5f15 (diff) | |
image/video editing
| -rwxr-xr-x | bin/.local/bin/scripts/image-editing/center-image-bg | 4 | ||||
| -rwxr-xr-x | bin/.local/bin/scripts/video-editing/obs_convert | 3 | ||||
| -rwxr-xr-x | bin/.local/bin/scripts/video-editing/speed_up | 48 |
3 files changed, 52 insertions, 3 deletions
diff --git a/bin/.local/bin/scripts/image-editing/center-image-bg b/bin/.local/bin/scripts/image-editing/center-image-bg index 3d379c0..1fc2bc4 100755 --- a/bin/.local/bin/scripts/image-editing/center-image-bg +++ b/bin/.local/bin/scripts/image-editing/center-image-bg @@ -1,8 +1,6 @@ #!/usr/bin/env bash - if [ -z "$1" ]; then echo "Required input (image file) not found. Try again." exit 1 fi - -magick $1 -gravity center -background "#282828" -extent 1920x1080 $1-edit.png +magick "$1" -filter Lanczos -resize 1536x864\> -gravity center -background "$2" -extent 1920x1080 "$1-result.png" diff --git a/bin/.local/bin/scripts/video-editing/obs_convert b/bin/.local/bin/scripts/video-editing/obs_convert new file mode 100755 index 0000000..86205eb --- /dev/null +++ b/bin/.local/bin/scripts/video-editing/obs_convert @@ -0,0 +1,3 @@ +#!/bin/bash +ffmpeg -i "$1" -vf "fps=15,palettegen=stats_mode=full" -y /tmp/palette.png +ffmpeg -i "$1" -i /tmp/palette.png -filter_complex "fps=15[x];[x][1:v]paletteuse=dither=sierra2_4a" "$2" diff --git a/bin/.local/bin/scripts/video-editing/speed_up b/bin/.local/bin/scripts/video-editing/speed_up new file mode 100755 index 0000000..11ce691 --- /dev/null +++ b/bin/.local/bin/scripts/video-editing/speed_up @@ -0,0 +1,48 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +# DRY usage string +my $help_string = "Usage: ./speed_up video.mp4 [speed%] output.mp4\n"; + +# Input args +my $video_file = $ARGV[0] or die $help_string; +my $speed_input = $ARGV[1] // 100; +my $output_file = $ARGV[2] || $ARGV[1]; + +# Validate output file is provided +die $help_string unless defined $output_file && $output_file ne $speed_input; + +# Validate speed percentage +die "Error: speed must be a number (e.g., 150 for 150%)\n$help_string" + unless $speed_input =~ /^\d*\.?\d+$/; + +# Convert percentage to speed factor +my $speed_factor = $speed_input / 100; +my $setpts_value = 1 / $speed_factor; + +# Build proper atempo filter +my $audio_filter; +if ($speed_factor <= 2.0) { + $audio_filter = "atempo=$speed_factor"; +} else { + my @tempos; + my $remaining = $speed_factor; + while ($remaining > 2.0) { + push @tempos, "atempo=2.0"; + $remaining /= 2.0; + } + push @tempos, "atempo=$remaining"; + $audio_filter = join(",", @tempos); +} + +# Build FFmpeg command +my $ffmpeg_command = sprintf( + 'ffmpeg -i "%s" -filter_complex "[0:v]setpts=%f*PTS[v];[0:a]%s[a]" -map "[v]" -map "[a]" -c:v libx264 -c:a aac "%s"', + $video_file, $setpts_value, $audio_filter, $output_file +); + +# Run FFmpeg +system($ffmpeg_command) == 0 + or die "Failed to run ffmpeg: $!"; |
