1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/videos/Makepres Sun Jan 19 20:39:54 2014 +0100 1.3 @@ -0,0 +1,280 @@ 1.4 +#! /bin/sh 1.5 + 1.6 +# Set variables 1.7 +INFILE=$1 1.8 +INAUDI=$2 1.9 +INPREV=$3 1.10 +INPOST=$4 1.11 +INTITLE=$5 1.12 +THREAD=4 1.13 + 1.14 +# Following is not needed 1.15 +## Get the number of frames for fading out 1.16 +#FRAMES=`ffmpeg -i $INFILE -an -codec:v copy -f null /dev/null 2>&1 | grep 'frame=' | cut -f 2 -d ' '` 1.17 + 1.18 +## Start log 1.19 +##script procfilm-`date +%Y%m%d:%H:%M:%S`.log 1.20 +#echo "Redirecting command line out to log file `date +%Y%m%d:..._`.log" 1.21 +#exec > procfilm-`date +%Y%m%d:%H:%M:%S`.log 2>&1 1.22 +# 1.23 +# Usage 1.24 +echo 'This program will produce six output files, one of each format:' 1.25 +echo ' 720p and 360p, WEBM (VP8+VORBIS in WEBM)' 1.26 +echo ' 720p and 360p, XIPH (THEORA+VORBIS in OGV)' 1.27 +echo ' 720p and 360p, MPEG (H.264+AAC in MP4)' 1.28 +echo '' 1.29 +echo "Usage: $0 <Srcfile> <Srcaudio> <Prevfile> <Postfile> '<Titel>'" 1.30 +echo "Example: $0 Myfilm.avi Myaudio.wav Myprev Mypost 'My best film'" 1.31 +echo 'Note: Myprev and Mypost must be PNG files (without file extension.)' 1.32 +echo 'Note: Titel can be only one word unless you wrap a phrase in quotes.' 1.33 +echo '' 1.34 +echo 'Warning: Check your preset paths like /usr/share/ffmpeg and $HOME/.ffmpeg' 1.35 +echo '' 1.36 +echo "Starting with log processing on `date +%Y%m%d\ %H:%M:%S`" 1.37 +echo '' 1.38 + 1.39 +# Create working subdirectories 1.40 +for format in webm xiph mpeg; do 1.41 + for resol in 360 720; do 1.42 + mkdir work$format-$resol; 1.43 + done; 1.44 +done 1.45 + 1.46 +### 1.47 +## START OF WEBM ENCODING 1.48 +## 1.49 + 1.50 +# 720p Webm (VP8/Vorbis) 1.51 +cd ./workwebm-720 || return 1 1.52 + 1.53 +# 720p Prepare main film part 1.54 +time ffmpeg -v warning -threads $THREAD -i ../Wideoco-raw.mkv -an -codec:v libvpx -r 25 -s 1280x720 -aspect 16:9 -pix_fmt yuv420p -vpre 720p -pass 1 -f null /dev/null 2>&1 1.55 +echo 'Finished first pass main film part encoding...' 1.56 +echo '' 1.57 +time ffmpeg -v warning -threads $THREAD -i ../Wideoco-raw.mkv -an -codec:v libvpx -r 25 -s 1280x720 -aspect 16:9 -pix_fmt yuv420p -vpre 720p -vf '[in] delogo=x=1610:y=60:w=228:h=80:band=4:t=4:show=0 [delogo]; movie=../procomwater.png [watermark]; [delogo][watermark] overlay=1572:56, fade=t=out:st=75:d=1.75:alpha=0 [out]' -f webm -ss 3.75 -t 73 -pass 2 Wideoco-raw.mkv-vidnur720p.webm 1.58 + 1.59 +echo 'Finished second pass main film part encoding...' 1.60 +echo '' 1.61 + 1.62 +# 720p Prepare front and back matter 1.63 +ffmpeg -v warning -loop 1 -i ../$INPREV.png -c:v libvpx -t 1 -r 25 -s 1280x720 -aspect 16:9 -pix_fmt yuv420p -vpre 720p -f webm $INPREV-720p.webm 1.64 +echo 'Finished generation of front matter...' 1.65 +echo '' 1.66 +#ffmpeg -v warning -loop 1 -i ../$INPOST.png -c:v libvpx -t 15 -r 25 -s 1280x720 -aspect 16:9 -pix_fmt yuv420p -vpre 720p -vf 'fade=t=in:st=4:d=0.75:alpha=0' -f webm $INPOST-720p.webm 1.67 +#echo 'Finished generation of back matter...' 1.68 +#echo '' 1.69 +# 1.70 +# 720p Concatanate film parts 1.71 +mkvmerge --title "$INTITLE" --default-language en -w -o $INFILE-vidcat720p.webm $INPREV-720p.webm + $INFILE-vidnur720p.webm 1.72 +echo 'Finished concatanating front, main, and back part files...' 1.73 +echo '' 1.74 + 1.75 +# 720p Join video and audio in film 1.76 +ffmpeg -v warning -i $INFILE-vidcat720p.webm -i ../$INAUDI -map 0 -map 1 -codec:a copy -codec:v copy -pix_fmt yuv420p -f webm output-720p.webm 1.77 +echo "Finished joining video with audio to produce $INFILE-720p.webm" 1.78 +echo '' 1.79 +echo '' 1.80 + 1.81 +# 360p Webm (VP8/Vorbis) 1.82 +cd ../workwebm-360 || return 1 1.83 + 1.84 +# 360p Prepare main film part 1.85 +time ffmpeg -v warning -threads $THREAD -i ../$INFILE -an -codec:v libvpx -r 25 -s 640x360 -aspect 16:9 -pix_fmt yuv420p -vpre 360p -pass 1 -f null /dev/null 2>&1 1.86 +echo 'Finished first pass main film part encoding...' 1.87 +echo '' 1.88 +time ffmpeg -v warning -threads $THREAD -i ../$INFILE -an -codec:v libvpx -r 25 -s 640x360 -aspect 16:9 -pix_fmt yuv420p -vpre 360p -vf '[in] delogo=x=1610:y=60:w=228:h=80:band=4:t=4:show=0 [delogo]; movie=../procomwater.png [watermark]; [delogo][watermark] overlay=1572:56, fade=t=out:st=75:d=1.75:alpha=0 [out]' -f webm -ss 3.75 -t 73 -pass 2 $INFILE-vidnur360p.webm 1.89 +echo 'Finished second pass main film part encoding...' 1.90 +echo '' 1.91 + 1.92 +# 360p Prepare front and back matter 1.93 +ffmpeg -v warning -loop 1 -i ../$INPREV.png -c:v libvpx -t 1 -r 25 -s 640x360 -aspect 16:9 -pix_fmt yuv420p -vpre 360p -f webm $INPREV-360p.webm 1.94 +echo 'Finished generation of front matter...' 1.95 +echo '' 1.96 +#ffmpeg -v warning -loop 1 -i ../$INPOST.png -c:v libvpx -t 15 -r 25 -s 640x360 -aspect 16:9 -pix_fmt yuv420p -vpre 360p -vf 'fade=t=in:st=4:d=0.75:alpha=0' -f webm $INPOST-360p.webm 1.97 +#echo 'Finished generation of back matter...' 1.98 +#echo '' 1.99 + 1.100 +# 360p Concatanate film parts 1.101 +mkvmerge --title "$INTITLE" --default-language en -w -o $INFILE-vidcat360p.webm $INPREV-360p.webm + $INFILE-vidnur360p.webm 1.102 +echo 'Finished concatanating front, main, and back part files...' 1.103 +echo '' 1.104 + 1.105 +# 360p Join video and audio in film 1.106 +ffmpeg -v warning -i $INFILE-vidcat360p.webm -i ../$INAUDI -map 0 -map 1 -codec:a copy -codec:v copy -pix_fmt yuv420p -f webm output-360p.webm 1.107 +echo "Finished joining video with audio to produce $INFILE-360p.webm" 1.108 +echo '' 1.109 +echo '' 1.110 + 1.111 +# 1.112 +# START OF MPEG4 ENCODING 1.113 +# 1.114 + 1.115 +# Erst kaputte audio Einrichtungen beheben 1.116 +echo 'WARNING! You forgot to deal with VORBIS/MP4A source audio files!" 1.117 +echo 'WARNING! You forgot to deal with VORBIS/MP4A source audio files!" 1.118 +echo '' 1.119 +echo '' 1.120 +break 1.121 + 1.122 +# 720p MPEG4 (H.264/MP4) 1.123 +cd ../workmpeg-720 || return 1 1.124 + 1.125 +# 720p Prepare main film part 1.126 +time ffmpeg -v warning -threads 0 -i ../$INFILE -an -codec:v libx264 -b:v 1600k -r 25 -s 1280x720 -aspect 16:9 -pix_fmt yuv420p -vpre fastfirstpass -pass 1 -f null /dev/null 2>&1 1.127 +echo 'Finished first pass main film part encoding...' 1.128 +echo '' 1.129 +time ffmpeg -v warning -threads 0 -i ../$INFILE -an -codec:v libx264 -b:v 1600k -r 25 -s 1280x720 -aspect 16:9 -pix_fmt yuv420p -vpre hq -vf '[in] delogo=x=1610:y=60:w=228:h=80:band=4:t=4:show=0 [delogo]; movie=../procomwater.png [watermark]; [delogo][watermark] overlay=1572:56, fade=t=out:st=75:d=1.75:alpha=0 [out]' -bsf:v h264_mp4toannexb -f mpegts -ss 3.75 -t 73 -pass 2 $INFILE-vidnur720p.ts 1.130 +echo 'Finished second pass main film part encoding...' 1.131 +echo '' 1.132 + 1.133 +# 720p Prepare front and back matter 1.134 +ffmpeg -v warning -loop 1 -i ../$INPREV.png -c:v libx264 -t 1 -b:v 1600k -r 25 -s 1280x720 -aspect 16:9 -pix_fmt yuv420p -f mpegts $INPREV-720p.ts 1.135 +echo 'Finished generation of front matter...' 1.136 +echo '' 1.137 +#ffmpeg -v warning -loop 1 -i ../$INPOST.png -c:v libx264 -t 15 -b:v 1600k -r 25 -s 1280x720 -aspect 16:9 -pix_fmt yuv420p -vf 'fade=t=in:st=4:d=0.75:alpha=0' -f mpegts $INPOST-720p.ts 1.138 +#echo 'Finished generation of back matter...' 1.139 +#echo '' 1.140 + 1.141 +# Now prepare for H.264 concatanation 1.142 +# http://trac.ffmpeg.org/wiki/How%20to%20concatenate%20%28join,%20merge%29%20media%20files 1.143 + 1.144 +## Dont use this because it reencodes when copying is desired 1.145 +##ffmpeg -v warning -i <filmpre.mp4> -i $INFILE -i <filmpost.mp4> -filter_complex '[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] concat=n=3:v=1:a=1 [v] [a]' -map '[v]' -map '[a]' fullfilm.mp4 1.146 + 1.147 +# 720p Concatanate film parts 1.148 +# Actually dont need this if we encode H.264 to MPEGTS in previous encoding 1.149 +##ffmpeg -v warning -i $INFILE.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate.ts 1.150 +ffmpeg -i "concat:$INPREV-720p.ts|$INFILE-vidnur720p.ts" -c copy -bsf:a aac_adtstoasc -f mp4 $INFILE-vidcat720p.mp4 1.151 +echo 'Finished concatanating front, main, and back part files...' 1.152 +echo '' 1.153 + 1.154 +# 720p Join video and audio in film 1.155 +ffmpeg -v warning -i $INFILE-vidcat720p.mp4 -i ../$INAUDI -map 0 -map 1 -codec:a copy -codec:v copy -pix_fmt yuv420p -f mp4 output-720p.mp4 1.156 +echo "Finished joining video with audio to produce $INFILE-720p.mp4" 1.157 +#echo '' 1.158 +#echo '' 1.159 + 1.160 +# 360p MPEG4 (H.264/MP4) 1.161 +cd ../workmpeg-360 || return 1 1.162 + 1.163 +# 360p Prepare main film part 1.164 +time ffmpeg -v warning -threads 0 -i ../$INFILE -an -codec:v libx264 -b:v 640k -r 25 -s 640x360 -aspect 16:9 -pix_fmt yuv420p -vpre fastfirstpass -pass 1 -f null /dev/null 2>&1 1.165 +echo 'Finished first pass main film part encoding...' 1.166 +echo '' 1.167 +time ffmpeg -v warning -threads 0 -i ../$INFILE -an -codec:v libx264 -b:v 640k -r 25 -s 640x360 -aspect 16:9 -pix_fmt yuv420p -vpre hq -vf '[in] delogo=x=1610:y=60:w=228:h=80:band=4:t=4:show=0 [delogo]; movie=../procomwater.png [watermark]; [delogo][watermark] overlay=1572:56, fade=t=out:st=75:d=1.75:alpha=0 [out]' -bsf:v h264_mp4toannexb -f mpegts -ss 3.75 -t 73 -pass 2 $INFILE-vidnur360p.ts 1.168 +echo 'Finished second pass main film part encoding...' 1.169 +echo '' 1.170 + 1.171 +# 360p Prepare front and back matter 1.172 +ffmpeg -v warning -loop 1 -i ../$INPREV.png -c:v libx264 -t 1 -b:v 640k -r 25 -s 640x360 -aspect 16:9 -pix_fmt yuv420p -f mpegts $INPREV-360p.ts 1.173 +echo 'Finished generation of front matter...' 1.174 +echo '' 1.175 +#ffmpeg -v warning -loop 1 -i ../$INPOST.png -c:v libx264 -t 15 -b:v 640k -r 25 -s 640x360 -aspect 16:9 -pix_fmt yuv420p -vf 'fade=t=in:st=4:d=0.75:alpha=0' -f mpegts $INPOST-360p.ts 1.176 +#echo 'Finished generation of back matter...' 1.177 +#echo '' 1.178 + 1.179 +# Now prepare for H.264 concatanation 1.180 +# http://trac.ffmpeg.org/wiki/How%20to%20concatenate%20%28join,%20merge%29%20media%20files 1.181 + 1.182 +## Dont use this because it reencodes when copying is desired 1.183 +##ffmpeg -v warning -i <filmpre.mp4> -i $INFILE -i <filmpost.mp4> -filter_complex '[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] concat=n=3:v=1:a=1 [v] [a]' -map '[v]' -map '[a]' fullfilm.mp4 1.184 + 1.185 +# 360p Concatanate film parts 1.186 +# Actually dont need this if we encode H.264 to MPEGTS in previous encoding 1.187 +##ffmpeg -v warning -i $INFILE.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate.ts 1.188 +ffmpeg -i "concat:$INPREV-360p.ts|$INFILE-vidnur360p.ts" -c copy -bsf:a aac_adtstoasc -f mp4 $INFILE-vidcat360p.mp4 1.189 +echo 'Finished concatanating front, main, and back part files...' 1.190 +echo '' 1.191 + 1.192 +# 360p Join video and audio in film 1.193 +ffmpeg -v warning -i $INFILE-vidcat360p.mp4 -i ../$INAUDI -map 0 -map 1 -codec:a copy -codec:v copy -pix_fmt yuv420p -f mp4 output-360p.mp4 1.194 +echo "Finished joining video with audio to produce $INFILE-360p.mp4" 1.195 +echo '' 1.196 +echo '' 1.197 + 1.198 +# 1.199 +# START OF XIPH ENCODING 1.200 +# 1.201 + 1.202 +# 720p OGV 1.203 +cd ./workxiph-720 || return 1 1.204 + 1.205 +# 720p Prepare main film part 1.206 +#ffmpeg -i ../$INFILE -codec:v theora -qscale:v 7 -codec:a vorbis -qscale:a 5 output.ogv 1.207 +time ffmpeg -v warning -threads 0 -i ../$INFILE -an -codec:v libtheora -r 25 -s 1280x720 -aspect 16:9 -pix_fmt yuv420p -f null -pass 1 /dev/null 2>&1 1.208 +echo 'Finished first pass main film part encoding...' 1.209 +echo '' 1.210 +time ffmpeg -v warning -threads 0 -i ../$INFILE -an -codec:v libtheora -q:v 6 -r 25 -s 1280x720 -aspect 16:9 -pix_fmt yuv420p -vf '[in] delogo=x=1610:y=60:w=228:h=80:band=4:t=4:show=0 [delogo]; movie=../procomwater.png [watermark]; [delogo][watermark] overlay=1572:56, fade=t=out:st=75:d=1.75:alpha=0 [out]' -f ogg -ss 3.75 -t 73 -pass 2 $INFILE-vidnur720p.ogv 1.211 +echo 'Finished second pass main film part encoding...' 1.212 +echo '' 1.213 + 1.214 +# 720p Prepare front and back matter 1.215 +ffmpeg -v warning -loop 1 -i ../$INPREV.png -c:v libtheora -t 1 -q:v 6 -r 25 -s 1280x720 -aspect 16:9 -pix_fmt yuv420p -f ogg $INPREV-720p.ogv 1.216 +echo 'Finished generation of front matter...' 1.217 +echo '' 1.218 +#ffmpeg -v warning -loop 1 -i ../$INPOST.png -c:v libtheora -t 15 -q:v 6 -r 25 -s 1280x720 -aspect 16:9 -pix_fmt yuv420p -vf 'fade=t=in:st=4:d=0.75:alpha=0' -f ogg $INPOST-720p.ogv 1.219 +#echo 'Finished generation of back matter...' 1.220 +#echo '' 1.221 + 1.222 +# 720p Concatanate film parts 1.223 +#oggCat $INFILE-vidcat720p.ogv $INPREV-720p.ogv $INFILE-vidnur720p.ogv $INPOST-720p.ogv 1.224 +mkvmerge --title "$INTITLE" --default-language en -o $INFILE-vidcat720p.mkv $INPREV-720p.ogv + $INFILE-vidnur720p.ogv 1.225 +echo 'Finished concatanating front, main, and back part files...' 1.226 +echo '' 1.227 + 1.228 +# 720p Join video and audio in film 1.229 +ffmpeg -v warning -i $INFILE-vidcat720p.mkv -i ../$INAUDI -map 0 -map 1 -codec:a copy -codec:v copy -pix_fmt yuv420p -f ogg output-720p.ogv 1.230 +echo "Finished joining video with audio to produce $INFILE-720p.ogv" 1.231 +echo '' 1.232 +echo '' 1.233 + 1.234 +## 360p OGV 1.235 +cd ../workxiph-360 || return 1 1.236 + 1.237 +# 360p Prepare main film part 1.238 +#ffmpeg -i ../$INFILE -codec:v theora -qscale:v 7 -codec:a vorbis -qscale:a 5 output.ogv 1.239 +time ffmpeg -v warning -threads 0 -i ../$INFILE -an -codec:v libtheora -q:v 6 -r 25 -s 640x360 -aspect 16:9 -pix_fmt yuv420p -f null -pass 1 /dev/null 2>&1 1.240 +echo 'Finished first pass main film part encoding...' 1.241 +echo '' 1.242 +time ffmpeg -v warning -threads 0 -i ../$INFILE -an -codec:v libtheora -q:v 6 -r 25 -s 640x360 -aspect 16:9 -pix_fmt yuv420p -vf '[in] delogo=x=1610:y=60:w=228:h=80:band=4:t=4:show=0 [delogo]; movie=../procomwater.png [watermark]; [delogo][watermark] overlay=1572:56, fade=t=out:st=75:d=1.75:alpha=0 [out]' -f ogg -ss 3.75 -t 73 -pass 2 $INFILE-vidnur360p.ogv 1.243 +echo 'Finished second pass main film part encoding...' 1.244 +echo '' 1.245 + 1.246 +# 360p Prepare front and back matter 1.247 +ffmpeg -v warning -loop 1 -i ../$INPREV.png -c:v libtheora -t 1 -q:v 6 -r 25 -s 640x360 -aspect 16:9 -pix_fmt yuv420p -f ogg $INPREV-360p.ogv 1.248 +echo 'Finished generation of front matter...' 1.249 +echo '' 1.250 +#ffmpeg -v warning -loop 1 -i ../$INPOST.png -c:v libtheora -t 15 -q:v 6 -r 25 -s 640x360 -aspect 16:9 -pix_fmt yuv420p -vf 'fade=t=in:st=4:d=0.75:alpha=0' -f ogg $INPOST-360p.ogv 1.251 +#echo 'Finished generation of back matter...' 1.252 +#echo '' 1.253 + 1.254 +# 360p Concatanate film parts 1.255 +#oggCat $INFILE-vidcat360p.ogv $INPREV-360p.ogv $INFILE-vidnur360p.ogv $INPOST-360p.ogv 1.256 +mkvmerge --title "$INTITLE" --default-language en -o $INFILE-vidcat360p.mkv $INPREV-360p.ogv + $INFILE-vidnur360p.ogv 1.257 +echo 'Finished concatanating front, main, and back part files...' 1.258 +echo '' 1.259 + 1.260 +# 360p Join video and audio in film 1.261 +ffmpeg -v warning -i $INFILE-vidcat360p.mkv -i ../$INAUDI -map 0 -map 1 -codec:a copy -codec:v copy -pix_fmt yuv420p -f ogg output-360p.ogv 1.262 +echo "Finished joining video with audio to produce $INFILE-360p.ogv" 1.263 +echo '' 1.264 +echo '' 1.265 + 1.266 +# 1.267 +# Closing 1.268 +# 1.269 +cd .. 1.270 +echo 'Processed files: work*-*/output-*.*' 1.271 +ls -ld work*-*/output-*.* 1.272 +echo '' 1.273 +echo 'Tip: If using HTML5 video, then consider:' 1.274 +echo " <video poster='poster.png' width=640 height=360 preload='metadata' controls>" 1.275 +echo '' 1.276 + 1.277 +# 1.278 +# Scratch block (unused logic) 1.279 +# 1.280 + 1.281 +# 480p H.264/AAC in MP4 1.282 +#time ffmpeg -v warning -threads 0 -i ../$INFILE -an -codec:v libx264 -b:v 1000k -r 25 -s 854x480 -aspect 16:9 -pix_fmt yuv420p -vpre fastfirstpass -pass 1 -f null /dev/null 2>&1 1.283 +#time ffmpeg -v warning -threads 0 -i ../$INFILE -codec:a aac -b:a 128k -ac 2 -sample_fmt:1 fltp -codec:v libx264 -b:v 1000k -r 25 -s 854x480 -aspect 16:9 -pix_fmt yuv420p -vpre hq -vf '[in] delogo=x=1610:y=60:w=228:h=80:band=4:t=4:show=0 [delogo]; movie=../procomwater.png [watermark]; [delogo][watermark] overlay=1572:56, fade=t=in:st=4:d=0.75:alpha=0, fade=t=out:st=75:d=1.75:alpha=0 [out]' -f mp4 -pass 2 $INFILE-480p.mp4