90 lines
2.9 KiB
Markdown
90 lines
2.9 KiB
Markdown
# Get Tracks
|
|
|
|
`get-tracks.sh` allows you to easily extract music tracks from a file with multiple songs, like a CD-in-a-file.
|
|
|
|
# Required applications
|
|
|
|
`get-tracks.sh` is a simple shell script based around `ffmpeg`, using only POSIX tools.
|
|
|
|
It was tested on both OpenBSD and Linux (Ubuntu, Alpine).
|
|
|
|
# Usage
|
|
|
|
Download a CD and the starting time of each track in a file, and you're good to go.
|
|
|
|
```Bash
|
|
get-tracks.sh <audio-file> <time-file>
|
|
|
|
# Example
|
|
get-track.sh doom-eternal.opus doom-eternal.txt
|
|
```
|
|
|
|
|
|
*audio-file* can be in any format understood by `ffmpeg`.
|
|
|
|
The *time-file* must have this format:
|
|
|
|
```
|
|
0:00 intro
|
|
2:20 First song
|
|
3:18 Awesome song
|
|
```
|
|
|
|
# Environment variables
|
|
|
|
The behavior of the script can be changed by several environment variables.
|
|
|
|
* **SIMULATION** [empty or not]\
|
|
do not invoke ffmpeg
|
|
|
|
* **FORMAT** [mp3,ogg,opus,…]\
|
|
see the ffmpeg documentation for the output formats available
|
|
* **FFOPTS** [any ffmpeg options] *(default: '-c:a copy')*\
|
|
ffmpeg options, can be used to change audio quality\
|
|
can be **required** to change in case input and output file formats differ\
|
|
see the ffmpeg documentation for available parameters
|
|
|
|
* **NONUMBER** [empty or 1]\
|
|
do not write song numbers
|
|
* **SEPARATOR** [separator] *(default: ' - ')*\
|
|
separator between number and name\
|
|
example with SEPARATOR='_': 01_intro.opus 02_blah.opus…
|
|
|
|
* **HEADERS** [empty or 1]\
|
|
print environment parameters (verbosity, simulation, etc.)
|
|
* **VERBOSITY** [0-3] *(default: 1)*\
|
|
0: no output except errors from ffmpeg\
|
|
1: simple indications on the current track being extracted\
|
|
2: print actual ffmpeg commands the script currently runs
|
|
|
|
# Different input and output file formats
|
|
|
|
In case you want to change the file format, let's say from `flac` to `opus`, you need to override the default ffmpeg options provided by `get-tracks.sh`.
|
|
This is done through the `FFOPTS` environment variable, **which needs to NOT be empty** in order to replace the default `get-tracks.sh` behavior (which is `-c:a copy`).
|
|
By default, `ffmpeg` performs re-encoding by itself.
|
|
|
|
```Bash
|
|
FORMAT=opus FFOPTS=" " get-tracks.sh cd.flac cd.txt
|
|
```
|
|
|
|
### Warning: sometimes you don't even need to
|
|
|
|
You may encounter files in some format like `webm` and you want to convert the output files in `opus`.
|
|
But, inside the `webm` format, you **may** have `opus`-encoded audio.
|
|
In these cases, no re-encoding is necessary, and you can do something like:
|
|
|
|
```Bash
|
|
FORMAT=opus get-tracks.sh cd.webm cd.txt
|
|
```
|
|
|
|
You'll have a warning mentionning FFOPTS (based on different formats).
|
|
But the generated audio files won't have any quality loss.
|
|
This happens sometimes with the `youtube-dl` utility.
|
|
|
|
In case there are actual `ffmpeg` errors, and you don't have output audio files, then the contained audio hadn't the right format.
|
|
You'll have to re-encode.
|
|
|
|
# More
|
|
|
|
You can get some help by running `get-track.sh` without arguments.
|