给 iPod touch 转视频的脚本

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

给 iPod touch 转视频的脚本

#1

帖子 bones7456 » 2008-08-12 15:07

原文: http://bones7456.blog.ubuntu.org.cn/2008/08/12/toipod/

由于新买了个 iPod touch,这几天认真钻研了下它的视频格式,搞了个nautilus脚本,使用mencoder做后端.
以后想把某个视频文件转成iPod的格式的话,直接在 nautilus 里面右键点文件-脚本-toIpod 就可以搞定了.
脚本的特点:
* 借助mplayer的强大,支持N多的源格式(已测试: avi rmvb mov flv).
* 支持srt/ass格式的外挂字幕.
* 自动缩放画面比例到适合ipod touch的480*320,如果是 ipod shuffle 之类的话,可以自己修改下脚本.
* 可视化的进度提示
* 转换速度较快
* 默认保存到当前目录,可修改脚本,输出到统一目录,方便管理.会自动加上 _ipod.mp4 的后缀名.
使用方法,保存以下脚本到 ~/.gnome2/nautilus-scripts/toIpod ,并加可执行权限.(或者这里下载)

PS: 如果压缩出来的字幕有乱码,请参照我以前的文章,建个 ~/.mplayer/mencoder.conf 文件,写上一行 subcp=cp936 就好了.

代码: 全选

#!/bin/bash
#filename: ~/.gnome2/nautilus-scripts/toIpod
#Copyright (c) 2008 bones7456 (bones7456<A>gmail<D>com)
#License: GPL
#version 20080812

SAVEDIR=`pwd`
#SAVEDIR="/data/movie"

INFILE="$1"
PWD=`pwd`
CMD="mencoder -of lavf -lavfopts format=mp4 -oac lavc -ovc lavc "
CMD+="-lavcopts aglobal=1:vglobal=1:vcodec=mpeg4:vbitrate=600:acodec=libfaac:abitrate=128 "
CMD+="-af lavcresample=24000 -vf dsize=480:320:0,scale=0:0,expand=480:320,harddup -ofps 25 -srate 22050 "
P="没有找到对应的字幕."
if [[ -f "${INFILE%.*}.srt" ]];then
	CMD+=" -sub ""\"$PWD/${INFILE%.*}.srt\""
	P="找到字幕文件: ""${INFILE%.*}.srt"
elif [[ -f "${INFILE%.*}.ssa" ]];then
	CMD+=" -sub ""\"$PWD/${INFILE%.*}.ssa\""
	P="找到字幕文件: ""${INFILE%.*}.ssa"
elif [[ -f "${INFILE%.*}.ass" ]];then
	CMD+=" -sub ""\"$PWD/${INFILE%.*}.ass\""
	P="找到字幕文件: ""${INFILE%.*}.ass"
fi

CMD+=" -o ""\"$SAVEDIR/${INFILE%.*}_ipod.mp4\""" ""\"$PWD/$INFILE\""
P+="\n\n保存目录: $SAVEDIR"
P+="\n\n是否继续?"
if ! zenity --question --text "$P" ; then
	exit 0;
fi

eval "$CMD 2>&1" |\
while read line; do echo $line |\
awk -F '[ :\(\)%]+' '/^Pos/{print "# 速度:",$5,"(点\"取消\"转入后台运行.)";print $4}' ; done |\
zenity --progress --title "正在转换..." --percentage=0 --auto-close --width=500
来个运行时的截图:
附件
screenshot3.png
关注我的blog: ε==3
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#2

帖子 eexpress » 2008-08-12 15:09

movie试过了?
● 鸣学
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#3

帖子 bones7456 » 2008-08-12 15:17

eexpress 写了:movie试过了?
没试过,但肯定不符合我的要求.
关注我的blog: ε==3
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#4

帖子 eexpress » 2008-08-12 15:20

如果可以的话,别人标准格式不更好嘛。省得你调整这些参数。你的这些参数,肯定是标准的?官方公布的?
试试嘛。别人都没设备。
● 鸣学
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#5

帖子 bones7456 » 2008-08-12 15:25

很多转换软件,号称支持 ipod,但都不是touch,而是分辨率是 320*240的 shuffle 之类.touch可是这个屏的两倍大.
而且它的格式就肯定标准?
反正我的这个,ipod能放,这不就OK了嘛~
而且怀疑支持外挂字幕合成的不多.
操作便利性也很难超越我这个.
我的是专用的,人家的是集大成的,性质不一样.
关注我的blog: ε==3
xiaoyong
帖子: 515
注册时间: 2006-05-20 10:38

#6

帖子 xiaoyong » 2008-08-14 12:07

http://www.howforge.com/how-to-convert- ... g-mencoder找到了一段mkv转avi的脚本,但我只会在命令行下执行,如何把它编成类似楼主右键执行的脚本呢?

原脚本, mkv2avi

代码: 全选

#!/bin/sh
INPUT=$1 OUTPUT=$2
mencoder $INPUT -oac mp3lame -lameopts vbr=3 -ovc xvid -xvidencopts fixed_quant=4 -of avi -o "$OUTPUT"
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#7

帖子 bones7456 » 2008-08-14 12:17

xiaoyong 写了:http://www.howforge.com/how-to-convert- ... g-mencoder找到了一段mkv转avi的脚本,但我只会在命令行下执行,如何把它编成类似楼主右键执行的脚本呢?

原脚本, mkv2avi

代码: 全选

#!/bin/sh
INPUT=$1 OUTPUT=$2
mencoder $INPUT -oac mp3lame -lameopts vbr=3 -ovc xvid -xvidencopts fixed_quant=4 -of avi -o "$OUTPUT"
保存到 ~/.gnome2/nautilus-scripts 目录就可以右键执行的.
里面的 $1 就是你点的那文件. 输出文件自动生成个文件名好了~
关注我的blog: ε==3
xiaoyong
帖子: 515
注册时间: 2006-05-20 10:38

#8

帖子 xiaoyong » 2008-08-14 13:26

里面的 $1 就是你点的那文件. 输出文件自动生成个文件名好了~
我对脚本一窍不通的,楼主能否为我加上去?

再谢!
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#9

帖子 bones7456 » 2008-08-14 14:21

代码: 全选

#!/bin/bash
#filename: ~/.gnome2/nautilus-scripts/toIpod
#Copyright (c) 2008 bones7456 (bones7456<A>gmail<D>com)
#License: GPL
#version 20080812

SAVEDIR=`pwd`
#SAVEDIR="/data/movie"

INFILE="$1"
PWD=`pwd`
CMD="mencoder -oac mp3lame -lameopts vbr=3 -ovc xvid -xvidencopts fixed_quant=4 -of avi "

P=""

CMD+=" -o ""\"$SAVEDIR/${INFILE%.*}.avi\""" ""\"$PWD/$INFILE\""
P+="\n\n保存目录: $SAVEDIR"
P+="\n\n是否继续?"
if ! zenity --question --text "$P" ; then
   exit 0;
fi

eval "$CMD 2>&1" |\
while read line; do echo $line |\
awk -F '[ :\(\)%]+' '/^Pos/{print "# 速度:",$5,"(点\"取消\"转入后台运行.)";print $4}' ; done |\
zenity --progress --title "正在转换..." --percentage=0 --auto-close --width=500 
用你说的参数在我那脚本上改的,没测试过,自己试试吧.
关注我的blog: ε==3
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

#10

帖子 xiooli » 2008-08-14 14:28

哈哈,骨头的那句点取消后台运行很强悍哦 :lol: ,取消了还在运行。。。。。。。。点取消把它废掉呗。
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#11

帖子 bones7456 » 2008-08-14 14:32

xiooli 写了:哈哈,骨头的那句点取消后台运行很强悍哦 :lol: ,取消了还在运行。。。。。。。。点取消把它废掉呗。
呃...其实是我不知道怎么禁掉"取消"那个按钮...所以写个注释,号称后台运行....
真要取消,自己pkill mencoder,嘿嘿...
关注我的blog: ε==3
xiaoyong
帖子: 515
注册时间: 2006-05-20 10:38

#12

帖子 xiaoyong » 2008-08-15 13:16

代码:

#!/bin/bash
#filename: ~/.gnome2/nautilus-scripts/toIpod
#Copyright (c) 2008 bones7456 (bones7456<A>gmail<D>com)
#License: GPL
#version 20080812

SAVEDIR=`pwd`
#SAVEDIR="/data/movie"

INFILE="$1"
PWD=`pwd`
CMD="mencoder -oac mp3lame -lameopts vbr=3 -ovc xvid -xvidencopts fixed_quant=4 -of avi "

P=""

CMD+=" -o ""\"$SAVEDIR/${INFILE%.*}.avi\""" ""\"$PWD/$INFILE\""
P+="\n\n保存目录: $SAVEDIR"
P+="\n\n是否继续?"
if ! zenity --question --text "$P" ; then
exit 0;
fi

eval "$CMD 2>&1" |\
while read line; do echo $line |\
awk -F '[ :\(\)%]+' '/^Pos/{print "# 速度:",$5,"(点\"取消\"转入后台运行.)";print $4}' ; done |\
zenity --progress --title "正在转换..." --percentage=0 --auto-close --width=500


用你说的参数在我那脚本上改的,没测试过,自己试试吧.
It works great. Thanks!
回复