From 8e9f018fecb61d5ddc8c61e9d4438aa9b47b2c9b Mon Sep 17 00:00:00 2001 From: Klesh Wong Date: Wed, 16 Dec 2020 01:40:22 +0800 Subject: [PATCH] [feature] cut/join/preview/fadein/chapter --- bin/mediacut | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100755 bin/mediacut diff --git a/bin/mediacut b/bin/mediacut new file mode 100755 index 0000000..17f4ad4 --- /dev/null +++ b/bin/mediacut @@ -0,0 +1,107 @@ +#!/bin/fish + +function preview -a infile -d "preview media with mpv" + if test -z $infile + help + exit 1 + end + mpv --no-resume-playback --start=0 --osd-fractions --osd-level=3 $infile +end + +function cut -a infile from to outfile -d "cut out portion to new media file" + if test -z $outfile + help + exit 1 + end + ffmpeg -ss $from -i $infile -t to -c copy $outfile +end + +function cover -a infile outfile title gravity x y -d "create cover" + if test -z $title + help + exit 1 + end + test -z $x && set x 0 + test -z $y && set y 0 + test -z $gravity && set gravity center + set tmpblur /tmp/tmpblur.jpg + magick convert $infile -blur 0x8 $tmpblur + magick convert $tmpblur \ + -gravity $gravity \ + -interline-spacing 20 \ + -pointsize 120 -font "$SC_FONT" \ + -fill '#fdf6e3' -stroke '#fdf6e3' -strokewidth 40 \ + -annotate +$x+$y "$title"\ + -fill '#839496' -stroke '#839496' -strokewidth 5 \ + -annotate +$x+$y "$title"\ + $outfile +end + +function chapter -a infile outfile title duration gravity -d "prepend chapter to video" + if test -z $title + help + exit 1 + end + test -z $duration && set duration 3 + set tmpjpeg /tmp/tmpjpeg.jpg + set tmpcover /tmp/tmpcover.jpg + set tmpchapter /tmp/chapter.mp4 + ffmpeg -i $infile -vframes 1 -f image2 -y $tmpjpeg + cover $tmpjpeg $tmpcover $title + ffmpeg \ + -loop 1 -framerate 30 -i $tmpcover \ + -loop 1 -framerate 30 -i $tmpjpeg \ + -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=48000 \ + -filter_complex " + [0:v]fade=t=out:st=3:d=1:alpha=1[v0]; + [1:v][v0]overlay" \ + -c:v h264 -crf 0 -preset ultrafast -pix_fmt yuv444p \ + -t 5 \ + -y $tmpchapter + join $outfile $tmpchapter $infile + preview $outfile +end + +function join -a outfile + set infile "/tmp/ffmpeg.concat" + rm $infile + for file in $argv[2..-1] + set file (readlink -f $file) + echo "file $file" >> $infile + end + ffmpeg -f concat -safe 0 -i $infile -c copy $outfile +end + +function concat -a indir outfile -d "concat all media files in folder to a new media file" + if test -z $outfile + help + exit 1 + end + set -e files + for file in (ls $indir) + set --append files $indir/$file + end + join $outfile $files +end + +function help + echo "Usage: mediacut [...args]" + echo " commads:" + echo " preview " + echo " cut " + echo " chapter " + echo " join <outfiles> <...infiles>" + echo " concat <indir> <outfile>" +end + +if test (count $argv) -lt 2 + help + exit 1 +end + +switch $argv[1] + case preview cut join concat chapter help + $argv + case "*" + help +end