diff options
Diffstat (limited to 'blog/2022-07-30-flac-to-opus.org')
-rw-r--r-- | blog/2022-07-30-flac-to-opus.org | 170 |
1 files changed, 89 insertions, 81 deletions
diff --git a/blog/2022-07-30-flac-to-opus.org b/blog/2022-07-30-flac-to-opus.org index df069b0..5d9d291 100644 --- a/blog/2022-07-30-flac-to-opus.org +++ b/blog/2022-07-30-flac-to-opus.org @@ -1,67 +1,72 @@ -+++ -date = 2022-07-30 -title = "Recursive Command-Line FLAC to Opus Conversion" -description = "A retrospective on how I recursively converting my FLAC file music library to OPUS with opusenc." -+++ - -## Converting FLAC to OPUS - -I am currently rebuilding my music library from scratch so that I can -effectively archive all the music I own in the [FLAC file -format](https://en.wikipedia.org/wiki/FLAC), a lossless audio codec. - -However, streaming FLAC files outside the home can be difficult due to the -size of the files, especially if you're using a weak connection. - -So, in order to archive the music in a lossless format and still be able to -stream it easily, I opted to create a copy of my FLAC files in the [Opus audio -codec](https://en.wikipedia.org/wiki/Opus_(audio_format)). This allows me to -archive a quality, lossless version of the music and then point my streaming -service to the smaller, stream-ready version. - -### Dependencies - -The process I follow utilizes the `opus-tools` package in Ubuntu. Before +#+title: Recursive Command-Line FLAC to Opus Conversion +#+date: 2022-07-30 + +** Converting FLAC to OPUS +:PROPERTIES: +:CUSTOM_ID: converting-flac-to-opus +:END: +I am currently rebuilding my music library from scratch so that I can +effectively archive all the music I own in the +[[https://en.wikipedia.org/wiki/FLAC][FLAC file format]], a lossless +audio codec. + +However, streaming FLAC files outside the home can be difficult due to +the size of the files, especially if you're using a weak connection. + +So, in order to archive the music in a lossless format and still be able +to stream it easily, I opted to create a copy of my FLAC files in the +[[https://en.wikipedia.org/wiki/Opus_(audio_format)][Opus audio codec]]. +This allows me to archive a quality, lossless version of the music and +then point my streaming service to the smaller, stream-ready version. + +*** Dependencies +:PROPERTIES: +:CUSTOM_ID: dependencies +:END: +The process I follow utilizes the =opus-tools= package in Ubuntu. Before proceeding, install the package: -```sh +#+begin_src sh sudo apt install opus-tools -``` +#+end_src -If you want to use a different conversion method, such as `ffmpeg` or `avconv`, -simply install that package instead. +If you want to use a different conversion method, such as =ffmpeg= or +=avconv=, simply install that package instead. -### Conversion Process +*** Conversion Process +:PROPERTIES: +:CUSTOM_ID: conversion-process +:END: +The script I'm using is stored in my home directory, but feel free to +create it wherever you want. It does not need to be in the same +directory as your music files. -The script I'm using is stored in my home directory, but feel free to create it -wherever you want. It does not need to be in the same directory as your music -files. - -```sh +#+begin_src sh cd ~ && nano transform.sh -``` +#+end_src -Once you have your new bash script opened in an editor, go ahead and paste the -following logic into the script. +Once you have your new bash script opened in an editor, go ahead and +paste the following logic into the script. -You **MUST** edit the following variables in order for it to work: +You *MUST* edit the following variables in order for it to work: -- `source`: The source directory where your FLAC files are stored. -- `dest`: The destination directory where you want the resulting Opus files to -be stored. +- =source=: The source directory where your FLAC files are stored. +- =dest=: The destination directory where you want the resulting Opus + files to be stored. -You **MAY** want to edit the following variables to suit your needs: +You *MAY* want to edit the following variables to suit your needs: -- `filename`: If you are converting to a file format other than Opus, you'll -need to edit this so that your resulting files have the correct filename -extension. -- `reldir`: This variable can be edited to strip out more leading directories in -the file path. As you'll see later, I ignore this for now and simply clean it up -afterward. -- `opusenc`: This is the actual conversion process. You may want to edit the -bitrate to suit your needs. I set mine at 128 but some prefer 160 or higher. +- =filename=: If you are converting to a file format other than Opus, + you'll need to edit this so that your resulting files have the correct + filename extension. +- =reldir=: This variable can be edited to strip out more leading + directories in the file path. As you'll see later, I ignore this for + now and simply clean it up afterward. +- =opusenc=: This is the actual conversion process. You may want to edit + the bitrate to suit your needs. I set mine at 128 but some prefer 160 + or higher. -```sh +#+begin_src sh #!/bin/bash ## - The IFS takes care of spaces in file and dirnames ## - your folders may vary @@ -123,52 +128,55 @@ opusenc --vbr --bitrate 128 --date "$DATE" \ ## just for testing # sleep 1 done -``` +#+end_src -Once you're done, simply save the file and exit your editor. Don't forget to -enable execution of the script: +Once you're done, simply save the file and exit your editor. Don't +forget to enable execution of the script: -```sh +#+begin_src sh chmod +x transform.sh -``` +#+end_src Finally, you may now run the script: -```sh +#+begin_src sh ./transform.sh -``` - -If you used `opusenc`, you'll see the conversions happen within the terminal as -it progresses. -You will also see variables printed if you uncommented any of the bash -script's comments. - -### Cleanup - -As I noted above, I didn't customize my `reldir` variable in the script, which -caused my output directory to be `/mnt/music/library/archives` instead of -`/mnt/music/library`. So, I moved the output up one level and deleted the -accidental directory. - -```sh +#+end_src + +If you used =opusenc=, you'll see the conversions happen within the +terminal as it progresses. You will also see variables printed if you +uncommented any of the bash script's comments. + +*** Cleanup +:PROPERTIES: +:CUSTOM_ID: cleanup +:END: +As I noted above, I didn't customize my =reldir= variable in the script, +which caused my output directory to be =/mnt/music/library/archives= +instead of =/mnt/music/library=. So, I moved the output up one level and +deleted the accidental directory. + +#+begin_src sh cd /mnt/music/library mv archives/* . rm -rf archives -``` - -### Check the Resulting Size +#+end_src -If you want to see what kind of file size savings you've gained, you can always -use the `du` command to check: +*** Check the Resulting Size +:PROPERTIES: +:CUSTOM_ID: check-the-resulting-size +:END: +If you want to see what kind of file size savings you've gained, you can +always use the =du= command to check: -```sh +#+begin_src sh cd /mnt/music du -h --max-depth=1 . -``` +#+end_src In my case, my small library went from 78GB to 6.3GB! -```txt +#+begin_src txt 78G ./archives 6.3G ./library -``` +#+end_src |