From 883e44f0b0c0664ecaca17121e95858647f7b7b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tony=20Tk=C3=A1=C4=8Dik?= Date: Sat, 5 Jul 2025 14:33:23 +0200 Subject: [PATCH] medie: Added some video editing utilities. --- bin/medie | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/bin/medie b/bin/medie index b7795d5..9cd3be0 100755 --- a/bin/medie +++ b/bin/medie @@ -294,7 +294,6 @@ nux.log debug "FFMPEG: $FFMPEG_OR_LIBAV Magick: $NUX_MAGICK" } - function img.largest { ## FIXME: Identify largest image nux.fs.path.relative.pwd "$1"; @@ -357,7 +356,61 @@ function target.from image qualifier extension { done; fi done; +} +@command video-reverse { + for video in "$@"; do + target=$(target.from "$video" "reversed") + #target_dir=$(dirname "$target") + #nux.log debug "Directory is $target_dir" + #tmp=$(mktemp -p "$target_dir") + if [ "$target" = "$video" ]; then + tmp=$(mktemp -p "$target_dir") + mv -f "$video" "$tmp" + video="$tmp" + fi + nux.fs.info "$target" "Output is '$target'" + ffmpeg -y -i "$video" -vf reverse "$target" &> /dev/null + if [ -e "$tmp" ]; then + rm "$tmp" + fi + done +} + + +@command video-concat target { + tmp=$(mktemp -p "$target_dir") + for video in "$@"; do + echo "file" "'$(realpath "$video")'" >> "$tmp"; + done + ffmpeg -y -f concat -safe 0 -i "$tmp" "$target" &> /dev/null + nux.fs.info "$target" "Created from '$@'" + if [ -e "$tmp" ]; then + rm -v "$tmp" + fi +} + +@command video-pingpong { + for video in "$@"; do + target=$(target.from "$video" "pingpong") + #target_dir=$(dirname "$target") + #nux.log debug "Directory is $target_dir" + #tmp=$(mktemp -p "$target_dir") + NUX_INPLACE="" $(task.video-reverse "$video") + reversed=$(target.from "$video" "reversed") + + if [ "$target" = "$video" ]; then + tmp=$(mktemp -p "$target_dir") + mv -f "$video" "$tmp" + video="$tmp" + fi + task.video-concat "$target" "$video" "$reversed" + rm -v "$reversed" + if [ -e "$tmp" ]; then + rm -v "$tmp" + fi + done + }