rendered paste body#!/bin/bashINFILES=( "$@" )WORK_DIR=`pwd`/slideshow-$(date +%s)TV_STANDARD="ntsc"SLIDE_FRAMES=60BINMAX=640AR=1.333FRAME_RATE=29.970VIDSIZE=720x480FFMOPTS="-b 8000k -maxrate 9000k -bufsize 224KiB -aspect 4:3"IMGENC_CMD=(ffmpeg -f yuv4mpegpipe -r $FRAME_RATE \-i - -s $VIDSIZE $FFMOPTS -r $FRAME_RATE -y "$WORK_DIR/slideshow.m2v")# make a fifo to send raw yuv to, to be encoded by ffmpegmkfifo "$WORK_DIR/enc.fifo"# ffmpeg command reads from the fifo"${IMGENC_CMD[@]}" < "$WORK_DIR/enc.fifo" &# send fd 3 to enc.fifoexec 3> "$WORK_DIR/enc.fifo"for f in ${!INFILES[@]}; do # encode still frames ffmpeg -f image2 -loop_input -vframes $SLIDE_FRAMES -i "${INFILES[f]}" -pix_fmt yuv420p -f yuv4mpegpipe - if $SLIDE_FADE; then if [[ $f -lt ${#INFILES[@]} ]]; then base_ppm="$WORK_DIR/${f}.ppm" if ((f == (${#INFILES[@]} - 1) )); then overlay_ppm="$WORK_DIR/0.ppm" else overlay_ppm="$WORK_DIR/$((f+1)).ppm" fi [[ $TV_STANDARD = "ntsc" ]] && fade_frames=30 || fade_frames=25 fade_incr=$(bc -l <<< "scale=2; 100 / $fade_frames") fade_slide=0 echo for ((i=0; i<fade_frames; i++)); do BLEND_AMT=$(bc -l <<< "scale=2; $fade_slide * $fade_incr") composite_cmd=(composite -blend $BLEND_AMT -depth 8 "$overlay_ppm" \ "$base_ppm" "$WORK_DIR/animenu/$(printf %06d%s $i .ppm)") "${composite_cmd[@]}" spin "Compositing ${overlay_ppm##*/} over ${base_ppm##*/} with -blend $BLEND_AMT" let fade_slide=fade_slide+1 done let first_slide=first_slide+fade_frames+1 else echo "Running ffmpeg to encode ppms" ffmpeg -f image2 -i "WORK_DIR/animenu/%06d.ppm" -pix_fmt yuv420p -f yuv4mpegpipe - FFPID=?! wait $FFPID rm -f "WORK_DIR/animenu/*.ppm" fi fidone >&3