cli-apps.org上淘到的好东西
时间:2010-04-22
来源:互联网
#!/bin/bash ##################################################################### # Version: 1.5.9 ##################################################################### # # This script takes screenshots of a movie # Depends on mplayer and imagemagick # # Made by Starlite <http://starl1te.wordpress.com/> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # ##################################################################### usage="Type shot -h for help" _help(){ echo -e "\nusage: shot [options] [file] ... [fileN]\n Options: -t <time> - Set time (in minutes) between screenshots; the number of screenshots is calculated automatically. -n <number> - Set a fixed number of screenshots to take. -m - Manual mode. Use arrows to FF/rewind. Press [S] to make screenshots. Quit mplayer to continue. -r <percent> - Change the size of the output image. Less than 40% is recommended. -s - Seed mode. Gives extra video and audio information. Removes spaces from filenames. -h - Display this help message\n If you don't like screenshots run the script again. This script depends on Mplayer and ImageMagic. Make sure you have them installed.\n Usage example: shot -n 25 -r 35% ~/films/film.avi\n" } shot(){ # Making screenshots... for i in `seq 1 $shots_number`; do randomiser=$RANDOM; let "randomiser %= 25" hop=`echo $[$shot_time*60*$i+$randomiser]` mplayer -ss $hop -noautosub -frames 1 -ao null -vo png "$file_path" &> /dev/null mv 00000001.png /tmp/shots/$i.png &> /dev/null echo -ne "Taking screenshot #${i} \r" done echo "Taking screenshots... [OK]" } # ====== first step is here! ^_^ ======== # Checking options... while getopts ":t:n:mr:sh" option do case $option in t ) shot_time=$OPTARG; opt=_time;; n ) shots_number=$OPTARG; opt=_num;; m ) opt=_manual;; h ) _help; opt=1; exit 1;; s ) seed=1;; r ) res=$OPTARG;; : ) echo "No argument given"; opt=1; exit 1;; * ) echo "Unknown option"; echo $usage; opt=1; exit 1;; esac done if [ "$res" == "" ]; then res=35%; fi if [ "$opt" == "" ]; then echo "No options given!"; echo $usage; exit 1; fi shift $(($OPTIND - 1)) if [ "$1" == "" ]; then echo "No file given!"; echo $usage; exit 1; fi mkdir /tmp/shots # Parsing files... while [ "$1" != "" ] do file_path=$1 file_name_ext=${file_path##*/} file_name=`echo "$file_name_ext" | sed '$s/....$//'` randomiser=0 quality=87 testpath=`dirname "$file_path" | cut -c1` if [ "$testpath" == "." ]||[ "$testpath" != "/" ]; then file_path=`pwd`/$file_path fi path=`pwd` cd "$path" echo -e "==> Processing file $file_name_ext..." # Getting video info... tmp="/tmp/shots/info" inf=`mplayer "$file_path" -identify -frames 1 -ao null -vo null 2>/dev/null | tee $tmp` length=`cat $tmp | grep LENGTH | sed -e 's/^.*=//' -e 's/[.].*//'` if [ "$length" == "" ]; then echo "Error! Can't get the length of the movie."; exit 1; fi # Calculating timing... if [ "$opt" == "_time" ]; then shots_number=`echo $[$length/60/$shot_time]` shot elif [ "$opt" == "_num" ]; then shot_time=`echo $[$length/$shots_number/60]` shot elif [ "$opt" == "_manual" ]; then cd /tmp/shots echo "Press [S] to make screenshots." mplayer -ao null -vf screenshot -quiet "$file_path" echo "Taking screenshots... [OK]" fi # Merging screenshots... echo -n "Putting screenshots together..." cd /tmp/shots/ montage -geometry +2+2 `ls *.png | sort -n` "$file_name".jpg mogrify -resize $res "$file_name".jpg echo " [OK]" echo -n "Getting video info..." size=`stat -c%s "$file_path"` size=`echo $[$size/1024/1024]` format=`cat $tmp | grep VIDEO: | cut -d " " -f 5` length=`echo $[$length/60]` # It's a tricky code here, it adds some info about the movie to the output image. echo -e "File name: $file_name_ext\nSize: $size Mb\nResolution: $format\nDuration: $length min." | convert -pointsize 16 -trim +repage text:- text.jpg convert "$file_name".jpg -quality $quality -splice 0x80 -draw 'image over 5,5 0,0 text.jpg' "$path/$file_name".jpg echo " [OK]" cd "$path" # Extra info if [ "$seed" == "1" ]; then #====Video==== width=`cat $tmp | grep VIDEO_WIDTH | sed -e 's/^.*=//'` height=`cat $tmp | grep VIDEO_HEIGHT | sed -e 's/^.*=//'` format=`cat $tmp | grep VIDEO_FORMAT | sed -e 's/^.*=//'` vcodec=`cat $tmp | grep VIDEO_CODEC | sed -e 's/^.*=//'` video="Format: $format\nCodec: $vcodec" size="Size: $width*$height" #====Audio==== rate=`cat $tmp | grep AUDIO_RATE | sed -e 's/^.*=//' | tail -n 1` acodec=`cat $tmp | grep afm: | sed -e 's/^.*: //'` lang1=`cat $tmp | grep ID_AID_0_LANG | sed -e 's/^.*=//'` lang2=`cat $tmp | grep ID_AID_1_LANG | sed -e 's/^.*=//'` audio="Audio: $rate $acodec" lang="Dub: 1: $lang1 2: $lang2" echo -e "\n$video\n$size\n$audio\n$lang" #filenames trimming file_name_sp=`echo "$file_name" | sed 's/ /_/g'` mv "$file_name".jpg "$file_name_sp".jpg &> /dev/null fi rm /tmp/shots/* echo shift done rm -r /tmp/shots echo "Done"
Transformers.Revenge.of.the.Fallen.2009.IMAX.Edition.jpg (178.9 KB, 163 次查看) |
作者: Havanna 发布时间: 2010-04-22
!
作者: curexubing 发布时间: 2010-04-22
作者: nacre 发布时间: 2010-04-22
作者: qiang_liu8183 发布时间: 2010-04-22
作者: jjj137 发布时间: 2010-04-22
作者: jjj137
用来做 AV 预览么……
|
话说,有没有能将某段视频截取为gif的脚本?
作者: dickeny 发布时间: 2010-04-22
作者: dickeny
You got it.
话说,有没有能将某段视频截取为gif的脚本? |
作者: bearson 发布时间: 2010-04-23
作者: jjj137
用来做 AV 预览么……
|
作者: Havanna 发布时间: 2010-04-23
作者: interskh 发布时间: 2010-04-24
折腾了大半天,总算把字幕给截图进去了。
作者: dickeny 发布时间: 2010-04-26
作者: dickeny
今天发布视频种子。刚好用上这脚本。
折腾了大半天,总算把字幕给截图进去了。 |
作者: sightok 发布时间: 2010-04-29
作者: sightok
求教如何折腾。谢谢!
|
option=""
for file in "$@"; do
[ -f "$file" ] && break
done
if [ -f "$file" ]; then # 匹配字幕
option="-ass -vf ass,expand=osd=1"
name=${file%.*}
# 检测srt字幕
sub=$(find *.srt 2>/dev/null | grep -F "$name" | head -n1)
[ -f "${name}.chs.srt" ] && sub="${name}.chs.srt"
if [ "$sub" != "" ]; then
option="$option -sub "$sub" -subcp enca:zh:cp936"
else
# 检测idx/sub字幕
sub=$(find *.idx 2>/dev/null | grep -F "$name" | head -n1)
[ -f "${name}.chs.idx" ] && sub="${name}.chs.idx"
[ "$sub" != "" ] && option="$option -vobsub "${sub%.idx}" "
fi
fi
$(which mplayer) $option "$@"
}
-ass -vf ass,expand=osd=1
作者: 沈觅仁 发布时间: 2010-04-29
作者: crazyrain 发布时间: 2010-05-12
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28