#!/bin/bash INFILES=( "$@" ) WORK_DIR=`pwd`/slideshow-$(date +%s) TV_STANDARD="ntsc" SLIDE_FRAMES=60 BINMAX=640 AR=1.333 FRAME_RATE=29.970 VIDSIZE=720x480 FFMOPTS="-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 ffmpeg mkfifo "$WORK_DIR/enc.fifo" # ffmpeg command reads from the fifo "${IMGENC_CMD[@]}" < "$WORK_DIR/enc.fifo" & # send fd 3 to enc.fifo exec 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&3