I am LAZY bones ? all linux

给 iPod 转视频的脚本

由于新买了个 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 20081101
#用于将视频转成 ipod touch / iphone 格式.右击文件使用
 
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=22050 -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%.*}.aas" ]];then
	CMD+=" -sub ""\"$PWD/${INFILE%.*}.aas\""
	P="找到字幕文件: ""${INFILE%.*}.aas"
fi
 
CMD+=" -o ""\"$SAVEDIR/${INFILE%.*}_ipod.mp4\""" ""\"$PWD/$INFILE\""
P+="\n\n保存目录: $SAVEDIR"
P+="\n\n是否继续?"
#echo "$CMD" >> ~/toIpod.log
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

截图:
工作截图

最后修改时间: 2009年05月31日 11:04

本文章发表于: 2008年08月12日 13:57 | 所属分类:iPod, 精华, 编程相关. | 您可以在此订阅本文章的所有评论. | 您也可以发表评论, 或从您的网站trackback.

44 个评论 关于: “给 iPod 转视频的脚本”

  1. 匿名 在 2008年08月13日 11:35 说:回复

    要先安装mencoder吧,要不然不能用

  2. bones7456 在 2008年08月13日 12:19 说:回复

    呃…mencoder肯定要先装上啊,还需要 zenity 呢…

  3. Corsair 在 2008年08月13日 12:47 说:回复

    呵呵,我以前曾经想搞类似的东西,不过最后没有写成脚本…
    http://corsairdoom.blogspot.com/2007/06/how-to-convert-video-for-ipod-freeway.html

  4. bones7456 在 2008年08月13日 13:19 说:回复

    @Corsair: 可能你搞得复杂了,音频视频分离以后再合成,我这里会出现声画不同步的情况.

  5. 匿名 在 2008年08月13日 13:26 说:回复

    字幕按照你说的做了后,还是出现乱码。。。。

  6. bones7456 在 2008年08月13日 13:41 说:回复

    @匿名: 那就要看你的字幕是啥编码的了,如果是GB2312的话,应该是可以解决的. 还有你用mplayer播放的时候正常吗? 顺便看看字体有没有中文,也就只有这么几个注意点了.

  7. 匿名 在 2008年08月13日 14:47 说:回复

    字幕编码是GB18030 mplayer播放正常 使用文泉驿正黑

  8. 匿名 在 2008年08月13日 14:49 说:回复

    字幕编码是GB18030 mplayer播放正常 使用文泉驿正黑,但是转出来后 就是乱码,是不是要在mencoder.conf里再添加一些配置信息,例如对使用字体的配置?
    但是我又不知道该怎么写这个配置。

  9. bones7456 在 2008年08月13日 15:24 说:回复

    可以 cp ~/.mplayer/config /.mplayer/mencoder.conf 试试.
    两者的配置文件差不多的格式.
    不行的话,就在命令行里面直接执行mencoder,加上脚本里面的参数,看看输出.

  10. 匿名 在 2008年08月13日 15:35 说:回复

    man 了一下mencoder mencoder.conf里再加入这几个就好了
    subcp=cp936
    subfont=/usr/share/fonts/truetype/wqy/wqy-zenhei.ttf
    subfont-encoding=unicode
    subfont-text-scale=3.5

    呵呵 再次谢谢bones7456给大家写了这脚本。

  11. bones7456 在 2008年08月13日 15:42 说:回复

    @匿名: 哈哈,恭喜~

  12. 匿名 在 2008年08月13日 15:57 说:回复

    对了,建议你增加一个批量转的脚本

  13. bones7456 在 2008年08月13日 16:02 说:回复

    @匿名: 个人觉得右键点比较方便,要批量的话,加个for循环也就可以了,呵呵.

  14. xiooli 在 2008年08月13日 23:15 说:回复

    哈哈,原来骨头偷偷的在干这个东东哈,怎么都不放出去呢?

    ps:eval “$CMD 2>&1” 这句里面后面那几个是什么意思啊?

  15. xiooli 在 2008年08月13日 23:17 说:回复

    哦,我明白了,是html里面的东西,显示在脚本里面叫我看半天没搞明白。。。。。。。。。。

  16. bones7456 在 2008年08月14日 11:38 说:回复

    @xiooli: 呵呵,什么叫”偷偷”啊? 论坛里我也发了,linuxtoy也发了,想不出还能发哪里了哦~~
    那个 >& 是WP给转的…唉….

  17. transtone 在 2008年08月15日 01:05 说:回复

    你好,能共享一下图片中的字体吗?

  18. bones7456 在 2008年08月15日 09:21 说:回复

    @transtone: 那就是文泉驿正黑啊, http://wenq.org/?ZenHei

  19. Ultimate Guide to Manage Your iPod under Linux : Revised 在 2008年09月11日 13:03 说:回复

    […] Here is the command we’re gonna run: (based on bones7456’s nautilus toiPod script) […]

  20. iPod touch 转换脚本 | 幻影泡沫 在 2008年09月27日 11:10 说:回复

    […] thank you,bones7456 […]

  21. drivel 在 2008年11月20日 22:35 说:回复

    botu@botu-laptop:~$ sh toIpod abc.flv
    : not found
    : not found
    toIpod: 13: CMD+=-lavcopts aglobal=1:vglobal=1:vcodec=mpeg4:vbitrate=600:acodec: not founditrate=128
    toIpod: 14: CMD+=-af lavcresample=24000 -vf dsize=480:320:0,scale=0:0,expand=48: not foundup -ofps 25 -srate 22050
    toIpod: 19: Syntax error: “elif” unexpected (expecting “then”)

    一直出错…

  22. bones7456 在 2008年11月20日 23:49 说:回复

    @drivel: 请把脚本保存为 ~/.gnome2/nautilus-scripts/toIpod 以后,在nautilus里面点右键执行.
    否则请确保shell是bash.

  23. drivel 在 2008年11月23日 00:34 说:回复

    的确是 bash 没错…

  24. drivel 在 2008年11月23日 00:35 说:回复

    bash: ./.gnome2/nautilus-scripts/toIpod:/bin/bash^M:损坏的解释器: 没有该文件或目录

  25. bones7456 在 2008年11月23日 20:35 说:回复

    @drivel: 可能你的系统里面没有 /bin/bash ?那你把第一行改成 # #!/bin/sh 试试?

  26. 另一根骨头 在 2009年02月26日 08:53 说:回复

    刚入手M8,正愁视频转换的问题来的,完美解决,哈哈

    • bones7456 在 2009年02月26日 09:34 说:回复

      呵呵,M8如何啊?屏幕分辨率多少来着?

  27. linux下转换rmvb到mp4 | Up Life 在 2009年11月01日 19:19 说:回复

    […] 新买了一个Ipod touch,转换视频格式是一件麻烦事,发现用ffmpeg转换rmvb视频的效果很不好,非常卡(可能是我没加参数的缘故)。改用mencoder,mencoder命令参数让人头疼,我不想浪费时间琢磨了,所以搜了一下,发现了这个帖子,不过作者的脚本我没运行成功,只好提取出核心的命令: mencoder -of lavf -lavfopts format=mp4 -oac lavc -ovc lavc -lavcopts aglobal=1:vglobal=1:vcodec=mpeg4:vbitrate=600:acodec=libfaac:abitrate=128 -af lavcresample=22050 -vf dsize=480:320:0,scale=0:0,expand=480:320,harddup -ofps 25 -srate 22050 -o output.mp4 input.rmvb 试了一下,效果不错。 […]

  28. Matty 在 2009年12月26日 19:27 说:回复

    为什么我右键toIpod一个电影(avi),出现“正在转换….”窗口又马上没了。文件夹里生成了.mp4的文件,但是大小是0.

    mencoder和zenity都装了,mplayer也能正常播放这个电影。
    我用的是amd64 ubuntu 9.10.
    请教下怎么回事谢谢!

  29. Matty 在 2009年12月26日 19:29 说:回复

    这个是terminal中结果:也是生成个0大小的文件就没下文了。
    wraith@wraith-desktop:~/.gnome2/nautilus-scripts$ sh toIpod ~/Ubuntu\ One/Share\ Folder/\[2012\].2012.R5.LINE.XviD-MDMA.CD1.avi
    toIpod: 14: CMD+=-lavcopts aglobal=1:vglobal=1:vcodec=mpeg4:vbitrate=600:acodec=libfaac:abitrate=128 : not found
    toIpod: 15: CMD+=-af lavcresample=22050 -vf dsize=480:320:0,scale=0:0,expand=480:320,harddup -ofps 25 -srate 22050 : not found
    toIpod: 26: [[: not found
    toIpod: 26: [[: not found
    toIpod: 26: [[: not found
    toIpod: 28: CMD+= -o “/home/wraith/.gnome2/nautilus-scripts//home/wraith/Ubuntu One/Share Folder/[2012].2012.R5.LINE.XviD-MDMA.CD1_ipod.mp4” “/home/wraith/.gnome2/nautilus-scripts//home/wraith/Ubuntu One/Share Folder/[2012].2012.R5.LINE.XviD-MDMA.CD1.avi”: not found
    toIpod: 29: P+=\n\n保存目录: /home/wraith/.gnome2/nautilus-scripts: not found
    toIpod: 30: P+=\n\n是否继续?: not found

    • bones7456 在 2009年12月26日 21:32 说:回复

      试试运行 ./toIpod ~/Ubuntu\ One/Share\ Folder/\[2012\].2012.R5.LINE.XviD-MDMA.CD1.avi
      然后确保 ls -l /bin/sh 是指向bash的,而不是dash。

      • Matty 在 2009年12月27日 09:37 说:回复

        ls -l /bin/sh 显示是指向dash。怎么把改成指向bash?

        还有这个指向是什么意思啊?用ubuntu刚几个月不懂这东西

        • bones7456 在 2009年12月27日 10:50 说:回复

          cd /bin
          rm sh
          ln -s bash sh

          这样就是bash了,这个就是一个默认的脚本解释器。

  30. milkliker 在 2009年12月29日 21:48 说:回复

    也遇到了和Matty同样的问题,我也是Ubuntu9.10,生成了大小为0的.mp4文件。

    望能得到LZ解答~ 谢谢了!

  31. milkliker 在 2009年12月30日 00:03 说:回复

    刚刚发现是没装faac,装好之后还是报错说,Audio LAVC, couldn’t find encoder for codec libfaac.

    后来看见一篇文章说把 -oac lavc 换成 -oac faac就OK了~

    谢谢LZ的无私分享!

    • bones7456 在 2009年12月30日 08:46 说:回复

      哦~这样也行啊?呵呵,谢了~

  32. UbuntuSkills | visense 在 2010年01月02日 10:09 说:回复

    […] 详情请查看出处。 […]

  33. Ubuntu 命令技巧 在 2010年05月01日 19:38 说:回复

    […] 详情请查看出处。 […]

  34. zcw159357 在 2010年05月08日 12:25 说:回复

    每次运行都一闪而过阿….只生成0大小的文件….sh指向bash没错阿….直接执行sh toIpod 123.flv
    出来的是一大串awk: warning: escape sequence `\(‘ treated as plain `(‘…..求解…..

    • bones7456 在 2010年05月08日 12:36 说:回复

      awk那个只是警告而已,应不会影响结果的。你要确认的是你的mencoder是否有足够的编码器和解码器,来搞定你输入的文件。你可以手工执行下程序生成的 mencoder 命令行试试。

      • zcw159357 在 2010年05月08日 12:50 说:回复

        请问 怎么确认mencoder是否有足够的编码器和解码器 手工执行下程序生成的 mencoder 命令行又怎么弄? 我还是菜鸟…

  35. zcw159357 在 2010年05月08日 14:44 说:回复

    执行“mencoder -of lavf -lavfopts format=mp4 -oac lavc -ovc lavc -lavcopts aglobal=1:vglobal=1:vcodec=mpeg4:vbitrate=600:acodec=libfaac:abitrate=128 -af lavcresample=22050 -vf dsize=480:320:0,scale=0:0,expand=480:320,harddup -ofps 25 -srate 22050 -o output.mp4 input.rmvb”么? 回显“Audio LAVC, couldn’t find encoder for codec libfaac.” 但我已经装了faac了阿…

    • bones7456 在 2010年05月08日 18:41 说:回复

      恩,就是这个原因了。mencoder找不到你的faac编码器,这个要根据你发行版的不同,用不同的解决办法的,多google吧,呵呵。

      • zcw159357 在 2010年05月09日 15:31 说:回复

        我是ubuntu 10.04的 怎么解决阿

发表评论