dotfiles/bin/mediacut

107 lines
2.7 KiB
Fish
Executable File

#!/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 0 \
-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
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 $outfile
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 <command> [...args]"
echo " commads:"
echo " preview <infile>"
echo " cut <infile> <from> <to>"
echo " cover <infile> <outfile> <title>"
echo " chapter <infile> <title>"
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 cover chapter help
$argv
case "*"
help
end