diff --git a/sampeg.sh b/sampeg.sh new file mode 100644 index 0000000..cbab36a --- /dev/null +++ b/sampeg.sh @@ -0,0 +1,157 @@ +#!/bin/bash + +# Function to generate concat.txt from a folder +generate_concat_file() { + folder="$1" + output="$2" + cd "$folder" || exit + files=$(ls *.mp4 *.jpg *.jpeg *.png | sort -n) + for file in $files; do + echo "file '$folder/$file'" >>"$output" + done + echo "Generated concat.txt" +} + +# Function to combine clips using concat file and scale +combine_using_concat_file() { + concat_file="$1" + output="$2" + ffmpeg -f concat -safe 0 -i "$concat_file" -vf "scale=3840x2160:force_original_aspect_ratio=decrease,pad=3840:2160:(ow-iw)/2:(oh-ih)/2" -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k "$output" + echo "Clips combined and scaled successfully" +} + +# Function to crop a clip +crop_clip() { + input="$1" + output="$2" + width="$3" + height="$4" + x_position="$5" + y_position="$6" + ffmpeg -i "$input" -vf "crop=$width:$height:$x_position:$y_position" "$output" + echo "Clip cropped successfully" +} + +# Function to trim a clip from the beginning +trim_beginning() { + input="$1" + output="$2" + start_time="$3" + ffmpeg -i "$input" -ss "$start_time" -c copy "$output" + echo "Clip trimmed from beginning successfully" +} + +# Function to trim a clip from the end +trim_end() { + input="$1" + output="$2" + end_time="$3" + ffmpeg -i "$input" -to "$end_time" -c copy "$output" + echo "Clip trimmed from end successfully" +} + +# Function to scale a clip +scale_clip() { + input="$1" + output="$2" + ffmpeg -i "$input" -vf "scale=3840x2160:force_original_aspect_ratio=decrease,pad=3840:2160:(ow-iw)/2:(oh-ih)/2" "$output" + echo "Clip scaled successfully" +} + +# Function to remove parts without audio from a clip +remove_silence() { + input="$1" + output="$2" + ffmpeg -i "$input" -af silenceremove=1:0:-50dB -c:a copy "$output" + echo "Silence removed successfully" +} + +# Function to display help message +display_help() { + toilet SaMpeg + echo "The video fusing interface." + echo "Powered by FFmpeg." + echo "Version 2.2024-a" + echo "------------" + echo "Usage:" + echo " $0 generate-concat-file " + echo " $0 combine-using-concat-file " + echo " $0 crop " + echo " $0 trim-beginning " + echo " $0 trim-end " + echo " $0 scale " + echo " $0 remove-silence " +} + +# Main script + +if [[ $# -lt 1 ]]; then + display_help + exit 1 +fi + +while [[ $# -gt 0 ]]; do + option="$1" + case $option in + generate-concat-file) + if [[ $# -lt 3 ]]; then + echo "Usage: $0 generate-concat-file " + exit 1 + fi + generate_concat_file "$2" "$3" + ;; + combine-using-concat-file) + if [[ $# -lt 3 ]]; then + echo "Usage: $0 combine-using-concat-file " + exit 1 + fi + combine_using_concat_file "$2" "$3" + ;; + crop) + if [[ $# -ne 7 ]]; then + echo "Usage: $0 crop " + exit 1 + fi + crop_clip "$2" "$3" "$4" "$5" "$6" "$7" + ;; + trim-beginning) + if [[ $# -ne 4 ]]; then + echo "Usage: $0 trim-beginning " + exit 1 + fi + trim_beginning "$2" "$3" "$4" + ;; + trim-end) + if [[ $# -ne 4 ]]; then + echo "Usage: $0 trim-end " + exit 1 + fi + trim_end "$2" "$3" "$4" + ;; + scale) + if [[ $# -ne 3 ]]; then + echo "Usage: $0 scale " + exit 1 + fi + scale_clip "$2" "$3" + ;; + remove-silence) + if [[ $# -ne 3 ]]; then + echo "Usage: $0 remove-silence " + exit 1 + fi + remove_silence "$2" "$3" + ;; + help) + display_help + exit 0 + ;; + *) + echo "Invalid option: $option" + display_help + exit 1 + ;; + esac + shift +done +