2017年09月17日 Script which uses overlay with ffmpeg [長年日記]
_ overlaymovie.sh
Script which uses overlay with ffmpeg.
#! /bin/sh
#
if [ "X$1" = "X-h" -o "X$1" = "X--help" ]
then
echo "Usage: $0 -m main_movie -s sub_movie -o output_movie [options]"
echo "put sub_movie on main_movie into output_movie."
echo ""
echo "-m MAIN_MOVIE movie file for background"
echo "-s SUB_MOVIE movie file for overlay"
echo "-o OUTPUT_MOVIE movie file for output"
echo "-a AUDIO_INPUT ms for main and sub (default)"
echo " m for main"
echo " s for sub"
echo " none for no audio"
echo "-bv VIDEO_BITRATE bitrate for video (e.g. 2000k)"
echo "-ba AUDIO_BITRATE bitrate for audio (e.g. 192k)"
echo "-vm MAIN_VOLUME amplitude for main volume (e.g. 1.2)"
echo "-vs SUB_VOLUME amplitude for sub volume (e.g. 1.2)"
echo "-r FRAME_RATE frame rate (e.g. 29.97)"
echo "-szm MAIN_SIZE size for main movie (e.g. 1920x1080)"
echo "-szs SUB_SIZE size for sub movie (e.g. 960x540)"
echo "-stm MAIN_STARTTIME start time for main movie (e.g. HH:MM:SS[.mmm])"
echo "-etm MAIN_ENDTIME endtime for main movie (e.g. HH:MM:SS[.mmm])"
echo "-elm MAIN_ELAPSTIME elapstime for main movie (e.g. HH:MM:SS[.mmm])"
echo "-sts SUB_STARTTIME start time for sub movie (e.g. HH:MM:SS[.mmm])"
echo "-ets SUB_ENDTIME endtime for sub movie (e.g. HH:MM:SS[.mmm])"
echo "-els SUB_ELAPSTIME elapstime for sub movie (e.g. HH:MM:SS[.mmm])"
echo "-p SUB_POSITION position for sub movie"
echo " t, n for top"
echo " b, s for bottom"
echo " r, e for right"
echo " l, w for left"
echo " tr, ne for top-right"
echo " tl, nw for top-left"
echo " br, se for bottom-right (default)"
echo " bl, sw for bottom-left"
echo " c for center"
exit 0
fi
main_movie=""
sub_movie=""
output_movie=""
audio_input="ms"
video_bitrate="2000k"
audio_bitrate="192k"
main_volume=""
sub_volume=""
frame_rate="3000/1001"
main_size="1920x1080"
sub_size="960x540"
main_starttime="00:00:00"
main_endtime=""
main_elapstime=""
sub_starttime="00:00:00"
sub_endtime=""
sub_elapstime=""
sub_position="br"
while [ $# -ne 0 ]
do
case $1 in
-m)
shift
main_movie="$1"
;;
-s)
shift
sub_movie="$1"
;;
-o)
shift
output_movie="$1"
;;
-a)
shift
audio_input="$1"
;;
-bv)
shift
video_bitrate="$1"
;;
-ba)
shift
audio_bitrate="$1"
;;
-vm)
shift
vol=`echo 256 \* $1 | bc | sed -e 's/\..*$//'`
main_volume="-vol ${vol}"
;;
-vs)
shift
vol=`echo 256 \* $1 | bc | sed -e 's/\..*$//'`
sub_volume="-vol ${vol}"
;;
-r)
shift
frame_rate="$1"
;;
-szm)
shift
main_size="$1"
;;
-szs)
shift
sub_size="$1"
;;
-stm)
shift
main_starttime="$1"
;;
-etm)
shift
main_endtime="-to $1"
;;
-elm)
shift
main_elapstime="-t $1"
;;
-sts)
shift
sub_starttime="$1"
;;
-ets)
shift
sub_endtime="-to $1"
;;
-els)
shift
sub_elapstime="-t $1"
;;
-p)
shift
sub_position="$1"
;;
esac
shift
done
main_width=`echo ${main_size} | cut -dx -f1`
main_height=`echo ${main_size} | cut -dx -f2`
sub_width=`echo ${sub_size} | cut -dx -f1`
sub_height=`echo ${sub_size} | cut -dx -f2`
case ${sub_position} in
t|n)
sub_x=`echo "(${main_width} - ${sub_width}) / 2" | bc`
sub_y=0
;;
tr|ne)
sub_x=`echo "${main_width} - ${sub_width}" | bc`
sub_y=0
;;
r|e)
sub_x=`echo "${main_width} - ${sub_width}" | bc`
sub_y=`echo "(${main_height} - ${sub_height}) / 2" | bc`
;;
br|se)
sub_x=`echo "${main_width} - ${sub_width}" | bc`
sub_y=`echo "${main_height} - ${sub_height}" | bc`
;;
b|s)
sub_x=`echo "(${main_width} - ${sub_width}) / 2" | bc`
sub_y=`echo "${main_height} - ${sub_height}" | bc`
;;
bl|sw)
sub_x=0
sub_y=`echo "${main_height} - ${sub_height}" | bc`
;;
l|w)
sub_x=0
sub_y=`echo "(${main_height} - ${sub_height}) / 2" | bc`
;;
tl|nw)
sub_x=0
sub_y=0
;;
c)
sub_x=`echo "(${main_width} - ${sub_width}) / 2" | bc`
sub_y=`echo "(${main_height} - ${sub_height}) / 2" | bc`
;;
*)
sub_x=`echo "(${main_width} - ${sub_width}) / 2" | bc`
sub_y=`echo "(${main_height} - ${sub_height}) / 2" | bc`
;;
esac
ffmpeg -i ${main_movie} -strict -2 -ss ${main_starttime} ${main_endtime} ${main_elapstime} ${main_volume} -vn -y /tmp/overlaymovie.$$.1.tmp.wav.mp4
ffmpeg -i ${sub_movie} -strict -2 -ss ${sub_starttime} ${sub_endtime} ${sub_elapstime} ${sub_volume} -vn -y /tmp/overlaymovie.$$.2.tmp.wav.mp4
case ${audio_input} in
ms)
ffmpeg -i /tmp/overlaymovie.$$.1.tmp.wav.mp4 -i /tmp/overlaymovie.$$.2.tmp.wav.mp4 -strict -2 -acodec aac -b:a ${audio_bitrate} -filter_complex amix=inputs=2 -y /tmp/overlaymovie.$$.3.tmp.wav.mp4
;;
m)
ffmpeg -i /tmp/overlaymovie.$$.1.tmp.wav.mp4 -strict -2 -acodec aac -b:a ${audio_bitrate} -y /tmp/overlaymovie.$$.3.tmp.wav.mp4
;;
s)
ffmpeg -i /tmp/overlaymovie.$$.2.tmp.wav.mp4 -strict -2 -acodec aac -b:a ${audio_bitrate} -y /tmp/overlaymovie.$$.3.tmp.wav.mp4
;;
esac
ffmpeg -i ${main_movie} -strict -2 -ss ${main_starttime} ${main_endtime} ${main_elapstime} -s ${main_size} -an -y /tmp/overlaymovie.$$.4.tmp.mp4
ffmpeg -i ${sub_movie} -strict -2 -ss ${sub_starttime} ${sub_endtime} ${sub_elapstime} -s ${sub_size} -an -y /tmp/overlaymovie.$$.5.tmp.mp4
ffmpeg -i /tmp/overlaymovie.$$.4.tmp.mp4 -i /tmp/overlaymovie.$$.5.tmp.mp4 -strict -2 -vcodec h264 -b:v ${video_bitrate} -r ${frame_rate} -filter_complex "[0:v][1:v]overlay=${sub_x}:${sub_y}" -y /tmp/overlaymovie.$$.6.tmp.mp4
if [ "X${audio_input}" = "Xnone" ]
then
ffmpeg -i /tmp/overlaymovie.$$.6.tmp.mp4 -strict -2 -vcodec copy -y ${output_movie}
else
ffmpeg -i /tmp/overlaymovie.$$.6.tmp.mp4 -i /tmp/overlaymovie.$$.3.tmp.wav.mp4 -strict -2 -vcodec copy -acodec copy -y ${output_movie}
fi
rm -f /tmp/overlaymovie.*.*.tmp.*
[ツッコミを入れる]
2017年09月21日 Script to merge movies left-right or top-bottom [長年日記]
_ mergemovies.sh
Script to merge two movies into left-right or top-bottom.
#! /bin/sh
#
if [ "X$1" = "X-h" -o "X$1" = "X--help" ]
then
echo "Usage: $0 -l left_movie -r right_movie -o output_movie [options]"
echo " $0 -t top_movie -b bottom_movie -o output_movie [options]"
echo "Merge movies into output_movie."
echo ""
echo "-l LEFT_MOVIE movie file for left side"
echo "-r RIGHT_MOVIE movie file for right side"
echo "-t TOP_MOVIE movie file for top side"
echo "-b BOTTOM_MOVIE movie file for bottom side"
echo "-o OUTPUT_MOVIE movie file for output"
echo "-a AUDIO_INPUT lr for left and right (default)"
echo " l for left"
echo " r for right"
echo " tb for top and bottom (default)"
echo " t for top"
echo " b for bottom"
echo " none for no audio"
echo "-bv VIDEO_BITRATE bitrate for video (e.g. 2000k)"
echo "-ba AUDIO_BITRATE bitrate for audio (e.g. 192k)"
echo "-vl VOLUME amplitude for left volume (e.g. 1.2)"
echo " -vr for right"
echo " -vt for top"
echo " -vb for bottom"
echo "-fr FRAME_RATE frame rate (e.g. 29.97)"
echo "-sz SIZE size for output (e.g. 1920x1080)"
echo "-stl STARTTIME start time for left movie (e.g. HH:MM:SS[.mmm])"
echo " -str for right"
echo " -stt for top"
echo " -stb for bottom"
echo "-etl ENDTIME endtime for left movie (e.g. HH:MM:SS[.mmm])"
echo " -etr for right"
echo " -ett for top"
echo " -etb for bottom"
echo "-ell ELAPSTIME elapstime for left movie (e.g. HH:MM:SS[.mmm])"
echo " -elr for right"
echo " -elt for top"
echo " -elb for bottom"
exit 0
fi
function preconvert(){
input=$1; shift
output=$1; shift
pw=$1; shift
ph=$1; shift
vbitrate=$1; shift
abitrate=$1; shift
starttime=$1; shift
endtime_with_opt=$1; shift
volume=$1; shift
framerate=$1
iwh=`ffmpeg -i ${input} 2>&1 | egrep 'Stream.*Video' | sed -e 's/^.* \([0-9][0-9]*x[0-9][0-9]*\)[^0-9].*$/\1/g'`
iw=`echo ${iwh} | cut -dx -f1`
ih=`echo ${iwh} | cut -dx -f2`
cond=`echo ${iw}*${ph}/${ih}/${pw} | bc`
if [ ${cond} -gt 0 ]
then
sw=${pw}
sh=`echo ${pw}*${ih}/${iw} | bc`
padw=0
padh=`echo "(${ph} - ${sh})/2" | bc`
else
sh=${ph}
sw=`echo ${ph}*${iw}/${ih} | bc`
padh=0
padw=`echo "(${pw} - ${sw})/2" | bc`
fi
ffmpeg -i ${input} -ss ${starttime} ${endtime_with_opt} -vcodec h264 -b:v ${vbitrate} -r ${framerate} -strict -2 -acodec aac -b:a ${abitrate} -vol ${volume} -filter_complex "[0:v]scale=${sw}:${sh},pad=${pw}:${ph}:${padw}:${padh}" -y ${output}
}
left_movie=""
right_movie=""
top_movie=""
bottom_movie=""
output_movie=""
audio_input=""
video_bitrate="2000k"
audio_bitrate="192k"
left_volume="256"
right_volume="256"
top_volume="256"
bottom_volume="256"
frame_rate="3000/1001"
size="640x360"
left_starttime="00:00:00"
left_endelapstime="-t 24:00:00"
right_starttime="00:00:00"
right_endelapstime="-t 24:00:00"
top_starttime="00:00:00"
top_endelapstime="-t 24:00:00"
bottom_starttime="00:00:00"
bottom_endelapstime="-t 24:00:00"
while [ $# -ne 0 ]
do
case $1 in
-l)
shift
left_movie="$1"
;;
-r)
shift
right_movie="$1"
;;
-t)
shift
top_movie="$1"
;;
-b)
shift
bottom_movie="$1"
;;
-o)
shift
output_movie="$1"
;;
-a)
shift
audio_input="$1"
;;
-bv)
shift
video_bitrate="$1"
;;
-ba)
shift
audio_bitrate="$1"
;;
-vl)
shift
vol=`echo 256 \* $1 | bc | sed -e 's/\..*$//'`
left_volume="${vol}"
;;
-vr)
shift
vol=`echo 256 \* $1 | bc | sed -e 's/\..*$//'`
right_volume="${vol}"
;;
-vt)
shift
vol=`echo 256 \* $1 | bc | sed -e 's/\..*$//'`
top_volume="${vol}"
;;
-vb)
shift
vol=`echo 256 \* $1 | bc | sed -e 's/\..*$//'`
bottom_volume="${vol}"
;;
-fr)
shift
frame_rate="$1"
;;
-sz)
shift
size="$1"
;;
-stl)
shift
left_starttime="$1"
;;
-etl)
shift
left_endelapstime="-to $1"
;;
-ell)
shift
left_endelapstime="-t $1"
;;
-str)
shift
right_starttime="$1"
;;
-etr)
shift
right_endelapstime="-to $1"
;;
-elr)
shift
right_endelapstime="-t $1"
;;
-stt)
shift
top_starttime="$1"
;;
-ett)
shift
top_endelapstime="-to $1"
;;
-elt)
shift
top_endelapstime="-t $1"
;;
-stb)
shift
bottom_starttime="$1"
;;
-etb)
shift
bottom_endelapstime="-to $1"
;;
-elb)
shift
bottom_endelapstime="-t $1"
;;
esac
shift
done
if [ "X${audio_input}" = "X" ]
then
if [ "X${left_movie}" = "X" ]
then
audio_input="tb"
else
audio_input="lr"
fi
fi
pw=`echo ${size} | cut -dx -f1`
ph=`echo ${size} | cut -dx -f2`
if [ "X${left_movie}" = "X" ]
then
half_ph=`echo ${ph}/2 | bc`
preconvert ${top_movie} /tmp/mergemovie.$$.1.tmp.mp4 ${pw} ${half_ph} ${video_bitrate} ${audio_bitrate} ${top_starttime} "${top_endelapstime}" ${top_volume} ${frame_rate}
preconvert ${bottom_movie} /tmp/mergemovie.$$.2.tmp.mp4 ${pw} ${half_ph} ${video_bitrate} ${audio_bitrate} ${bottom_starttime} "${bottom_endelapstime}" ${bottom_volume} ${frame_rate}
else
half_pw=`echo ${pw}/2 | bc`
preconvert ${left_movie} /tmp/mergemovie.$$.1.tmp.mp4 ${half_pw} ${ph} ${video_bitrate} ${audio_bitrate} ${left_starttime} "${left_endelapstime}" ${left_volume} ${frame_rate}
preconvert ${right_movie} /tmp/mergemovie.$$.2.tmp.mp4 ${half_pw} ${ph} ${video_bitrate} ${audio_bitrate} ${right_starttime} "${right_endelapstime}" ${right_volume} ${frame_rate}
fi
ffmpeg -i /tmp/mergemovie.$$.1.tmp.mp4 -strict -2 -acodec copy -vn -y /tmp/mergemovie.$$.3.tmp.wav.mp4
ffmpeg -i /tmp/mergemovie.$$.2.tmp.mp4 -strict -2 -acodec copy -vn -y /tmp/mergemovie.$$.4.tmp.wav.mp4
case ${audio_input} in
lr|tb)
ffmpeg -i /tmp/mergemovie.$$.3.tmp.wav.mp4 -i /tmp/mergemovie.$$.4.tmp.wav.mp4 -strict -2 -acodec aac -b:a ${audio_bitrate} -filter_complex amix=inputs=2 -y /tmp/mergemovie.$$.5.tmp.wav.mp4
;;
l|t)
mv /tmp/mergemovie.$$.3.tmp.wav.mp4 /tmp/mergemovie.$$.5.tmp.wav.mp4
;;
r|b)
mv /tmp/mergemovie.$$.4.tmp.wav.mp4 /tmp/mergemovie.$$.5.tmp.wav.mp4
;;
esac
ffmpeg -i /tmp/mergemovie.$$.1.tmp.mp4 -vcodec copy -strict -2 -an -y /tmp/mergemovie.$$.6.tmp.mp4
ffmpeg -i /tmp/mergemovie.$$.2.tmp.mp4 -vcodec copy -strict -2 -an -y /tmp/mergemovie.$$.7.tmp.mp4
if [ "X${left_movie}" = "X" ]
then
ffmpeg -i /tmp/mergemovie.$$.6.tmp.mp4 -i /tmp/mergemovie.$$.7.tmp.mp4 -strict -2 -vcodec h264 -b:v ${video_bitrate} -filter_complex "[0:v]pad=iw:ih*2[v1];[v1][1:v]overlay=0:H/2" -y /tmp/mergemovie.$$.8.tmp.mp4
else
ffmpeg -i /tmp/mergemovie.$$.6.tmp.mp4 -i /tmp/mergemovie.$$.7.tmp.mp4 -strict -2 -vcodec h264 -b:v ${video_bitrate} -filter_complex "[0:v]pad=iw*2:ih[v1];[v1][1:v]overlay=W/2:0" -y /tmp/mergemovie.$$.8.tmp.mp4
fi
if [ "X${audio_input}" = "Xnone" ]
then
mv /tmp/mergemovie.$$.8.tmp.mp4 ${output_movie}
else
ffmpeg -i /tmp/mergemovie.$$.8.tmp.mp4 -i /tmp/mergemovie.$$.5.tmp.wav.mp4 -strict -2 -vcodec copy -acodec copy -y ${output_movie}
fi
rm -f /tmp/mergemovie.$$.*.tmp.mp4 /tmp/mergemovie.$$.*.tmp.wav.mp4
[ツッコミを入れる]
2017年09月24日 How to read QRCode by using zbar-0.10 on Slackware-14.2 [長年日記]
_ Build of zbar-0.10 on Slackware-14.2
- ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h
- tar xvf zbar-0.10.tar.bz2
- cd zbar-0.10
- ./configure && make && make install
- rm /usr/include/linux/videodev.h
_ qrcode.sh
#! /bin/sh
LD_PRELOAD=/usr/lib64/libv4l/v4l1compat.so zbarcam /dev/video0 |\
while :
do
read i
if [ "X$i" = "X" ]
then
break
else
isUrl=`echo $i | egrep 'https*://'`
if [ "X${isUrl}" != "X" ]
then
url=`echo $i | sed -e 's/^.*http/http/'`
echo detected URL is ${url}
/usr/local/firefox/firefox/firefox ${url}
else
echo Ignore $i
fi
fi
done
[ツッコミを入れる]