首页 › 分页: › mplayer-wrapper (bash)

mplayer-wrapper (bash)

mplayer-wrapper是MPlayer的一个简单的命令行前端。在实现一些功能的基础上,尽可能保证与原有的mplayer命令行界面保持一致。

下载

https://github.com/sunbing81/scripts/blob/master/mplayer.sh

功能

  • 视频填充:扩展/填充视频,使得字幕和OSD显示在屏幕上下的黑边上(查看截图);
  • Playback resume:从上次结束的位置继续播放。注意,只有视频处于时间轴100秒之后以及时间轴95%之前,才会在退出时记录当前播放位置;
  • 字幕自动下载:根据影片文件名生成查询词,从射手网(http://www.shooter.com.cn)查询并下载字幕(目前支持TLF、CHD的命名格式;欢迎留言写下不同ripper的命名格式,以便添加支持);
  • 连续播放:根据文件名进行猜测生成播放列表,从而自动播放文件名连续的多个文件(例如“十二国记第03集”、“十二国记第04集”)。注意:如果用快捷键“q”退出mplayer,播放列表中的后继文件将不再播放(即脚本将退出);如果要结束当前视频,但同时希望继续播放列表中的文件,请用“PgDn”或右方向键快进到视频结束。

依赖

  • GNU awk:文本处理
  • xrandr:屏幕分辨率检测
  • unrar:解压缩字幕文件
  • wget:查询及下载字幕
  • js/jsc/gjs:javascript解释器,用于生成下载链接(js来自spidermonkey,jsc来自webkit-gtk,gjs来自gjs)

使用

  • 可以将脚本改名为”mplayer”,该脚本与mplayer的命令行界面基本相同
  • 如系统中没有”midentify”,可以做一个名为”midentify”的符号链接
  • 输入
    mplayer Blood.Diamond.2006.BDRip.X264-TLF\(C7ADDAC0\).mkv

    一切OK;

  • 另外,可以使用
    mplayer -debug Blood.Diamond.2006.BDRip.X264-TLF\(C7ADDAC0\).mkv

    它在1024×768屏幕上的输出是

    /usr/bin/mplayer -ass -embeddedfonts -ass-font-scale 2.821181 -ass-use-margins -ass-top-margin 174 -ass-bottom-margin 174 -subfont-autoscale 2 -vf-add pp=ac -osdlevel 3 -unrarexec /usr/bin/unrar -slave -input file=/home/subi/.cache/mplayer/fifo Blood.Diamond.2006.BDRip.X264-TLF(C7ADDAC0).mkv

    在1680×1050屏幕上的输出是

    /usr/bin/mplayer -ass -embeddedfonts -ass-font-scale 1.719577 -ass-use-margins -ass-top-margin 109 -ass-bottom-margin 109 -subfont-autoscale 2 -vf-add pp=ac -osdlevel 3 -unrarexec /usr/bin/unrar -slave -input file=/home/subi/.cache/mplayer/fifo Blood.Diamond.2006.BDRip.X264-TLF(C7ADDAC0).mkv

28 条评论。[ 发表评论 ]

  1. 躺在桌子上

    能写个中文的说明吗?是在看不懂英文。

  2. @躺在桌子上
    下半部分不就是中文?

  3. @bones7456
    刚写的,呵呵

  4. [...] This post was mentioned on Twitter by ひのと and Weeker {BSD}, Eric Shi. Eric Shi said: http://gosubi.me/adow/mplayer-wrapper, 这个东东支持mplayer自动抓字幕,回头来试试。 [...]

  5. 刚试了下移动硬盘里的
    Amelie.2001.BDRip.X264-TLF.mkv
    木有效果诶.
    终端输入mplayer ‘Amelie.2001.BDRip.X264-TLF.mkv’
    返回bt_audio_service_open: connect() failed: Connection refused (111)
    bt_audio_service_open: connect() failed: Connection refused (111)
    bt_audio_service_open: connect() failed: Connection refused (111)
    bt_audio_service_open: connect() failed: Connection refused (111)
    bt_audio_service_open: connect() failed: Connection refused (111)
    bt_audio_service_open: connect() failed: Connection refused (111)
    bt_audio_service_open: connect() failed: Connection refused (111)
    bt_audio_service_open: connect() failed: Connection refused (111)
    bt_audio_service_open: connect() failed: Connection refused (111)
    bt_audio_service_open: connect() failed: Connection refused (111)
    bt_audio_service_open: connect() failed: Connection refused (111)
    bt_audio_service_open: connect() failed: Connection refused (111)
    MPlayer SVN-r1.0~rc3+svn20090426-4.4.3 (C) 2000-2009 MPlayer Team
    mplayer: could not connect to socket
    mplayer: No such file or directory
    Failed to open LIRC support. You will not be able to use your remote control.

    Playing Amelie.2001.BDRip.X264-TLF.mkv.
    File not found: ‘Amelie.2001.BDRip.X264-TLF.mkv’
    Failed to open Amelie.2001.BDRip.X264-TLF.mkv.

    Exiting… (End of file)
    我的联网是没问题的

  6. Unknown option on the command line: -p”
    Error parsing option on the command line: -p”
    MPlayer SVN-r29142-4.4.3 (C) 2000-2009 MPlayer Team

    debian testing 用该脚本出现上面的错误,不知怎么回事…

  7. @iwtctw
    Playing Amelie.2001.BDRip.X264-TLF.mkv.
    File not found: ‘Amelie.2001.BDRip.X264-TLF.mkv’
    Failed to open Amelie.2001.BDRip.X264-TLF.mkv.

    这几行,路径不对吧?mplayer没找到你的文件

  8. @ssjjsb
    命令行是什么?在原来你的命令后加上-debug看看输出结果什么

  9. mplayer -debug video_sf.flv
    ===============================================================================
    Global setups:
    FILES=”video_sf.flv”
    ORI_OPTS=”"

    EXPAND=”no”
    EXPAND_METHOD=”noass”
    RESUME=”no”
    FETCH=”no”
    UNRAR=”no”
    ===============================================================================
    Local setup for “video_sf.flv”
    EXPAND_LOCAL=”no”
    EXPAND_METHOD_LOCAL=”noass”
    RESUME_LOCAL=”no”
    FETCH_LOCAL=”no”
    UNRAR_LOCAL=”no”

    /usr/bin/mplayer -heartbeat-cmd “gnome-screensaver-command -p” -slave -input file=/home/nk/.cache/mplayer/fifo video_sf.flv

    如果复制上面的命令倒是能播放..

  10. ssjjsb :
    Unknown option on the command line: -p”
    Error parsing option on the command line: -p”
    MPlayer SVN-r29142-4.4.3 (C) 2000-2009 MPlayer Team
    debian testing 用该脚本出现上面的错误,不知怎么回事…

    我也碰到这个问题了。
    Global setups:
    FILES=”/mnt/windows/h/download/morningsun.rmvb”
    ORI_OPTS=”"

    EXPAND=”yes”
    EXPAND_METHOD=”ass”
    RESUME=”yes”
    FETCH=”yes”
    UNRAR=”yes”
    ===============================================================================
    Local setup for “/mnt/windows/h/download/morningsun.rmvb”
    EXPAND_LOCAL=”yes”
    EXPAND_METHOD_LOCAL=”ass”
    RESUME_LOCAL=”yes”
    FETCH_LOCAL=”yes”
    UNRAR_LOCAL=”yes”
    gawk: 命令行:31: (FILENAME=/proc/self/fd/63 FNR=2) 致命错误: 试图访问字段 -1
    QUERY=”"

    /usr/local/bin/mplayer -heartbeat-cmd “gnome-screensaver-command -p” -ass -embeddedfonts -ass-font-scale 1.250000 -subfont-autoscale 2 -vf-add pp=ac -osdlevel 3 -unrarexec /usr/bin/unrar -slave -input file=/home/lzuxz/.cache/mplayer/fifo /mnt/windows/h/download/morningsun.rmvb

  11. @ssjjsb
    Quick fix: 把脚本245行处的$(stop_screensaver)删掉应该可以。

    原来的代码没事,但后来改来改去这里的字符串和参数处理出问题了,而且我机器上没有屏保,一直没发现这个bug。

  12. @subi
    这样可以播放了.但是不能Playback resume.而且有的rmvb格式文件不能自动视频填充.

    ps:在debian testing 中没找到webkit-gtk,我系统中没有 jsc 命令,不知道和这有没有关系.

    pps:请问一下”如系统中没有”midentify”,可以做一个名为”midentify”的软链接”,这句是什么意思?作midentify和谁的软链接?

  13. @ssjjsb
    请下载最新的0.4.3版,应该能正确处理-heartbeat-cmd “gnome-screensaver-command -p” 参数的问题。

    不能resume的话,请先试试0.4.3版,看看问题是否还存在;另外,只有当前播放位置大于100秒或小于影片时长的95%时才会记录当前播放位置,所以请快进2分钟左右测试resume功能。

    rmvb不能填充是正常的,因为大部分rmvb都是硬字幕(字幕实际上是画面图像的一部分,这时候不可能把字幕挪出来的),而且大部分宽屏rmvb影片都被预先填充为4:3的了。最理想的还是看那些比较正规ripper的作品,比如TLF、XTM等等。

  14. @ssjjsb
    找半天,debian官方的确没有包给出了jsc……不过jsc只是下字幕时才用,不影响别的功能

    midentify是mplayer提供的一个工具,可以用来检测媒体文件的一些信息,比如编码、时间、长度等等。一般的发行版都会装上midentify的,但也有可能没装。如果需要这个工具,创建软链接midentify指向这个mplayer脚本就可以。

  15. @subi
    404 Not Found
    The requested URL /file/mplayer-wrapper-0.4.3 does not exist.

    403 Permission Denied
    You do not have permission for this request /file/mplayer-wrapper-latest

    ……

  16. ssjjsb :

    @subi
    404 Not Found
    The requested URL /file/mplayer-wrapper-0.4.3 does not exist.

    403 Permission Denied
    You do not have permission for this request /file/mplayer-wrapper-latest

    ……

    Link fixed.

  17. @subi
    这样可以播放了,谢谢.但是有两个问题,一是我放avi电影也不能自动视频填充.二是快进2分钟后还是没有resume功能。可能和我的mplayer有关,开着compiz, mplayer一直不能调亮度和对比度. 这两个功能如果不能用,我还是继续用原先的mplayer吧..

  18. ssjjsb :

    mplayer -debug video_sf.flv
    ===============================================================================
    Global setups:
    FILES=”video_sf.flv”
    ORI_OPTS=””

    EXPAND=”no”
    EXPAND_METHOD=”noass”
    RESUME=”no”
    FETCH=”no”
    UNRAR=”no”

    按debug的输出看,所有的附加功能全部禁用了。你机器上没装gawk吧?你用的是ubuntu?好象只有ubuntu是用mawk代替gawk的。

  19. @subi
    赞一个!我用的debian testing, sudo aptitude install gawk 装上gawk以后就可以了.可以视频填充,可以resume.

    ps:我有个rmvb格式视频不能resume,应该和文件名有空格有关,我把名字中的空格去掉就可以看了.这一点如果能改进就太好了:)

  20. video_play -debug I.Am.Legend.Blu-Ray.Rip.a720.X264.DD51.F@Silu.mkv
    Warning unknown option expand at line 9
    ===============================================================================
    Global setups:
    FILES=”I.Am.Legend.Blu-Ray.Rip.a720.X264.DD51.F@Silu.mkv”
    ORI_OPTS=”"

    EXPAND=”yes”
    EXPAND_METHOD=”ass”
    RESUME=”yes”
    FETCH=”yes”
    UNRAR=”yes”
    ===============================================================================
    Local setup for “I.Am.Legend.Blu-Ray.Rip.a720.X264.DD51.F@Silu.mkv”
    EXPAND_LOCAL=”yes”
    EXPAND_METHOD_LOCAL=”ass”
    RESUME_LOCAL=”yes”
    FETCH_LOCAL=”yes”
    UNRAR_LOCAL=”yes”
    QUERY=”"

    /usr/bin/mplayer -ass -embeddedfonts -ass-font-scale 2.127978 -ass-use-margins -ass-top-margin 95 -ass-bottom-margin 95 -subfont-autoscale 2 -vf-add pp=ac -osdlevel 3 -ss 151 -noquiet-ss 199 -noquiet -unrarexec /usr/bin/unrar -slave -input file=/home/feng/.cache/mplayer/fifo I.Am.Legend.Blu-Ray.Rip.a720.X264.DD51.F@Silu.mkv

  21. [...] 先说web API。如果影片的名称很规范,比如像“无耻混蛋.Inglourious.Basterds.2009.BDRip.X264-TLF(548063E9).mkv”,直接提交“影片名称+影片源+封装格式+ripper小组”进行查询匹配是非常精确的——基本上能够保证如果返回值不空,那么第一匹配就是正确结果。这也是我实现mplayer-wrapper里自动字幕下载的基本思路。 [...]

  22. @feng
    这个错误的原因是记录播放位置的缓存文件存了两次该文件的位置,0.4.4已修复

  23. @ssjjsb
    已修复(0.4.4)

  24. yjcsuper@yjcsuper-laptop:/usr/local/bin$ mplayer-wrapper -debug ‘/media/sda6/nhk/[道兰][NHK纪录片]称霸世界最高峰赛事-为本田赌上全部的年轻人们.mkv’
    ===============================================================================
    Global setups:
    FILES=”/media/sda6/nhk/[道兰][NHK纪录片]称霸世界最高峰赛事-为本田赌上全部的年轻人们.mkv”
    ORI_OPTS=”"

    EXPAND=”yes”
    EXPAND_METHOD=”ass”
    RESUME=”yes”
    FETCH=”no”
    UNRAR=”yes”
    ===============================================================================
    Local setup for “/media/sda6/nhk/[道兰][NHK纪录片]称霸世界最高峰赛事-为本田赌上全部的年轻人们.mkv”
    EXPAND_LOCAL=”yes”
    EXPAND_METHOD_LOCAL=”ass”
    RESUME_LOCAL=”yes”
    FETCH_LOCAL=”no”
    UNRAR_LOCAL=”yes”
    QUERY=”"

    /usr/bin/mplayer -ass -embeddedfonts -ass-font-scale 1.250000 -subfont-autoscale 2 -ss 0 -unrarexec /usr/bin/unrar -slave -input file=/home/yjcsuper/.cache/mplayer/fifo -vf-add pp=ac -osdlevel 3 -noquiet -heartbeat-cmd gnome-screensaver-command -p /media/sda6/nhk/[道兰][NHK纪录片]称霸世界最高峰赛事-为本田赌上全部的年轻人们.mkv

    可以下载字幕但字幕是乱码.我用的是ubuntu 10.04, gawk和mawk 都装了,怎么还是
    FETCH_LOCAL=”no”
    请楼主帮忙看看是怎么回事

  25. 应该是不能给这种文件名下载字幕的,因为我基本上只看TLF出的电影,偷懒起见只写了给TLF电影下字幕的功能。。。

    字幕是乱码的话,应该是subcp设置的问题,你可以试试subcp=enca:zh:utf-8;或者subcp=cp936

  26. 谢谢楼主的回复,但希望楼主的这个好东西能够使更多人使用.

  27. [...] mplayer-wrapper [...]

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">