Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
(hiatus) In time, an HTPC interface for downloaded video files
Python
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
LICENSE
README
hal.py
main.py

README

Animu Player v0.3
By: Stephan Sokolow (deitarion/SSokolow)

Animu Player is a minimal but pleasantly helpful PyGTK wrapper for MPlayer. I'd try to convince you about it's benefits,
but you have to try it to understand how nice it is. Unfortunately, some of the nicest improvements in software can come
from a collection of small changes.

Examples include:
- Remembering which video files you've already played and skipping them.
- Retaining window dimensions and state between video files.
- Putting the filename in the window title and giving it a proper icon.
- Automatically advancing to the next file when the current one finishes.
- Drawing a fine, simple, and eye-pleasing border around the video frame.
- Displaying a directory chooser if no arguments are specified so that one may run the program from a menu entry or desktop icon.
- Offering a --force-dir option which prunes the file portion off given paths to enable users to set Animu Player as their
  double-click action for video files while still retaining directory-oriented features such as ignoring files that have already
  been watched before.
- Reading the ~/.mplayer/input.conf file to duplicate the key bindings provided by your un-wrapped MPlayer binary.

There are a few known bugs, but only the first one is anything near major:
- The wmv9dmo codec and XEmbed don't get along, resulting in the red color channel being misaligned. Thankfully, I can't think
  of any anime which is encoded in wmv9. (It's all MPEG, DivX/XviD, H.264, FLV, or RMVB as far as I know)
- Aspect ratio auto-detection is currently somewhat broken so the default is to pad out the video feed with black bars.
  However, my personal favorite is to manually use --aspect-ratio so the frame will fit the video, rather than the screen.
- If you mix and match your MPlayer fullscreen keybinding and your Window Manager fullscreen keybinding, you may have to
  press the MPlayer binding twice to get it to work. This is because it does not yet recognize state changes initiated by
  the window manager.
- Rolling the scroll wheel quickly doesn't produce as many MPlayer seeks as it should.
- Binding the fullscreen toggle to a mouse button doesn't work because those events are sent directly to MPlayer and MPlayer has
  no control over it's window state when wrapped via XEmbed.
- For some reason, MPlayer will sometimes send the wrong-sized video stream. Toggling fullscreen or resizing the window will
  fix this but I'm not sure where the bug lies except that it's somehow related to my use of XEmbed.

System Requirements:
- A UNIX-like operating system. (eg. Linux, *BSD, etc.)
- An X11 server with the XEmbed extension (eg. X.org, XFree86)
- Python 2.4 or higher
- A reasonably recent version of PyGTK. (I don't have time to figure out the exact version at the moment)
- MPlayer (In the path and named "mplayer")

PLANNED Optional Requirements:
- python-dbus (Minimum version unknown) and HAL 0.5.7.1 or newer (Untested on older versions)

For further instruction, please use the --help option. Enjoy. :)

TODO:
- Split Animu Player into multiple files. (Perhaps main, PlayFrame, DirSelector (two GTK+ Windows), and MPlayerWrapper?)
- Ensure that optical drives have spun up before un-pausing.
- Add a .desktop file which associates Animu Player with inode/directory and an install script to set it up.
- Add a mode which allows Animu Player to be a used as a playlist generator for any self-GUIing player which can auto-exit.
- Do some experimentation and brainstorming on the idea of a minimally invasive pop-up guide to keyboard bindings.
- Some kind of bookmarking system and some optimizations for accessing removable media.
    - Some kind of quick GUI menu for when no args are provided.
    - Check whether the given device is mounted using HAL and automount it if need be.
        - Look up the proper method for retrieving the user-specified mountpoint via HAL or some other D-Bus service.
- A proper ratio parser for the aspect ratio option.
- Add code to allow auto-skipping of intros. (default to 0:00-1:30 unless reset)
- Add an option to skip to the next episode with/without adding the current one to the list of watched things.
- Add some options to provide shorthand access to various types of post-processing filters.
- Design and add a better GTK+ directory opened dialog for this purpose.
- Do more code clean-up.
- Figure out how the heck to set up a proper fullscreen/unfullscreen toggle using PyGTK's wonky methods and events.
    - http://www.pygtk.org/docs/pygtk/class-gtkwidget.html#signal-gtkwidget--window-state-event
    - http://www.pygtk.org/docs/pygtk/class-gdkevent.html
- Smart sorting (identify numbering order correctly even if not zero-padded)
- Add support for my new LIRC-handled remote
    - Add an optional dependency on pylirc
    - Add support for auto-detecting all the anime available
        - Add a config-file list of directories to search
        - Add a regex matcher and some other simple logic to identify series
        - Add a "channel up/down" API for switching between detected series
        - Revamp the completion detector so it works with MPlayer's LIRC binding and remembers where you left off
        - Add a --lirc command-line option which triggers all this
        - Add an animu_* set of directives in ~/.mplayer/input.conf to control LIRC bindings for animu player-specific stuff.

Something went wrong with that request. Please try again.