Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/deckarep/cloud-chromioke
Chromecast Karaoke in the Cloud
https://github.com/deckarep/cloud-chromioke
cdg chromecast cloud ffmpeg hack karaoke rust
Last synced: 26 days ago
JSON representation
Chromecast Karaoke in the Cloud
- Host: GitHub
- URL: https://github.com/deckarep/cloud-chromioke
- Owner: deckarep
- License: mit
- Created: 2017-05-01T21:28:33.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2017-05-04T01:25:57.000Z (over 7 years ago)
- Last Synced: 2024-06-20T09:11:23.883Z (5 months ago)
- Topics: cdg, chromecast, cloud, ffmpeg, hack, karaoke, rust
- Language: Shell
- Size: 9.77 KB
- Stars: 1
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# cloud-chromioke
Chromecast Karaoke in the Cloud# How it works
This Dockerfile builds a pipeline that allows you to queue up and
deliver Karaoke .cdg/.mp3 files to any Chromecast within your network.
This requires installing this service into a publicly accessable cloud
server such as DigitalOcean/EC2/Vultr/GCE and allowing this service
access to your own digital .cdg/.mp3 audio/video collection so they can
be processed on the fly and served onto any Chromecast device that
supports movie playback.The pipeline is as follows:
```sh
From S3 -> .zip file fetch -> unzipped -> frame_dumper applied to .cdg
-> ffmpeg applied to .png/.mp3 assets -> output.mp4 -> served via Go
server.
```## CDG frame_dumper
A rust application that concerns itself with taking a `.cdg` file
and processing the bitmap data generating individual `.png` frames. This will
generate on the order of a few thousand frames and these will be melded
along with the original `.mp3` file into a video file using ffmpeg in the next step.## FFmpeg
Data is processed as a directory of `.png` frames along with the original
`input.mp3`. This means the ffmpeg command must combine this data into a
format that is honored by the Chromecast.```sh
fmpeg -r 25 -i tmpdir/frame_%05d.png -i input.mp3
-c:v libx264
-profile:v high
-level 5
-crf 18
-maxrate 10M
-bufsize 16M
-pix_fmt yuv420p
-vf "scale=iw*sar:ih,scale='if(gt(iw,ih),min(1920,iw),-1)':'if(gt(iw,ih),-1,min(1080,ih))'"
-x264opts bframes=3:cabac=1
-movflags faststart
-c:a aac
-b:a 320k
-y output.mp4
```Notice the input is a temp directory with all the .png frames along with
the `input.mp3` file containing the audio.The output is then a single file: `output.mp4' which is the final video
file.Where the address is that of your Chromecast which you can get from your
Google Home app in the Settings section.## Building
```sh
docker build -t cdg .
```## Running the server (as a daemon)
```sh
docker run -d -v=`pwd`:/tmpdir -p 0.0.0.0:8080:8080 cdg
```## Processing a music file.
```sh
docker run -v=`pwd`:/tmpdir --entrypoint="./process.sh" cdg "{artist - song.zip}"
```## Casting
Casting is done with the Castnow node.js command-line tool as follows:```sh
castnow --address 10.0.0.32 --type "video/mp4" output.mp4
```This process is intended to be initiated within your LAN where you have
network access to the internal ip of your Chromecast device.