youtube-cue/README.md

88 lines
3.5 KiB
Markdown

# youtube-cue ![npm](https://img.shields.io/npm/v/youtube-cue) ![Libraries.io dependency status for latest release](https://img.shields.io/librariesio/release/npm/youtube-cue) ![NPM](https://img.shields.io/npm/l/youtube-cue) ![Snyk Vulnerabilities for npm package](https://img.shields.io/snyk/vulnerabilities/npm/youtube-cue) [![Total Dependencies](https://img.shields.io/badge/Total%20Dependencies-4-orange)](https://www.npmjs.com/package/youtube-cue)
Generate CUE sheet from timestamps in youtube video description.
## What is this for?
1. If you have DJ-mix or album on YouTube that you'd like to generate a [CUE sheet][cue] for.
2. The video has timestamps in the video description.
3. The video is publicly available on Youtube.
`youtube-cue` will read the video description, get the timestamps and generate a [CUE sheet][cue] accordingly. It will also work if track durations are used instead of timestamps.
## Anti-features
1. It does not download tracks from YouTube
2. It does not split your tracks
3. It does not tag your tracks.
For all of the above, there are better tools available, such as [youtube-dl](https://ytdl-org.github.io/youtube-dl/), [m4acut](https://github.com/nu774/m4acut), [mp3splt](https://sourceforge.net/projects/mp3splt/), [cuetools](https://github.com/svend/cuetools), [beets](https://beets.io) and many more. youtube-cue tries to [do one thing well](https://onethingwell.org/).
## Installation
npm install -g youtube-cue
## Upgrade
npm update -g youtube-cue
## Usage
You need to pass 2 parameters, a Youtube URL and a output CUE filename. YouTube short URLs (`youtu.be`) are accepted. You can additionally pass a `audio-file` argument which is used for the [`FILE` specified in the CUE file][cuefile].
youtube-cue [--audio-file audio.m4a] <youtube_url> [output_file]
Options
--help, Show help
--audio-file, Input Audio File (optional) that is written to the CUE sheet
The default audio file is set to %VIDEOTITLE.m4a
The default output file is set to %VIDEOTITLE.cue
where $VIDEOTITLE is the title of the YouTube video.
Generally the parser detects whether numbers are positional timestamps or track durations.
To enforce a desired interpretation you can use these flags:
--timestamps Parse as positional timestamps (relative to the start of the playlist)
--durations Parse as track durations
The above 2 are only needed to force behaviour in
very specific edge cases, they should not be required for most files.
Examples
$ youtube-cue --audio-file audio.m4a "https://www.youtube.com/watch?v=WzpmVxvoBoc" "The Groovy Nobody - Solarium.cue"
"The Groovy Nobody - Solarium.cue" saved
## Personal Usage
I have this in my `.bashrc` to download, split, tag, and import albums using beet:
```shell
function ytdl.album() {
cd $(mktemp -d)
youtube-dl -f "bestaudio[ext=m4a]" --output "audio.m4a" "$1"
youtube-cue --audio-file "audio.m4a" "$1" tracks.cue
m4acut -C tracks.cue "audio.m4a" && \
trash audio.m4a && \
beet import -map .
}
```
## HACKING
- If it does not work on a specific video, please attach the complete output
- Pull Requests are welcome that add support for a better parser without breaking the existing tests
- Please add tests for any new functionality
## License
Licensed under the [MIT License][mit]
[mit]: https://nemo.mit-license.org/
[rdd]: http://tom.preston-werner.com/2010/08/23/readme-driven-development.html
[cue]: https://en.wikipedia.org/wiki/Cue_sheet_(computing)
[cuefile]: https://en.wikipedia.org/wiki/Cue_sheet_(computing)#Essential_commands