• Stars
    star
    130
  • Rank 277,575 (Top 6 %)
  • Language
    Python
  • License
    GNU General Publi...
  • Created about 12 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

generating videos from LilyPond projects

ly2video

ly2video is a Python script which converts music represented by a GNU LilyPond file into a video containing a horizontally scrolling music staff which is synchronized with a MIDI-generated audio rendering of the music.

It is also possible to synchronize the video of the scrolling music notation with a previously recorded audio track of the same music, such as a live performance, even when the audio uses tempo rubato or is not precisely metronomic.

Examples

Here are some examples of videos generated by ly2video.

Caveat emptor

Beware, here be dragons!

Unfortunately I don't currently have the time to work on ly2video much. These means that in some places bitrot has set in.

Having said that, I'll do my best to support anyone who is trying to get it working - please see below for how to get support.

Requirements

Please also read the Installation section below before you start installing anything!

Installation

Installing dependencies on openSUSE 12.2

Install the ffmpeg package from Packman via 1-click install (you can also find the button on this page), or via YaST and/or zypper.

You can ensure the remaining dependencies are installed via something like:

sudo zypper install lilypond timidity python3-pip python-imaging alsa-devel

Installing dependencies on Debian- and Ubuntu-based Linux distributions

There is currently a known issue on these distributions, since Debian and Ubuntu switched from ffmpeg to the libav fork. See issue #32 for a suggested workaround.

Additionally, Debian and Ubuntu both currently ship very old versions of LilyPond, so you might need to install a newer one via the "Generic Packages" section near the top of: http://lilypond.org/unix.html

You can ensure the remaining dependencies are installed via something like:

sudo apt-get install timidity python3-pip python3-pil

Installing dependencies on Arch-based Linux distributions

Download and install the AUR package ly2video-git. See the the Arch wiki for further instructions.

Installing dependencies on other platforms

If you have figured out how to install the dependencies and get ly2video working on another platform, please file a new issue containing the information, so that this README can be updated. Thanks!

Installing required Python module dependencies

ly2video requires some specific Python modules - do NOT install these manually! (unless you are a Python expert.) They can be installed system-wide via:

sudo pip install -r requirements.txt

or for the current user via:

pip install --user -r requirements.txt

You can optionally protect against the risk of installation of these Python modules destabilising any other Python applications you may use, by isolating them in a virtual environment using virtualenv. The most convenient way to do this is via virtualenvwrapper. Once you have virtualenvwrapper installed, it's as simple as:

mkvirtualenv ly2video
pip install -r requirements.txt

Installing ly2video itself

This is done via Python's standard package installation mechanism.

For example, to install system-wide, just run

sudo pip install .

or for the current user via:

pip install --user .

If something fails, please double-check you correctly met the requirements and dependencies detailed above.

Usage

Run ly2video --help to display usage information.

You must ensure that your .ly input file contains both \layout { } and \midi commands, which ensure that valid .midi and .png files are generated when it is run through lilypond --png.

Usage with docker container

Set up your path to argument LILY_FILES in makefile.

Build docker container with workable ly2video inside

make build

Run docker container with access to direcory you point at LILY_FILES

make run

Use ly2video usually. All actions applied in container to your files (LILY_FILES) will change your files (LILY_FILES) outside container.

Support, bugs, development etc.

Firstly, please check the issue tracker for known issues, and if yours is not there, please submit it.

Secondly, if you are able to perform some [[trouble-shooting|TROUBLE-SHOOTING]] yourself, even if you can't identify the exact problem or suggest a fix, any extra light you can shed will greatly increase the chances of it being fixed. Please see the [[trouble-shooting|TROUBLE-SHOOTING]] guide for information on how to do this.

If you know how to fix a problem or contribute an enhancement, you are extremely welcome to fork this repository, commit your fix, and then send a pull request!

Acknowledgements

Huge credits for the initial implementation go to Jiří "FireTight" Szabó, who wrote it as part of his Bachelor's degree. If you are lucky enough to understand Czech, you can read his thesis on ly2video in the doc/thesis/ subdirectory, or online :-) Work on an English translation has begun and is being tracked in issue 15 but is unlikely to be finished any time soon unless someone else volunteers to help out.

Very big thanks also to Jan Nieuwenhuizen not only for co-inventing LilyPond in the first place, but also for helping me implement the complete revamp of the synchronization algorithm, which should be much more robust than the previous one.

And finally of course, much gratitude to the many great people who have contributed to LilyPond over the years. This would not have been possible without you.

License

ly2video is released under the GNU GPL v3.

More Repositories

1

stow

GNU Stow - mirror of savannah git repository occasionally with more bleeding-edge branches
Perl
429
star
2

git-deps

git commit dependency analysis tool
Python
291
star
3

mysqldiff

tool and CPAN suite backend for comparing MySQL database schemas
Perl
125
star
4

shell-env

Adam's shell environment (bash/zsh) including a bunch of handy home-made utilities
Shell
117
star
5

smooth-scrolling

Emacs smooth scrolling package
Emacs Lisp
107
star
6

git-config

Adam's git shortcuts and environment. Designed to be stowed to ~ using GNU Stow.
Shell
88
star
7

opensuse-spotify-installer

Automate installation of Spotify on openSUSE
Shell
78
star
8

etrace

Emacs Lisp Latency Tracing for the Chromium Catapult Trace Event Format
Emacs Lisp
71
star
9

git-explode

Explode linear sequence of git commits into topic branches
Python
46
star
10

ansible-viz

Graph relationships between Ansible playbooks / roles / tasks / vars etc. via static analysis
Ruby
40
star
11

book-indices

Indices for music books
24
star
12

mr-config

Adam's mr config
Shell
21
star
13

zkp-eddsa-point-doubler

Zero Knowledge proof for point doubling on baby JubJub elliptic curve, using Zokrates
Shell
12
star
14

orgmode

personal repository for patches to orgmode upstream
Emacs Lisp
11
star
15

lilypond

Friendly fork of GNU Lilypond
C++
11
star
16

emacs

Adam's emacs config
Emacs Lisp
10
star
17

lnav-formats

Extra log file format descriptions for the lnav log file reader
9
star
18

SUSE-dist

SUSE-specific utilities and miscellany
Perl
7
star
19

desktop-config

Set up Adam's Xorg desktop the way he likes it
Shell
7
star
20

mutt

a set of generic configuration files for mutt
Perl
7
star
21

migrationpaths

implementation of VM migration path-finding algorithm
Python
7
star
22

worg

Adam's personal mirror of Worg - user documentation of orgmode for emacs
Emacs Lisp
7
star
23

vc-osc

osc backend for emacs vc mode
Emacs Lisp
6
star
24

ssh-config

Adam's openssh public config and helper scripts
Shell
6
star
25

screenrc

Adam's config for GNU Screen and tmux
Shell
5
star
26

guard-sclang

Guard plugin for automatic testing of SuperCollider code
Ruby
5
star
27

linear-analysis

Analysis of linear.app issues
TypeScript
3
star
28

shell-vars-to-ruby

solution to http://stackoverflow.com/questions/11956850/read-all-shell-variables-in-ruby
Ruby
3
star
29

PDFexploder

Tools for exploding PDFs into fragments based on an index
Ruby
3
star
30

ruby-harmony

Music harmony theory, in Ruby!
Ruby
2
star
31

mutt.pub

Configuration files for mutt specifically written for use by me (Adam), but shared publically for interest.
Shell
2
star
32

list-utils

Utilities relating to mailing lists, NNTP, groups etc.
Python
2
star
33

Finance-Bank-LloydsTSB

CPAN module suite providing a rudimentary interface to the LloydsTSB online banking system at https://online.lloydstsb.co.uk/
Perl
2
star
34

Discord-custom-nicks-userscript

Browser userscript for assigning custom nicknames to users client-side
JavaScript
2
star
35

rpm

tools related to rpm
Shell
1
star
36

rolod0x

TypeScript
1
star
37

cfgctl

Utility for managing config repositories
Perl
1
star
38

zmk-config

1
star
39

github-notifications

Utility for marking github notifications as read via mail clients
Ruby
1
star
40

ET-reporting

Ruby
1
star
41

openstack-day-israel-2017-compute-ha

Presentation on upstream compute HA for OpenStack Day Israel 2017
CSS
1
star
42

mscore-groove

Groove plugin for MuseScore
Jupyter Notebook
1
star
43

ANTIFOLD

ugly hack to prevent GNU Stow from folding certain directories under $HOME
Shell
1
star
44

compute-ha-presentation

Presentation on compute HA for OpenStack
CSS
1
star
45

obs-service-tar_scm.historic

Python
1
star
46

etheriopia

Browser userscript to fix two bugs with Twitter
JavaScript
1
star