[feature] cut/join/preview/fadein/chapter
This commit is contained in:
parent
4b8fae2550
commit
8e9f018fec
107
bin/mediacut
Executable file
107
bin/mediacut
Executable file
|
@ -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 <command> [...args]"
|
||||
echo " commads:"
|
||||
echo " preview <infile>"
|
||||
echo " cut <infile> <from> <to>"
|
||||
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 chapter help
|
||||
$argv
|
||||
case "*"
|
||||
help
|
||||
end
|
Loading…
Reference in New Issue
Block a user