Table of Contents
A long lasting idea (first occurence was during residency of the Metahub Nuit Blanche in Brussels) trying to come to life out of necessity.
Concept: use the Raspberry Pi as a lightweight, portable, plug and play VJ plateform
Sure, why not. It's cheap, small, has RCA or HDMI output, can play h264 HD videos, works already well as a media center,…
A lot of credit has to be given to PocketVJ which has opened my eyes on the web interface to control the videos and by showing the way to do things.
The system consists of a video player with functionnalities usefull for VJing (crossfade between videos, fade to/from black, some “overlay” filtres,…) and an interface that can be accessed from any browser (for the versatility of tools that can connect to the Raspberry Pi).
After connecting the RasPiVJ to a screen and power supply, the whole system starts on boot. The VJ then connects via Wifi or RJ45 to the Raspberry with a laptop, a tablet or a phone to access the interface and start plaing videos.
- Videos play in loop
- Crossfade or cut between two videos
- Fade to/from black
- A grid of thumbnails displays the list of videos available. A click on a thumbnail selects and playx the video.
- Plays videos up to 720p, but for better reactivity, better stay slightly under a PAL format
- Create and run playlists
- “orverlay” filters and effects like darken, lighten, color burn, greyscale, red, green, blue,…
- Manage videos (upload, remove, etc…)
The RasPIVJ has already been used in a public performance with the band Left Arm of Buddha.
This system could be used by any band, musician or performer who needs an easy to set-up video system that can be controlled and activated either by the musicians themselves, the sound or light engineer,…
The hdmi and rca output makes it an all purpose video tool that can connect to old or new projection or display equipment.
The system could also easily be extende to support multiple screens with multiple raspberries.
The setup involve a custom application developped in openFrameworks. It uses ofxOMXPlayer addon to display two video as a textures (this provides the ability to crossfade between the two textures and have seamless loop) and ofxOsc for communication with the web interface.
A webserver pushed by nodejs with modules:
How to install latest Node on the RPi
All files will be published on http://github.com/xuv/RasPiVJ
How to convert your videos fro the RasPiVJ
ofxOMXPlayer works best with h264 videos with sound. Since I don't need sound, here's a command to add silence to a video. The parameters have to be in that order (especially for the mapping). If you already have an audio channel in your source video, it's better to not do any compression on the video codec (-vcodec copy) while swapping the existing audio channel with the silent one. If you don't have any prior sound, you can do video and audio compression at the same time.
ffmpeg -ar 48000 -ac 2 -f s16le -i /dev/zero -i video.mp4 -shortest \ -vcodec copy -acodec pcm_s16le -map 1:v -map 0:a output.mov
ffmpeg -ar 48000 -ac 2 -f s16le -i /dev/zero -i video.mp4 -shortest \ -s 1024x768 -vcodec libx264 -b 2000k -acodec pcm_s16le \ --map 1:v -map 0:a output.mov
ffmpeg -i video.avi -s 1024x768 -vcodec libx264 -b 2000k \ -acodec pcm_s16le output.mov
It's /dev/zero that produces silence.
Projects that already exist and other related tools.
Super Pikix Pi
A full featured VJ software by the great Pikilipita
- Free, but not open source
- Own codec (kouky .k19) and converter for Win or Mac only
- Clips limited to 250 frames @ 25fps, 640×360
- Playlist based, some overlay effects,…
- Can sync multiple Raspis
- Web interface
- Can play HD videos
- Can play from usb key
openFrameworks + ofxOMXPlayer
The oF toolbox ported to Raspberry Pi and its addon to use the OpenMAX video capabilities with it.
Python wrapper module around OMXPlayer for the Raspberry Pi.
- https://github.com/jbaiter/pyomxplayer (pexpect)
To install the latest version of NodeJS:
wget http://node-arm.herokuapp.com/node_latest_armhf.deb sudo dpkg -i node_latest_armhf.deb
A NodeJS framework. Requires Mongodb