From f20f64178f8e29ffcac0fdaf002627b3f4271b6a Mon Sep 17 00:00:00 2001 From: Eric Nemchik Date: Mon, 2 Nov 2020 20:20:09 -0600 Subject: [PATCH 01/13] Add information about GHCR --- .github/workflows/BuildImage.yml | 60 ++++++++++++++++++++++++-------- Dockerfile.complex | 2 +- 2 files changed, 47 insertions(+), 15 deletions(-) diff --git a/.github/workflows/BuildImage.yml b/.github/workflows/BuildImage.yml index 7758aa8..518b0d8 100644 --- a/.github/workflows/BuildImage.yml +++ b/.github/workflows/BuildImage.yml @@ -2,29 +2,61 @@ name: Build Image on: [push, pull_request, workflow_dispatch] +env: + ENDPOINT: "linuxserver/mods" #don't modify + BASEIMAGE: "replace_baseimage" #replace + MODNAME: "replace_modname" #replace + jobs: build: - env: - DOCKERHUB: "linuxserver/mods" #don't modify - BASEIMAGE: "baseimagename" #replace - MODNAME: "modname" #replace - runs-on: ubuntu-latest steps: - uses: actions/checkout@v2.3.3 - name: Build image - id: build run: | - docker build --no-cache -t ${DOCKERHUB}:${BASEIMAGE}-${MODNAME}-${{ github.sha }} . + docker build --no-cache -t ${{ github.sha }} . - - name: Push image + - name: Tag image if: ${{ github.ref == format('refs/heads/{0}-{1}', env.BASEIMAGE, env.MODNAME) }} run: | - # Tag image - docker tag ${DOCKERHUB}:${BASEIMAGE}-${MODNAME}-${{ github.sha }} ${DOCKERHUB}:${BASEIMAGE}-${MODNAME} - # Login to DockerHub + docker tag ${{ github.sha }} ${ENDPOINT}:${BASEIMAGE}-${MODNAME} + docker tag ${{ github.sha }} ${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${{ github.sha }} + docker tag ${{ github.sha }} ghcr.io/${ENDPOINT}:${BASEIMAGE}-${MODNAME} + docker tag ${{ github.sha }} ghcr.io/${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${{ github.sha }} + + - name: Credential check + if: ${{ github.ref == format('refs/heads/{0}-{1}', env.BASEIMAGE, env.MODNAME) }} + run: | + echo "CR_USER=${{ secrets.CR_USER }}" >> $GITHUB_ENV + echo "CR_PAT=${{ secrets.CR_PAT }}" >> $GITHUB_ENV + echo "DOCKERUSER=${{ secrets.DOCKERUSER }}" >> $GITHUB_ENV + echo "DOCKERPASS=${{ secrets.DOCKERPASS }}" >> $GITHUB_ENV + if [[ "${{ secrets.CR_USER }}" == "" && "${{ secrets.CR_PAT }}" == "" && "${{ secrets.DOCKERUSER }}" == "" && "${{ secrets.DOCKERPASS }}" == "" ]]; then + echo "::error::Push credential secrets missing." + echo "::error::You must set either CR_USER & CR_PAT or DOCKERUSER & DOCKERPASS as secrets in your repo settings." + echo "::error::See https://github.com/linuxserver/docker-mods/blob/master/README.md for more information/instructions." + exit 1 + fi + + - name: Login to GitHub Container Registry + if: ${{ github.ref == format('refs/heads/{0}-{1}', env.BASEIMAGE, env.MODNAME) && env.CR_USER && env.CR_PAT }} + run: | + echo "${{ secrets.CR_PAT }}" | docker login ghcr.io -u ${{ secrets.CR_USER }} --password-stdin + + - name: Push tags to GitHub Container Registry + if: ${{ github.ref == format('refs/heads/{0}-{1}', env.BASEIMAGE, env.MODNAME) && env.CR_USER && env.CR_PAT }} + run: | + docker push ghcr.io/${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${{ github.sha }} + docker push ghcr.io/${ENDPOINT}:${BASEIMAGE}-${MODNAME} + + - name: Login to DockerHub + if: ${{ github.ref == format('refs/heads/{0}-{1}', env.BASEIMAGE, env.MODNAME) && env.DOCKERUSER && env.DOCKERPASS }} + run: | echo ${{ secrets.DOCKERPASS }} | docker login -u ${{ secrets.DOCKERUSER }} --password-stdin - # Push all of the tags - docker push ${DOCKERHUB}:${BASEIMAGE}-${MODNAME}-${{ github.sha }} - docker push ${DOCKERHUB}:${BASEIMAGE}-${MODNAME} + + - name: Push tags to DockerHub + if: ${{ github.ref == format('refs/heads/{0}-{1}', env.BASEIMAGE, env.MODNAME) && env.DOCKERUSER && env.DOCKERPASS }} + run: | + docker push ${ENDPOINT}:${BASEIMAGE}-${MODNAME}-${{ github.sha }} + docker push ${ENDPOINT}:${BASEIMAGE}-${MODNAME} diff --git a/Dockerfile.complex b/Dockerfile.complex index bc97902..8eb7e00 100644 --- a/Dockerfile.complex +++ b/Dockerfile.complex @@ -1,5 +1,5 @@ ## Buildstage ## -FROM lsiobase/alpine:3.12 as buildstage +FROM ghcr.io/linuxserver/baseimage-alpine::3.12 as buildstage RUN \ echo "**** install packages ****" && \ From 8a48ea51d8833349116871d6f796ad8f5d002824 Mon Sep 17 00:00:00 2001 From: Eric Nemchik Date: Tue, 3 Nov 2020 09:04:40 -0600 Subject: [PATCH 02/13] Update Dockerfile.complex --- Dockerfile.complex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.complex b/Dockerfile.complex index 8eb7e00..db4598e 100644 --- a/Dockerfile.complex +++ b/Dockerfile.complex @@ -1,5 +1,5 @@ ## Buildstage ## -FROM ghcr.io/linuxserver/baseimage-alpine::3.12 as buildstage +FROM ghcr.io/linuxserver/baseimage-alpine:3.12 as buildstage RUN \ echo "**** install packages ****" && \ From b549a3758e4864c82d7b8bb1760046b202b4751d Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Tue, 6 Oct 2020 12:56:08 -0500 Subject: [PATCH 03/13] Update Dockerfile --- Dockerfile | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4ece5e8..58f4720 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,44 @@ +## Buildstage ## +FROM lsiobase/ubuntu:xenial as buildstage + +# Build arguments +ARG BUILD_DATE +ARG VCS_REF +ARG VERSION +ARG DOCKERHUB + +# Build-time metadata as defined at http://label-schema.org +LABEL org.label-schema.name="${DOCKERHUB}:latest" \ + org.label-schema.description="A Docker Mod for the LinuxServer.io Radarr/Sonarr container that adds mkvtoolnix and script for remuxing video files" \ + org.label-schema.url="https://hub.docker.com/r/${DOCKERHUB}" \ + org.label-schema.version=$VERSION \ + org.label-schema.build-date=$BUILD_DATE \ + org.label-schema.vendor="TheCaptain989" \ + org.label-schema.schema-version="1.0" \ + org.label-schema.vcs-url="https://github.com/TheCaptain989/radarr-striptracks" \ + org.label-schema.vcs-ref=$VCS_REF + +# Build-time metadata as defined at https://github.com/opencontainers/image-spec +LABEL org.opencontainers.image.title="${DOCKERHUB}:latest" \ + org.opencontainers.image.description="A Docker Mod for the LinuxServer.io Radarr/Sonarr container that adds mkvtoolnix and script for remuxing video files" \ + org.opencontainers.image.url="https://hub.docker.com/r/${DOCKERHUB}" \ + org.opencontainers.image.version=$VERSION \ + org.opencontainers.image.created=$BUILD_DATE \ + org.opencontainers.image.vendor="TheCaptain989" \ + org.opencontainers.image.source="https://github.com/TheCaptain989/radarr-striptracks" \ + org.opencontainers.image.revision=$VCS_REF + +# Add version number for use in container init script +RUN mkdir -p /root-layer/etc && \ + echo "$VERSION" > /root-layer/etc/version.tc989 + +# Stage local files +COPY root/ /root-layer/ + +## Single layer deployed image ## FROM scratch -LABEL maintainer="username" +LABEL maintainer="TheCaptain989" -# copy local files -COPY root/ / +# Copy files from buildstage +COPY --from=buildstage /root-layer/ / From 37e57d2b8332c99d4f18dd9390e1c2fe674831b7 Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Tue, 6 Oct 2020 12:56:57 -0500 Subject: [PATCH 04/13] Delete run --- root/etc/services.d/sshvpn/run | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 root/etc/services.d/sshvpn/run diff --git a/root/etc/services.d/sshvpn/run b/root/etc/services.d/sshvpn/run deleted file mode 100644 index 7d49e79..0000000 --- a/root/etc/services.d/sshvpn/run +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/with-contenv bash - -sshuttle --dns --remote root@${HOST}:${PORT} 0/0 -x 172.17.0.0/16 From 15b7eeb87b4129ba517711f463fbba22d500266c Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Tue, 6 Oct 2020 20:02:49 -0500 Subject: [PATCH 05/13] radarr: striptracks initial release mkvtoolnix --- Dockerfile | 10 +- README.md | 184 +++++++- root/etc/cont-init.d/60-striptracks-init | 47 ++ root/etc/cont-init.d/98-vpn-config | 27 -- root/usr/local/bin/striptracks-dut.sh | 3 + root/usr/local/bin/striptracks-eng-debug.sh | 3 + root/usr/local/bin/striptracks-eng-jpn.sh | 3 + root/usr/local/bin/striptracks-eng.sh | 3 + root/usr/local/bin/striptracks-fre-debug.sh | 3 + root/usr/local/bin/striptracks-fre.sh | 3 + root/usr/local/bin/striptracks-ger.sh | 3 + root/usr/local/bin/striptracks-spa.sh | 3 + root/usr/local/bin/striptracks.sh | 489 ++++++++++++++++++++ 13 files changed, 738 insertions(+), 43 deletions(-) create mode 100644 root/etc/cont-init.d/60-striptracks-init delete mode 100644 root/etc/cont-init.d/98-vpn-config create mode 100644 root/usr/local/bin/striptracks-dut.sh create mode 100644 root/usr/local/bin/striptracks-eng-debug.sh create mode 100644 root/usr/local/bin/striptracks-eng-jpn.sh create mode 100644 root/usr/local/bin/striptracks-eng.sh create mode 100644 root/usr/local/bin/striptracks-fre-debug.sh create mode 100644 root/usr/local/bin/striptracks-fre.sh create mode 100644 root/usr/local/bin/striptracks-ger.sh create mode 100644 root/usr/local/bin/striptracks-spa.sh create mode 100644 root/usr/local/bin/striptracks.sh diff --git a/Dockerfile b/Dockerfile index 58f4720..bdb716f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,26 +6,28 @@ ARG BUILD_DATE ARG VCS_REF ARG VERSION ARG DOCKERHUB +ARG BASEIMAGE +ARG MODNAME # Build-time metadata as defined at http://label-schema.org -LABEL org.label-schema.name="${DOCKERHUB}:latest" \ +LABEL org.label-schema.name="${DOCKERHUB}:${BASEIMAGE}-${MODNAME}" \ org.label-schema.description="A Docker Mod for the LinuxServer.io Radarr/Sonarr container that adds mkvtoolnix and script for remuxing video files" \ org.label-schema.url="https://hub.docker.com/r/${DOCKERHUB}" \ org.label-schema.version=$VERSION \ org.label-schema.build-date=$BUILD_DATE \ org.label-schema.vendor="TheCaptain989" \ org.label-schema.schema-version="1.0" \ - org.label-schema.vcs-url="https://github.com/TheCaptain989/radarr-striptracks" \ + org.label-schema.vcs-url="https://github.com/linuxserver/docker-mods/tree/radarr-striptracks/" \ org.label-schema.vcs-ref=$VCS_REF # Build-time metadata as defined at https://github.com/opencontainers/image-spec -LABEL org.opencontainers.image.title="${DOCKERHUB}:latest" \ +LABEL org.opencontainers.image.title="${DOCKERHUB}:${BASEIMAGE}-${MODNAME}" \ org.opencontainers.image.description="A Docker Mod for the LinuxServer.io Radarr/Sonarr container that adds mkvtoolnix and script for remuxing video files" \ org.opencontainers.image.url="https://hub.docker.com/r/${DOCKERHUB}" \ org.opencontainers.image.version=$VERSION \ org.opencontainers.image.created=$BUILD_DATE \ org.opencontainers.image.vendor="TheCaptain989" \ - org.opencontainers.image.source="https://github.com/TheCaptain989/radarr-striptracks" \ + org.opencontainers.image.source="https://github.com/linuxserver/docker-mods/tree/radarr-striptracks/" \ org.opencontainers.image.revision=$VCS_REF # Add version number for use in container init script diff --git a/README.md b/README.md index 5636dec..6bf7440 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,177 @@ -# Rsync - Docker mod for openssh-server +A [Docker Mod](https://github.com/linuxserver/docker-mods) for the LinuxServer.io Radarr/Sonarr Docker container that adds a script to automatically strip out unwanted audio and subtitle streams, keeping only the desired languages. +Chapters, if they exist, are preserved. The Title attribute in the MKV is set to the movie title plus year (ex: `The Sting (1973)`) or the series title plus episode information (ex: `Happy! 01x01 - What Smiles Are For`). -This mod adds rsync to openssh-server, to be installed/updated during container start. +**One unified script works in both Radarr and Sonarr. Use this mod in either container!** +>**NOTE:** This mod support Linux OSes only. -In openssh-server docker arguments, set an environment variable `DOCKER_MODS=linuxserver/mods:openssh-server-rsync` +Container info: +![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/linuxserver/mods/radarr-striptracks) +![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/mods/radarr-striptracks "Container Pulls") -If adding multiple mods, enter them in an array separated by `|`, such as `DOCKER_MODS=linuxserver/mods:openssh-server-rsync|linuxserver/mods:openssh-server-mod2` +# Installation +>**NOTE:** See the [Sonarr/Radarr v3 Builds](./README.md#sonarrradarr-v3-builds) section below for important differences to these instructions for v3 builds. -# Mod creation instructions +1. Pull your selected container ([linuxserver/radarr](https://hub.docker.com/r/linuxserver/radarr "LinuxServer.io's Radarr container") or [linuxserver/sonarr](https://hub.docker.com/r/linuxserver/sonarr "LinuxServer.io's Sonarr container")) from Docker Hub: + `docker pull linuxserver/radarr:latest` OR + `docker pull linuxserver/sonarr:latest` -* Fork the repo, create a new branch based on the branch `template`. -* Edit the `Dockerfile` for the mod. `Dockerfile.complex` is only an example and included for reference; it should be deleted when done. -* Inspect the `root` folder contents. Edit, add and remove as necessary. -* Edit this readme with pertinent info, delete these instructions. -* Finally edit the `.github/workflows/BuildImage.yml`. Customize the build branch, and the vars for `BASEIMAGE` and `MODNAME`. -* Ask the team to create a new branch named `-`. Baseimage should be the name of the image the mod will be applied to. The new branch will be based on the `template` branch. -* Submit PR against the branch created by the team. +2. Configure the Docker container with all the port, volume, and environment settings from the *original container documentation* here: + **[linuxserver/radarr](https://hub.docker.com/r/linuxserver/radarr "Radarr Docker container")** + **[linuxserver/sonarr](https://hub.docker.com/r/linuxserver/sonarr "Sonarr Docker container")** + 1. Add the **DOCKER_MODS** environment variable to the `docker create` command, as follows: + `-e DOCKER_MODS=linuxserver/mods:radarr-striptracks` + + *Example Synology Configuration* + ![striptracks](https://user-images.githubusercontent.com/11523885/95027314-1e006680-065d-11eb-9ff9-cc51648d57bd.png "Synology container settings") + + 2. Start the container. + +3. After all of the above configuration is complete, to use mkvmerge: + 1. Configure a custom script from the Radarr/Sonnar Settings->Connect screen and type the following in the **Path** field: + `/usr/local/bin/striptracks.sh` + + 2. Add the codes for the audio and subtitle languages you want to keep as **Arguments** (details in the [Syntax](./README.md#syntax) section below): + Suggested Example + **`:eng:und :eng`** + +## Usage +>**NOTE:** See the [Sonarr/Radarr v3 Builds](./README.md#sonarrradarr-v3-builds) section below for important differences to these instructions for v3 builds. + +The source video can be any mkvtoolnix supported video format. The output is an MKV file with the same name. + +If you've configured the Radarr/Sonarr Recycle Bin path correctly, the original video will be moved there. +![warning24] **NOTE:** If you have *not* configured the Recycle Bin, the original video file will be deleted/overwritten and permanently lost. + +### Syntax +The script accepts two arguments and one option in the **Arguments** field: + +`[-d] ` + +The arguments are language codes in [ISO639-2](https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes "List of ISO 639-2 codes") format. +These are three letter abbreviations prefixed with a colon ':', such as: + +* :eng +* :fre +* :spa + +...etc. + +Multiple codes may be concatenated, such as `:eng:spa` for both English and Spanish. + +It is suggested to use `:eng:und :eng` if you are unsure of what to choose. This will keep English and Undetermined audio and English subtitles, if they exist. +>**NOTE:** The script is smart enough to not remove the last audio track. This way you don't have to specify every possible language if you are importing a +foreign film, for example. + +The `-d` option enables debug logging. + +### Examples +``` +:eng:und :eng # keep English and Undetermined audio and English subtitles +-d :eng "" # Enable debugging, keeping English audio and no subtitles +:eng:kor:jpn :eng:spa # Keep English, Korean, and Japanese audio, and English and + Spanish subtitles +``` + +## Triggers +The only events/notification triggers that have been tested are **On Download** and **On Upgrade** + +![striptracks](https://user-images.githubusercontent.com/11523885/95027402-d0d0c480-065d-11eb-97a8-b02a011572ab.png "Radarr/Sonarr custom script settings") + +## Logs +A log file is created for the script activity called: + +`/config/logs/striptracks.txt` + +This log can be inspected or downloaded from the Radarr/Sonarr GUI under System->Logs->Files + +Script errors will show up in both the script log and the native Radarr/Sonarr log. + +Log rotation is performed with 5 log files of 512KB each being kept. +>![warning24] **NOTE:** If debug logging is enabled, the log file can grow very large very quickly. *Do not leave debug logging enabled permanently.* + +___ + +## Sonarr/Radarr v3 Builds +>![warning] **Warning: Unstable Releases** ![warning] +>The Sonarr/Radarr v3 Builds are the unstable releases (Aphrodite and Phantom) of Radarr and Sonarr. Though the mod works with all versions of the container, I cannot guarantee these releases are stable. + +Important differences for Sonarr/Radarr v3 Builds +### Mod installation +Substitute the following steps for those noted in the [Installation](./README.md#installation) section above. +1. Pull your selected container ([linuxserver/radarr](https://hub.docker.com/r/linuxserver/radarr "LinuxServer.io's Radarr container") or [linuxserver/sonarr](https://hub.docker.com/r/linuxserver/sonarr "LinuxServer.io's Sonarr container")) from Docker Hub: + `docker pull linuxserver/radarr:preview` OR + `docker pull linuxserver/sonarr:preview` + +2. Configure the Docker container with all the port, volume, and environment settings from the *original container documentation* here: + **[linuxserver/radarr](https://hub.docker.com/r/linuxserver/radarr "Radarr Docker container")** + **[linuxserver/sonarr](https://hub.docker.com/r/linuxserver/sonarr "Sonarr Docker container")** + 1. Add the **DOCKER_MODS** environment variable to the `docker create` command, as follows: + `-e DOCKER_MODS=linuxserver/mods:radarr-striptracks` + + *Example Synology Configuration* + ![striptracks](https://user-images.githubusercontent.com/11523885/95027314-1e006680-065d-11eb-9ff9-cc51648d57bd.png "Synology container settings") + + 2. Start the container. + +3. After the above configuration is complete, to use mkvmerge, configure a custom script from the Settings->Connect screen and type the following in the **Path** field: + + `/usr/local/bin/striptracks-eng.sh` + + This is a wrapper script that calls striptracks.sh with the following arguments, which keep English audio and subtitles only! + `:eng:und :eng` + + *For any other combinations of audio and subtitles you **must** either use one of the [included wrapper scripts](./README.md#included-wrapper-scripts) or + create a custom script with the codes for the languages you want to keep. See the [Syntax](./README.md#syntax) section above. + Do not put `striptracks.sh` in the **Path** field!* + +### Included Wrapper Scripts +>**NOTE:** The **Arguments** field for Custom Scripts was removed in Radarr and Sonarr v3 due to security concerns. To support options with this version and later, +a wrapper script can be manually created that will call *striptracks.sh* with the required arguments. + +For your convenience, several wrapper scripts are included in the `/usr/local/bin/` directory. +You may use any of these scripts in place of the `striptracks-eng.sh` mentioned in the [Mod installation](./README.md#mod-installation) section above. + +``` +striptracks-dut.sh # Keep Dutch audio and subtitles +striptracks-eng.sh # Keep English and Undetermined audio and English subtitles +striptracks-eng-debug.sh # Keep English and Undetermined audio and English subtitles, and enable debug logging +striptracks-eng-jpn.sh # Keep English, Japanese, and Undetermined audio and English subtitles +striptracks-fre.sh # Keep French audio and subtitles +striptracks-fre-debug.sh # Keep French audio and subtitles, and enable debug logging +striptracks-ger.sh # Keep German audio and subtitles +striptracks-spa.sh # Keep Spanish audio and subtitles +``` + +### Example Wrapper Script +To configure the last entry from the [Examples](./README.md#examples) section above, create and save a file called `wrapper.sh` to `/usr/local/bin` containing the following text: +``` +#!/bin/bash + +. /usr/local/bin/striptracks.sh :eng:kor:jpn :eng:spa +``` +Then put `/usr/local/bin/wrapper.sh` in the **Path** field in place of `/usr/local/bin/striptracks-eng.sh` mentioned in the [Mod installation](./README.md#mod-installation) section above. + +### Preview Triggers +The only events/notification triggers that have been tested are **On Import** and **On Upgrade** + +![striptracks](https://user-images.githubusercontent.com/11523885/95027374-9830eb00-065d-11eb-8ef7-8d69c9795cbe.png "Radarr/Sonarr custom script settings") + +### Preview Logs +The log can be inspected or downloaded from the Radarr/Sonarr GUI under System->Log Files + +___ + +# Credits + +This would not be possible without the following: + +[Radarr](http://radarr.video/ "Radarr homepage") +[Sonarr](http://sonarr.tv/ "Sonarr homepage") +[LinuxServer.io Radarr](https://hub.docker.com/r/linuxserver/radarr "Radarr Docker container") container +[LinuxServer.io Sonarr](https://hub.docker.com/r/linuxserver/sonarr "Sonarr Docker container") container +[LinuxServer.io Docker Mods](https://hub.docker.com/r/linuxserver/mods "Docker Mods containers") project +[MKVToolNix](https://mkvtoolnix.download/ "MKVToolNix homepage") by Moritz Bunkus +The AWK script parsing mkvmerge output is adapted from Endoro's post on [VideoHelp](https://forum.videohelp.com/threads/343271-BULK-remove-non-English-tracks-from-MKV-container#post2292889). + +[warning]: http://files.softicons.com/download/application-icons/32x32-free-design-icons-by-aha-soft/png/32/Warning.png "Warning" +[warning24]: http://files.softicons.com/download/toolbar-icons/24x24-free-pixel-icons-by-aha-soft/png/24x24/Warning.png "Warning" diff --git a/root/etc/cont-init.d/60-striptracks-init b/root/etc/cont-init.d/60-striptracks-init new file mode 100644 index 0000000..f363fcb --- /dev/null +++ b/root/etc/cont-init.d/60-striptracks-init @@ -0,0 +1,47 @@ +#!/usr/bin/with-contenv bash + +cat <>> Striptracks Mod by TheCaptain989 <<< +Repo: https://github.com/linuxserver/docker-mods/tree/radarr-striptracks + +Version: $(cat /etc/version.tc989) +---------------- +EOF + +# Determine if setup is needed +if [ ! -f /usr/bin/mkvmerge ]; then + echo "Running first time setup." + + if [ -f /usr/bin/apt ]; then + # Ubuntu + echo "Installing MKVToolNix using apt-get" + apt-get update && \ + apt-get -y install mkvtoolnix && \ + rm -rf /var/lib/apt/lists/* + elif [ -f /sbin/apk ]; then + # Alpine + echo "Installing MKVToolNix using apk" + apk add mkvtoolnix && \ + rm -rf /var/lib/apt/lists/* + else + # Unknown + echo "Unknown package manager. Attempting to install MKVToolNix using apt-get" + apt-get update && \ + apt-get -y install mkvtoolnix && \ + rm -rf /var/lib/apt/lists/* + fi +fi + +# Change ownership +if [ $(stat -c '%G' /usr/local/bin/striptracks.sh) != "users" ]; then + echo "Changing ownership on scripts." + chown root:users /usr/local/bin/striptracks*.sh +fi + +# Make executable +if [ ! -x /usr/local/bin/striptracks.sh ]; then + echo "Making scripts executable." + chmod +x /usr/local/bin/striptracks*.sh +fi + diff --git a/root/etc/cont-init.d/98-vpn-config b/root/etc/cont-init.d/98-vpn-config deleted file mode 100644 index a5f9127..0000000 --- a/root/etc/cont-init.d/98-vpn-config +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/with-contenv bash - -# Determine if setup is needed -if [ ! -f /usr/local/lib/python***/dist-packages/sshuttle ] && \ -[ -f /usr/bin/apt ]; then - ## Ubuntu - apt-get update - apt-get install --no-install-recommends -y \ - iptables \ - openssh-client \ - python3 \ - python3-pip - pip3 install sshuttle -fi -if [ ! -f /usr/lib/python***/site-packages/sshuttle ] && \ -[ -f /sbin/apk ]; then - # Alpine - apk add --no-cache \ - iptables \ - openssh \ - py3-pip \ - python3 - pip3 install sshuttle -fi - -chown -R root:root /root -chmod -R 600 /root/.ssh diff --git a/root/usr/local/bin/striptracks-dut.sh b/root/usr/local/bin/striptracks-dut.sh new file mode 100644 index 0000000..e2c19af --- /dev/null +++ b/root/usr/local/bin/striptracks-dut.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/striptracks.sh :dut :dut diff --git a/root/usr/local/bin/striptracks-eng-debug.sh b/root/usr/local/bin/striptracks-eng-debug.sh new file mode 100644 index 0000000..87ed2bb --- /dev/null +++ b/root/usr/local/bin/striptracks-eng-debug.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/striptracks.sh -d :eng:und :eng diff --git a/root/usr/local/bin/striptracks-eng-jpn.sh b/root/usr/local/bin/striptracks-eng-jpn.sh new file mode 100644 index 0000000..ea37f5d --- /dev/null +++ b/root/usr/local/bin/striptracks-eng-jpn.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/striptracks.sh :eng:jpn:und :eng diff --git a/root/usr/local/bin/striptracks-eng.sh b/root/usr/local/bin/striptracks-eng.sh new file mode 100644 index 0000000..a0eb344 --- /dev/null +++ b/root/usr/local/bin/striptracks-eng.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/striptracks.sh :eng:und :eng diff --git a/root/usr/local/bin/striptracks-fre-debug.sh b/root/usr/local/bin/striptracks-fre-debug.sh new file mode 100644 index 0000000..918a198 --- /dev/null +++ b/root/usr/local/bin/striptracks-fre-debug.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/striptracks.sh -d :fre:fra :fre:fra diff --git a/root/usr/local/bin/striptracks-fre.sh b/root/usr/local/bin/striptracks-fre.sh new file mode 100644 index 0000000..998ce43 --- /dev/null +++ b/root/usr/local/bin/striptracks-fre.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/striptracks.sh :fre:fra :fre:fra diff --git a/root/usr/local/bin/striptracks-ger.sh b/root/usr/local/bin/striptracks-ger.sh new file mode 100644 index 0000000..62047ab --- /dev/null +++ b/root/usr/local/bin/striptracks-ger.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/striptracks.sh :ger:deu :ger:deu diff --git a/root/usr/local/bin/striptracks-spa.sh b/root/usr/local/bin/striptracks-spa.sh new file mode 100644 index 0000000..92f6c4e --- /dev/null +++ b/root/usr/local/bin/striptracks-spa.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/striptracks.sh :spa :spa diff --git a/root/usr/local/bin/striptracks.sh b/root/usr/local/bin/striptracks.sh new file mode 100644 index 0000000..9d9034b --- /dev/null +++ b/root/usr/local/bin/striptracks.sh @@ -0,0 +1,489 @@ +#!/bin/bash + +# Video remuxing script designed for use with Radarr and Sonarr +# Automatically strips out unwanted audio and subtitle streams, keeping only the desired languages. +# https://github.com/linuxserver/docker-mods/tree/radarr-striptracks + +# Adapted and corrected from Endoro's post 1/5/2014: +# https://forum.videohelp.com/threads/343271-BULK-remove-non-English-tracks-from-MKV-container#post2292889 +# +# Put a colon `:` in front of every language code. Expects ISO639-2 codes + +# Dependencies: +# mkvmerge +# awk +# curl +# jq +# numfmt +# stat +# nice + +# Exit codes: +# 0 - success; or test +# 1 - no video file specified on command line +# 2 - no audio language specified on command line +# 3 - no subtitle language specified on command line +# 4 - mkvmerge not found +# 5 - specified video file not found +# 6 - unable to rename video to temp video +# 10 - remuxing completed, but no output file found +# 20 - general error + +### Variables +export striptracks_script=$(basename "$0") +export striptracks_pid=$$ +export striptracks_arr_config=/config/config.xml +export striptracks_log=/config/logs/striptracks.txt +export striptracks_maxlogsize=512000 +export striptracks_maxlog=4 +export striptracks_debug=0 +export striptracks_type=$(printenv | sed -n 's/_eventtype *=.*$//p') +if [[ "${striptracks_type,,}" = "radarr" ]]; then + export striptracks_video="$radarr_moviefile_path" + export striptracks_api_endpoint="movie" + export striptracks_json_quality_root=".movieFile" + export striptracks_video_type="movie" + export striptracks_title="$radarr_movie_title ($radarr_movie_year)" +else + if [[ "${striptracks_type,,}" = "sonarr" ]]; then + export striptracks_video="$sonarr_episodefile_path" + export striptracks_api_endpoint="episodefile" + export striptracks_json_quality_root="" + export striptracks_video_type="series" + export striptracks_title="$sonarr_series_title $(numfmt --format "%02f" $sonarr_episodefile_seasonnumber)x$(numfmt --format "%02f" $sonarr_episodefile_episodenumbers) - $sonarr_episodefile_episodetitles" + fi +fi +export striptracks_api="Rescan${striptracks_video_type^}" +export striptracks_json_key="${striptracks_video_type}Id" +export striptracks_api_endpoint_idname="${striptracks_type,,}_${striptracks_api_endpoint}_id" +export striptracks_api_endpoint_id="${!striptracks_api_endpoint_idname}" +export striptracks_video_idname="${striptracks_type,,}_${striptracks_video_type}_id" +export striptracks_video_id="${!striptracks_video_idname}" +export striptracks_eventtype="${striptracks_type,,}_eventtype" +export striptracks_tempvideo="${striptracks_video}.tmp" +export striptracks_newvideo="${striptracks_video%.*}.mkv" +export striptracks_db="/config/${striptracks_type,,}.db" +if [ ! -f "$striptracks_db" ]; then + striptracks_db=/config/nzbdrone.db +fi +export striptracks_recyclebin=$(sqlite3 $striptracks_db 'SELECT Value FROM Config WHERE Key="recyclebin"') +RET=$?; [ "$RET" != 0 ] && >&2 echo "WARNING[$RET]: Unable to read recyclebin information from database \"$striptracks_db\"" + +### Functions +function usage { + usage=" +$striptracks_script +Video remuxing script designed for use with Radarr and Sonarr + +Source: https://github.com/TheCaptain989/radarr-striptracks + +Usage: + $0 [-d] + +Arguments: + audio_languages # ISO639-2 code(s) prefixed with a colon \`:\` + Multiple codes may be concatenated. + subtitle_languages # ISO639-2 code(s) prefixed with a colon \`:\` + Multiple codes may be concatenated. + +Options: + -d # enable debug logging + +Examples: + $striptracks_script :eng:und :eng # keep English and Undetermined audio and + English subtitles + $striptracks_script :eng \"\" # keep English audio and no subtitles + $striptracks_script -d :eng:kor:jpn :eng:spa # Enable debugging, keeping English, Korean, + and Japanese audio, and English and + Spanish subtitles +" + >&2 echo "$usage" +} +# Can still go over striptracks_maxlog if read line is too long +# Must include whole function in subshell for read to work! +function log {( + while read + do + echo $(date +"%Y-%-m-%-d %H:%M:%S.%1N")\|"[$striptracks_pid]$REPLY" >>"$striptracks_log" + local FILESIZE=$(stat -c %s "$striptracks_log") + if [ $FILESIZE -gt $striptracks_maxlogsize ] + then + for i in $(seq $((striptracks_maxlog-1)) -1 0); do + [ -f "${striptracks_log::-4}.$i.txt" ] && mv "${striptracks_log::-4}."{$i,$((i+1))}".txt" + done + [ -f "${striptracks_log::-4}.txt" ] && mv "${striptracks_log::-4}.txt" "${striptracks_log::-4}.0.txt" + touch "$striptracks_log" + fi + done +)} +# Inspired by https://stackoverflow.com/questions/893585/how-to-parse-xml-in-bash +function read_xml { + local IFS=\> + read -d \< ENTITY CONTENT +} +# Get video information +function get_video_info { + [ $striptracks_debug -eq 1 ] && echo "Debug|Getting video information for $striptracks_api_endpoint '$striptracks_api_endpoint_id'. Calling ${striptracks_type^} API using GET and URL 'http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/$striptracks_api_endpoint/$striptracks_api_endpoint_id?apikey=(removed)'" | log + RESULT=$(curl -s -H "Content-Type: application/json" \ + -X GET http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/$striptracks_api_endpoint/$striptracks_api_endpoint_id?apikey=$striptracks_apikey) + [ $striptracks_debug -eq 1 ] && echo "API returned: $RESULT" | awk '{print "Debug|"$0}' | log + if [ "$(echo $RESULT | jq -crM .path)" != "null" ]; then + local RET=0 + else + local RET=1 + fi + return $RET +} +# Initiate API Rescan request +function rescan { + MSG="Info|Calling ${striptracks_type^} API to rescan ${striptracks_video_type}, try #$i" + echo "$MSG" | log + [ $striptracks_debug -eq 1 ] && echo "Debug|Forcing rescan of $striptracks_json_key '$striptracks_video_id', try #$i. Calling ${striptracks_type^} API '$striptracks_api' using POST and URL 'http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/command?apikey=(removed)'" | log + RESULT=$(curl -s -d "{name: '$striptracks_api', $striptracks_json_key: $striptracks_video_id}" -H "Content-Type: application/json" \ + -X POST http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/command?apikey=$striptracks_apikey) + [ $striptracks_debug -eq 1 ] && echo "API returned: $RESULT" | awk '{print "Debug|"$0}' | log + JOBID="$(echo $RESULT | jq -crM .id)" + if [ "$JOBID" != "null" ]; then + local RET=0 + else + local RET=1 + fi + return $RET +} +# Check result of rescan job +function check_rescan { + local i=0 + for ((i=1; i <= 15; i++)); do + [ $striptracks_debug -eq 1 ] && echo "Debug|Checking job $JOBID completion, try #$i. Calling ${striptracks_type^} API using GET and URL 'http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/command/$JOBID?apikey=(removed)'" | log + RESULT=$(curl -s -H "Content-Type: application/json" \ + -X GET http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/command/$JOBID?apikey=$striptracks_apikey) + [ $striptracks_debug -eq 1 ] && echo "API returned: $RESULT" | awk '{print "Debug|"$0}' | log + if [ "$(echo $RESULT | jq -crM .status)" = "completed" ]; then + local RET=0 + break + else + if [ "$(echo $RESULT | jq -crM .status)" = "failed" ]; then + local RET=2 + break + else + local RET=1 + sleep 1 + fi + fi + done + return $RET +} + +# Process options +while getopts ":d" opt; do + case ${opt} in + d ) # For debug purposes only + MSG="Debug|Enabling debug logging." + echo "$MSG" | log + >&2 echo "$MSG" + striptracks_debug=1 + printenv | sort | sed 's/^/Debug|/' | log + ;; + esac +done +shift $((OPTIND -1)) + +if [ -z "$1" ]; then + MSG="Error|No audio languages specified!" + echo "$MSG" | log + >&2 echo "$MSG" + usage + exit 2 +fi + +if [ -z "$2" ]; then + MSG="Error|No subtitles languages specified!" + echo "$MSG" | log + >&2 echo "$MSG" + usage + exit 3 +fi + +if [ ! -f "/usr/bin/mkvmerge" ]; then + MSG="Error|/usr/bin/mkvmerge is required by this script" + echo "$MSG" | log + >&2 echo "$MSG" + exit 4 +fi + +if [[ "${!striptracks_eventtype}" = "Test" ]]; then + echo "Info|${striptracks_type^} event: ${!striptracks_eventtype}" | log + echo "Info|Script was test executed successfully." | log + exit 0 +fi + +if [ -z "$striptracks_video" ]; then + MSG="Error|No video file specified! Not called from Radarr/Sonarr?" + echo "$MSG" | log + >&2 echo "$MSG" + usage + exit 1 +fi + +if [ ! -f "$striptracks_video" ]; then + MSG="Error|Input file not found: \"$striptracks_video\"" + echo "$MSG" | log + >&2 echo "$MSG" + exit 5 +fi + +#### BEGIN MAIN +FILESIZE=$(numfmt --to iec --format "%.3f" $(stat -c %s "$striptracks_video")) +MSG="Info|${striptracks_type^} event: ${!striptracks_eventtype}, Video: $striptracks_video, Size: $FILESIZE, AudioKeep: $1, SubsKeep: $2" +echo "$MSG" | log + +# Rename the original video file to a temporary name +[ $striptracks_debug -eq 1 ] && echo "Debug|Renaming: \"$striptracks_video\" to \"$striptracks_tempvideo\"" | log +mv -f "$striptracks_video" "$striptracks_tempvideo" | log +RET=$?; [ "$RET" != 0 ] && { + MSG="ERROR[$RET]: Unable to rename video: \"$striptracks_video\" to temp video: \"$striptracks_tempvideo\". Halting." + echo "$MSG" | log + >&2 echo "$MSG" + exit 6 +} + +# Read in the output of mkvmerge info extraction +[ $striptracks_debug -eq 1 ] && echo "Debug|Executing: /usr/bin/mkvmerge -J \"$striptracks_tempvideo\"" | log +JSON=$(/usr/bin/mkvmerge -J "$striptracks_tempvideo") +RET=$?; [ "$RET" != 0 ] && { + MSG="ERROR[$RET]: Error executing mkvmerge." + echo "$MSG" | log + >&2 echo "$MSG" +} + +# This and the modified AWK script are a hack, and I know it. JQ is crazy hard to learn, BTW. +# Mimic the mkvmerge --identify-verbose option that has been deprecated +JSON_PROCESSED=$(echo $JSON | jq -jcrM ' +( if (.chapters | .[] | .num_entries) then + "Chapters: \(.chapters | .[] | .num_entries) entries\n" + else + "" + end +), +( .tracks | + .[] | + ( "Track ID \(.id): \(.type) (\(.codec)) [", + ( [.properties | to_entries |.[] | "\(.key):\(.value | tostring | gsub(" "; "\\s"))"] | join(" ")), + "]\n" ) +) +') +[ $striptracks_debug -eq 1 ] && echo "$JSON_PROCESSED" | awk '{print "Debug|"$0}' | log + +echo "$JSON_PROCESSED" | awk -v Debug=$striptracks_debug \ +-v OrgVideo="$striptracks_video" \ +-v TempVideo="$striptracks_tempvideo" \ +-v MKVVideo="$striptracks_newvideo" \ +-v Title="$striptracks_title" \ +-v AudioKeep="$1" \ +-v SubsKeep="$2" ' +BEGIN { + MKVMerge="/usr/bin/mkvmerge" + FS="[\t\n: ]" + IGNORECASE=1 +} +/^Track ID/ { + FieldCount=split($0, Fields) + if (Fields[1]=="Track") { + NoTr++ + Track[NoTr, "id"]=Fields[3] + Track[NoTr, "typ"]=Fields[5] + if (Fields[6]~/^\(/) { + Track[NoTr, "code"]=substr(Line,1,match(Line,/\)/)) + sub(/^[^\(]+/,"",Track[NoTr, "code"]) + } + if (Track[NoTr, "typ"]=="video") VidCnt++ + if (Track[NoTr, "typ"]=="audio") AudCnt++ + if (Track[NoTr, "typ"]=="subtitles") SubsCnt++ + for (i=6; i<=FieldCount; i++) { + if (Fields[i]=="language") Track[NoTr, "lang"]=Fields[++i] + } + } +} +/^Chapters/ { + Chapters=$3 +} +END { + if (!NoTr) { print "Error|No tracks found in \""TempVideo"\"" > "/dev/stderr"; exit } + if (!AudCnt) AudCnt=0; if (!SubsCnt) SubsCnt=0 + print "Info|Original tracks: "NoTr" (audio: "AudCnt", subtitles: "SubsCnt")" + if (Chapters) print "Info|Chapters: "Chapters + for (i=1; i<=NoTr; i++) { + if (Debug) print "Debug|i:"i,"Track ID:"Track[i,"id"],"Type:"Track[i,"typ"],"Lang:"Track[i, "lang"],"Code:"Track[i, "code"] + if (Track[i, "typ"]=="audio") { + if (AudioKeep~Track[i, "lang"]) { + AudKpCnt++ + print "Info|Keeping audio track "Track[i, "id"]": "Track[i, "lang"]" "Track[i, "code"] + if (AudioCommand=="") { + AudioCommand=Track[i, "id"] + } else { + AudioCommand=AudioCommand","Track[i, "id"] + } + # Special case if there is only one audio track, even if it was not specified + } else if (AudCnt==1) { + AudKpCnt++ + print "Info|Keeping only audio track "Track[i, "id"]": "Track[i, "lang"]" "Track[i, "code"] + AudioCommand=Track[i, "id"] + # Special case if there were multiple tracks, none were selected, and this is the last one. + } else if (AudioCommand=="" && Track[i, "id"]==AudCnt) { + AudKpCnt++ + print "Info|Keeping last audio track "Track[i, "id"]": "Track[i, "lang"]" "Track[i, "code"] + AudioCommand=Track[i, "id"] + } else { + if (Debug) print "Debug|\tRemove:", Track[i, "typ"], "track", Track[i, "id"], Track[i, "lang"] + } + } else { + if (Track[i, "typ"]=="subtitles") { + if (SubsKeep~Track[i, "lang"]) { + SubsKpCnt++ + print "Info|Keeping subtitle track "Track[i, "id"]": "Track[i, "lang"]" "Track[i, "code"] + if (SubsCommand=="") { + SubsCommand=Track[i, "id"] + } else { + SubsCommand=SubsCommand","Track[i, "id"] + } + } else { + if (Debug) print "Debug|\tRemove:", Track[i, "typ"], "track", Track[i, "id"], Track[i, "lang"] + } + } + } + } + if (!AudKpCnt) AudKpCnt=0; if (!SubsKpCnt) SubsKpCnt=0 + print "Info|Kept tracks: "AudKpCnt+SubsKpCnt+VidCnt" (audio: "AudKpCnt", subtitles: "SubsKpCnt")" + if (AudioCommand=="") { + # This should never happen, but belt and suspenders + CommandLine="-A" + } else { + CommandLine="-a "AudioCommand + } + if (SubsCommand=="") { + CommandLine=CommandLine" -S" + } else { + CommandLine=CommandLine" -s "SubsCommand + } + if (Debug) print "Debug|Executing: nice "MKVMerge" --title \""Title"\" -q -o \""MKVVideo"\" "CommandLine" \""TempVideo"\"" + Result=system("nice "MKVMerge" --title \""Title"\" -q -o \""MKVVideo"\" "CommandLine" \""TempVideo"\"") + if (Result>1) print "Error|"Result" remuxing \""TempVideo"\"" > "/dev/stderr" +}' | log + +#### END MAIN + +# Check for script completion and non-empty file +if [ -s "$striptracks_newvideo" ]; then + # Use Recycle Bin if configured + if [ "$striptracks_recyclebin" ]; then + [ $striptracks_debug -eq 1 ] && echo "Debug|Moving: \"$striptracks_tempvideo\" to \"${striptracks_recyclebin%/}/$(basename "$striptracks_video")"\" | log + mv "$striptracks_tempvideo" "${striptracks_recyclebin%/}/$(basename "$striptracks_video")" | log + else + [ $striptracks_debug -eq 1 ] && echo "Debug|Deleting: \"$striptracks_tempvideo\"" | log + rm "$striptracks_tempvideo" | log + fi +else + MSG="Error|Unable to locate or invalid remuxed file: \"$striptracks_newvideo\". Undoing rename." + echo "$MSG" | log + >&2 echo "$MSG" + [ $striptracks_debug -eq 1 ] && echo "Debug|Renaming: \"$striptracks_tempvideo\" to \"$striptracks_video\"" | log + mv -f "$striptracks_tempvideo" "$striptracks_video" | log + exit 10 +fi + +FILESIZE=$(numfmt --to iec --format "%.3f" $(stat -c %s "$striptracks_newvideo")) +MSG="Info|New size: $FILESIZE" +echo "$MSG" | log + +# Call *arr API to RescanMovie/RescanSeries +if [ -f "$striptracks_arr_config" ]; then + # Read *arr config.xml + while read_xml; do + [[ $ENTITY = "Port" ]] && striptracks_port=$CONTENT + [[ $ENTITY = "UrlBase" ]] && striptracks_urlbase=$CONTENT + [[ $ENTITY = "BindAddress" ]] && striptracks_bindaddress=$CONTENT + [[ $ENTITY = "ApiKey" ]] && striptracks_apikey=$CONTENT + done < $striptracks_arr_config + + [[ $striptracks_bindaddress = "*" ]] && striptracks_bindaddress=localhost + + # Check for video ID + if [ "$striptracks_video_id" ]; then + # Call API + if [ "${striptracks_type,,}" = "radarr" ] && get_video_info; then + # Save original quality + ORGQUALITY=$(echo $RESULT | jq -crM ${striptracks_json_quality_root}.quality) + fi + # Loop a maximum of twice + for ((i=1; $i <= 2; i++)); do + # Scan the disk for the new movie file + if rescan; then + # Check that the Rescan completed + if check_rescan; then + # This whole section doesn't work under Sonarr because the episodefile_id changes after the RescanSeries if the filename changes + # Should look into just using a PUT to change everything at once instead of a Rescan. + if [ "${striptracks_type,,}" = "radarr" ]; then + if get_video_info; then + # Check that the file didn't get lost in the Rescan. + # Radarr sometimes needs to Rescan twice when the file extension changes + # (.avi -> .mkv for example) + if [ "$(echo $RESULT | jq -crM .hasFile)" = "true" ]; then + # If we lost the quality information, put it back + # NOTE: This "works" with Radarr in that the change shows up in the GUI, but only until the page changes. + # It doesn't seem to write the info permanently. Maybe an API bug? + if [ "$(echo $RESULT | jq -crM ${striptracks_json_quality_root}.quality.quality.name)" = "Unknown" ]; then + [ $striptracks_debug -eq 1 ] && echo "Debug|Updating quality to '$(echo $ORGQUALITY | jq -crM .quality.name)'. Calling ${striptracks_type^} API using PUT and URL 'http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/$striptracks_api_endpoint/$striptracks_video_id?apikey=(removed)'" | log + RESULT=$(curl -s -d "$(echo $RESULT | jq -crM "${striptracks_json_quality_root}.quality=$ORGQUALITY")" -H "Content-Type: application/json" \ + -X PUT http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/$striptracks_api_endpoint/$striptracks_video_id?apikey=$striptracks_apikey) + [ $striptracks_debug -eq 1 ] && echo "API returned: $RESULT" | awk '{print "Debug|"$0}' | log + if [ "$(echo $RESULT | jq -crM ${striptracks_json_quality_root}.quality.quality.name)" = "Unknown" ]; then + MSG="Warn|Unable to update ${striptracks_type^} $striptracks_api_endpoint '$striptracks_title' to quality '$(echo $ORGQUALITY | jq -crM .quality.name)'" + echo "$MSG" | log + >&2 echo "$MSG" + fi + fi + # The video record is [now] good + break + else + # Loop again because there was no file + continue + fi + else + # No 'path' in returned JSON. + MSG="Warn|The '$striptracks_api' API with $striptracks_api_endpoint $striptracks_api_endpoint_id returned no path." + echo "$MSG" | log + >&2 echo "$MSG" + fi + else + # Didn't do anything because we're in Sonarr + break + fi + else + # Timeout or failure + MSG="Warn|${striptracks_type^} job ID $JOBID timed out or failed." + echo "$MSG" | log + >&2 echo "$MSG" + fi + else + # Error from API + MSG="Error|The '$striptracks_api' API with $striptracks_json_key $striptracks_video_id failed." + echo "$MSG" | log + >&2 echo "$MSG" + fi + done + else + # No video ID means we can't call the API + MSG="Warn|Missing environment variable: $striptracks_video_idname" + echo "$MSG" | log + >&2 echo "$MSG" + fi +else + # No config file means we can't call the API + MSG="Warn|Unable to locate ${striptracks_type^} config file: '$striptracks_arr_config'" + echo "$MSG" | log + >&2 echo "$MSG" +fi + +# Cool bash feature +MSG="Info|Completed in $(($SECONDS/60))m $(($SECONDS%60))s" +echo "$MSG" | log From fd11a826af2068382fa2706181ccc90480e191d3 Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Wed, 7 Oct 2020 20:13:39 -0500 Subject: [PATCH 06/13] Updates per aptalca --- Dockerfile | 26 ------------------- README.md | 1 - .../{60-striptracks-init => 98-striptracks} | 4 +-- 3 files changed, 2 insertions(+), 29 deletions(-) rename root/etc/cont-init.d/{60-striptracks-init => 98-striptracks} (92%) diff --git a/Dockerfile b/Dockerfile index bdb716f..45aa101 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,33 +2,7 @@ FROM lsiobase/ubuntu:xenial as buildstage # Build arguments -ARG BUILD_DATE -ARG VCS_REF ARG VERSION -ARG DOCKERHUB -ARG BASEIMAGE -ARG MODNAME - -# Build-time metadata as defined at http://label-schema.org -LABEL org.label-schema.name="${DOCKERHUB}:${BASEIMAGE}-${MODNAME}" \ - org.label-schema.description="A Docker Mod for the LinuxServer.io Radarr/Sonarr container that adds mkvtoolnix and script for remuxing video files" \ - org.label-schema.url="https://hub.docker.com/r/${DOCKERHUB}" \ - org.label-schema.version=$VERSION \ - org.label-schema.build-date=$BUILD_DATE \ - org.label-schema.vendor="TheCaptain989" \ - org.label-schema.schema-version="1.0" \ - org.label-schema.vcs-url="https://github.com/linuxserver/docker-mods/tree/radarr-striptracks/" \ - org.label-schema.vcs-ref=$VCS_REF - -# Build-time metadata as defined at https://github.com/opencontainers/image-spec -LABEL org.opencontainers.image.title="${DOCKERHUB}:${BASEIMAGE}-${MODNAME}" \ - org.opencontainers.image.description="A Docker Mod for the LinuxServer.io Radarr/Sonarr container that adds mkvtoolnix and script for remuxing video files" \ - org.opencontainers.image.url="https://hub.docker.com/r/${DOCKERHUB}" \ - org.opencontainers.image.version=$VERSION \ - org.opencontainers.image.created=$BUILD_DATE \ - org.opencontainers.image.vendor="TheCaptain989" \ - org.opencontainers.image.source="https://github.com/linuxserver/docker-mods/tree/radarr-striptracks/" \ - org.opencontainers.image.revision=$VCS_REF # Add version number for use in container init script RUN mkdir -p /root-layer/etc && \ diff --git a/README.md b/README.md index 6bf7440..206f3d6 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,6 @@ Chapters, if they exist, are preserved. The Title attribute in the MKV is set to Container info: ![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/linuxserver/mods/radarr-striptracks) -![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/mods/radarr-striptracks "Container Pulls") # Installation >**NOTE:** See the [Sonarr/Radarr v3 Builds](./README.md#sonarrradarr-v3-builds) section below for important differences to these instructions for v3 builds. diff --git a/root/etc/cont-init.d/60-striptracks-init b/root/etc/cont-init.d/98-striptracks similarity index 92% rename from root/etc/cont-init.d/60-striptracks-init rename to root/etc/cont-init.d/98-striptracks index f363fcb..e072fa7 100644 --- a/root/etc/cont-init.d/60-striptracks-init +++ b/root/etc/cont-init.d/98-striptracks @@ -22,7 +22,7 @@ if [ ! -f /usr/bin/mkvmerge ]; then elif [ -f /sbin/apk ]; then # Alpine echo "Installing MKVToolNix using apk" - apk add mkvtoolnix && \ + apk add --no-cache mkvtoolnix && \ rm -rf /var/lib/apt/lists/* else # Unknown @@ -36,7 +36,7 @@ fi # Change ownership if [ $(stat -c '%G' /usr/local/bin/striptracks.sh) != "users" ]; then echo "Changing ownership on scripts." - chown root:users /usr/local/bin/striptracks*.sh + chown abc:abc /usr/local/bin/striptracks*.sh fi # Make executable From 705c6454c9b0563eaf00bc904a6f5c39240501dc Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Wed, 7 Oct 2020 20:17:49 -0500 Subject: [PATCH 07/13] Update 98-striptracks Fixed the inconsistent stat command after a change to chown --- root/etc/cont-init.d/98-striptracks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/root/etc/cont-init.d/98-striptracks b/root/etc/cont-init.d/98-striptracks index e072fa7..8aa9ba1 100644 --- a/root/etc/cont-init.d/98-striptracks +++ b/root/etc/cont-init.d/98-striptracks @@ -34,7 +34,7 @@ if [ ! -f /usr/bin/mkvmerge ]; then fi # Change ownership -if [ $(stat -c '%G' /usr/local/bin/striptracks.sh) != "users" ]; then +if [ $(stat -c '%G' /usr/local/bin/striptracks.sh) != "abc" ]; then echo "Changing ownership on scripts." chown abc:abc /usr/local/bin/striptracks*.sh fi From 9894f804f5258cb8fdbbb79e22170d573747031a Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Tue, 13 Oct 2020 18:26:20 -0500 Subject: [PATCH 08/13] Updated image links - Added .assets folder for images - Corrected Synology picture --- .assets/striptracks-synology.png | Bin 0 -> 13260 bytes .assets/striptracks-v2-custom-script.png | Bin 0 -> 26204 bytes .assets/striptracks-v3-custom-script.png | Bin 0 -> 64455 bytes README.md | 8 ++++---- 4 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 .assets/striptracks-synology.png create mode 100644 .assets/striptracks-v2-custom-script.png create mode 100644 .assets/striptracks-v3-custom-script.png diff --git a/.assets/striptracks-synology.png b/.assets/striptracks-synology.png new file mode 100644 index 0000000000000000000000000000000000000000..84c9af795eb6d559d62c3b8a04acec0b32c31f8b GIT binary patch literal 13260 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 YC}GutPrchAE(fS8YCSJ~`YPyu0Y5#53IG5A literal 0 HcmV?d00001 diff --git a/.assets/striptracks-v2-custom-script.png b/.assets/striptracks-v2-custom-script.png new file mode 100644 index 0000000000000000000000000000000000000000..7a2b2fe249dbf900c5f634e862781c8c9e3743c0 GIT binary patch literal 26204 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 literal 0 HcmV?d00001 diff --git a/.assets/striptracks-v3-custom-script.png b/.assets/striptracks-v3-custom-script.png new file mode 100644 index 0000000000000000000000000000000000000000..d9e856427753cec506e1825b8166ace6ae138c6e GIT binary patch literal 64455 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�S?`pI^x3FN*5)NFfl6-oFQzzd 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

&muz(RYAn# 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 literal 0 HcmV?d00001 diff --git a/.assets/lidarr-synology.png b/.assets/lidarr-synology.png new file mode 100644 index 0000000000000000000000000000000000000000..d29fe585e811b3a7cb69127c44abe819c6cc0d9f GIT binary patch literal 13074 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 z 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 H-Io6kvePe~ literal 0 HcmV?d00001 diff --git a/.assets/striptracks-synology.png b/.assets/striptracks-synology.png deleted file mode 100644 index 84c9af795eb6d559d62c3b8a04acec0b32c31f8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13260 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 YC}GutPrchAE(fS8YCSJ~`YPyu0Y5#53IG5A diff --git a/.assets/striptracks-v2-custom-script.png b/.assets/striptracks-v2-custom-script.png deleted file mode 100644 index 7a2b2fe249dbf900c5f634e862781c8c9e3743c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26204 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 diff --git a/.assets/striptracks-v3-custom-script.png b/.assets/striptracks-v3-custom-script.png deleted file mode 100644 index d9e856427753cec506e1825b8166ace6ae138c6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64455 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�S?`pI^x3FN*5)NFfl6-oFQzzd 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

&RaYSICo74yETWTc2S5L} zb_F2PKur5}?;Q6mrmjpNwf4O$W=c35gfgQpe0BIS97=FWvZMRDLr|8%0Dp$F8ql6P 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 G`QHF**NOTE:** This mod support Linux OSes only. Container info: -![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/linuxserver/mods/radarr-striptracks) +![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/linuxserver/mods/lidarr-flac2mp3)) # Installation ->**NOTE:** See the [Sonarr/Radarr v3 Builds](./README.md#sonarrradarr-v3-builds) section below for important differences to these instructions for v3 builds. - -1. Pull your selected container ([linuxserver/radarr](https://hub.docker.com/r/linuxserver/radarr "LinuxServer.io's Radarr container") or [linuxserver/sonarr](https://hub.docker.com/r/linuxserver/sonarr "LinuxServer.io's Sonarr container")) from Docker Hub: - `docker pull linuxserver/radarr:latest` OR - `docker pull linuxserver/sonarr:latest` +1. Pull the [linuxserver/lidarr](https://hub.docker.com/r/linuxserver/lidarr "LinuxServer.io's Lidarr container") docker image from Docker Hub: + `docker pull linuxserver/lidarr:latest` 2. Configure the Docker container with all the port, volume, and environment settings from the *original container documentation* here: - **[linuxserver/radarr](https://hub.docker.com/r/linuxserver/radarr "Radarr Docker container")** - **[linuxserver/sonarr](https://hub.docker.com/r/linuxserver/sonarr "Sonarr Docker container")** + **[linuxserver/lidarr](https://hub.docker.com/r/linuxserver/lidarr "Docker container")** 1. Add the **DOCKER_MODS** environment variable to the `docker create` command, as follows: - `-e DOCKER_MODS=linuxserver/mods:radarr-striptracks` + `-e DOCKER_MODS=linuxserver/mods:lidarr-flac2mp3` *Example Synology Configuration* - ![striptracks](.assets/striptracks-synology.png "Synology container settings") + ![flac2mp3](.assets/lidarr-synology.png "Synology container settings") 2. Start the container. -3. After all of the above configuration is complete, to use mkvmerge: - 1. Configure a custom script from the Radarr/Sonnar Settings->Connect screen and type the following in the **Path** field: - `/usr/local/bin/striptracks.sh` - - 2. Add the codes for the audio and subtitle languages you want to keep as **Arguments** (details in the [Syntax](./README.md#syntax) section below): - Suggested Example - **`:eng:und :eng`** +3. After all of the above configuration is complete, to use ffmpeg, configure a custom script from the Settings->Connect screen and type the following in the **Path** field: + `/usr/local/bin/flac2mp3.sh` ## Usage ->**NOTE:** See the [Sonarr/Radarr v3 Builds](./README.md#sonarrradarr-v3-builds) section below for important differences to these instructions for v3 builds. +New file(s) with an MP3 extension will be placed in the same directory as the original FLAC file(s). Existing MP3 files with the same track name will be overwritten. -The source video can be any mkvtoolnix supported video format. The output is an MKV file with the same name. - -If you've configured the Radarr/Sonarr Recycle Bin path correctly, the original video will be moved there. -![warning24] **NOTE:** If you have *not* configured the Recycle Bin, the original video file will be deleted/overwritten and permanently lost. +If you've configured the Lidarr Recycle Bin path correctly, the original video will be moved there. +![warning24] **NOTE:** If you have *not* configured the Recycle Bin, the original FLAC audio file(s) will be deleted and permanently lost. ### Syntax -The script accepts two arguments and one option in the **Arguments** field: +>**Note:** The **Arguments** field for Custom Scripts was removed in Lidarr release [v0.7.0.1347](https://github.com/lidarr/Lidarr/commit/b9d240924f8965ebb2c5e307e36b810ae076101e "Lidarr commit notes") due to security concerns. +To support options with this version and later, a wrapper script can be manually created that will call *flac2mp3.sh* with the required arguments. -`[-d] ` +The script accepts two options which may be placed in the **Arguments** field: -The arguments are language codes in [ISO639-2](https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes "List of ISO 639-2 codes") format. -These are three letter abbreviations prefixed with a colon ':', such as: +`[-d] [-b ]` -* :eng -* :fre -* :spa - -...etc. - -Multiple codes may be concatenated, such as `:eng:spa` for both English and Spanish. - -It is suggested to use `:eng:und :eng` if you are unsure of what to choose. This will keep English and Undetermined audio and English subtitles, if they exist. ->**NOTE:** The script is smart enough to not remove the last audio track. This way you don't have to specify every possible language if you are importing a -foreign film, for example. +The `-b bitrate` option, if specified, sets the output quality in bits per second. If no `-b` option is specified, the script will default to 320Kbps. The `-d` option enables debug logging. ### Examples ``` -:eng:und :eng # keep English and Undetermined audio and English subtitles --d :eng "" # Enable debugging, keeping English audio and no subtitles -:eng:kor:jpn :eng:spa # Keep English, Korean, and Japanese audio, and English and - Spanish subtitles +-b 320k # Output 320 kilobits per second MP3 (same as default behavior) +-d -b 160k # Enable debugging, and output 160 kilobits per second MP3 ``` -## Triggers -The only events/notification triggers that have been tested are **On Download** and **On Upgrade** - -![striptracks](.assets/striptracks-v2-custom-script.png "Radarr/Sonarr custom script settings") - -## Logs -A log file is created for the script activity called: - -`/config/logs/striptracks.txt` - -This log can be inspected or downloaded from the Radarr/Sonarr GUI under System->Logs->Files - -Script errors will show up in both the script log and the native Radarr/Sonarr log. - -Log rotation is performed with 5 log files of 512KB each being kept. ->![warning24] **NOTE:** If debug logging is enabled, the log file can grow very large very quickly. *Do not leave debug logging enabled permanently.* - -___ - -## Sonarr/Radarr v3 Builds ->![warning] **Warning: Unstable Releases** ![warning] ->The Sonarr/Radarr v3 Builds are the unstable releases (Aphrodite and Phantom) of Radarr and Sonarr. Though the mod works with all versions of the container, I cannot guarantee these releases are stable. - -Important differences for Sonarr/Radarr v3 Builds -### Mod installation -Substitute the following steps for those noted in the [Installation](./README.md#installation) section above. -1. Pull your selected container ([linuxserver/radarr](https://hub.docker.com/r/linuxserver/radarr "LinuxServer.io's Radarr container") or [linuxserver/sonarr](https://hub.docker.com/r/linuxserver/sonarr "LinuxServer.io's Sonarr container")) from Docker Hub: - `docker pull linuxserver/radarr:preview` OR - `docker pull linuxserver/sonarr:preview` - -2. Configure the Docker container with all the port, volume, and environment settings from the *original container documentation* here: - **[linuxserver/radarr](https://hub.docker.com/r/linuxserver/radarr "Radarr Docker container")** - **[linuxserver/sonarr](https://hub.docker.com/r/linuxserver/sonarr "Sonarr Docker container")** - 1. Add the **DOCKER_MODS** environment variable to the `docker create` command, as follows: - `-e DOCKER_MODS=linuxserver/mods:radarr-striptracks` - - *Example Synology Configuration* - ![striptracks](.assets/striptracks-synology.png "Synology container settings") - - 2. Start the container. - -3. After the above configuration is complete, to use mkvmerge, configure a custom script from the Settings->Connect screen and type the following in the **Path** field: - - `/usr/local/bin/striptracks-eng.sh` - - This is a wrapper script that calls striptracks.sh with the following arguments, which keep English audio and subtitles only! - `:eng:und :eng` - - *For any other combinations of audio and subtitles you **must** either use one of the [included wrapper scripts](./README.md#included-wrapper-scripts) or - create a custom script with the codes for the languages you want to keep. See the [Syntax](./README.md#syntax) section above. - Do not put `striptracks.sh` in the **Path** field!* - -### Included Wrapper Scripts ->**NOTE:** The **Arguments** field for Custom Scripts was removed in Radarr and Sonarr v3 due to security concerns. To support options with this version and later, -a wrapper script can be manually created that will call *striptracks.sh* with the required arguments. - -For your convenience, several wrapper scripts are included in the `/usr/local/bin/` directory. -You may use any of these scripts in place of the `striptracks-eng.sh` mentioned in the [Mod installation](./README.md#mod-installation) section above. +### Included Wrapper Script +For your convenience, a wrapper script to enable debugging is included in the `/usr/local/bin/` directory. +Use this script in place of the `flac2mp3.sh` mentioned in the [Installation](./README.md#installation) section above. ``` -striptracks-dut.sh # Keep Dutch audio and subtitles -striptracks-eng.sh # Keep English and Undetermined audio and English subtitles -striptracks-eng-debug.sh # Keep English and Undetermined audio and English subtitles, and enable debug logging -striptracks-eng-jpn.sh # Keep English, Japanese, and Undetermined audio and English subtitles -striptracks-fre.sh # Keep French audio and subtitles -striptracks-fre-debug.sh # Keep French audio and subtitles, and enable debug logging -striptracks-ger.sh # Keep German audio and subtitles -striptracks-spa.sh # Keep Spanish audio and subtitles +flac2mp3-debug.sh # Enable debugging ``` ### Example Wrapper Script @@ -146,31 +59,33 @@ To configure the last entry from the [Examples](./README.md#examples) section ab ``` #!/bin/bash -. /usr/local/bin/striptracks.sh :eng:kor:jpn :eng:spa +. /usr/local/bin/flac2mp3.sh -d -b 160k ``` -Then put `/usr/local/bin/wrapper.sh` in the **Path** field in place of `/usr/local/bin/striptracks-eng.sh` mentioned in the [Mod installation](./README.md#mod-installation) section above. +Then put `/usr/local/bin/wrapper.sh` in the **Path** field in place of `/usr/local/bin/flac2mp3.sh` mentioned in the [Installation](./README.md#installation) section above. -### Preview Triggers -The only events/notification triggers that have been tested are **On Import** and **On Upgrade** +### Triggers +The only events/notification triggers that have been tested are **On Release Import** and **On Upgrade** -![striptracks](.assets/striptracks-v3-custom-script.png "Radarr/Sonarr custom script settings") +![lidarr-flac2mp3](.assets/lidarr-custom-script.png "Lidarr Custom Script dialog") -### Preview Logs -The log can be inspected or downloaded from the Radarr/Sonarr GUI under System->Log Files +### Logs +A log file is created for the script activity called: + +`/config/logs/flac2mp3.txt` + +This log can be downloaded from the Lidarr GUI under System->Log Files + +Log rotation is performed, with 5 log files of 1MB each kept, matching Lidarr's log retention. +>![warning24] **NOTE:** If debug logging is enabled, the log file can grow very large very quickly. *Do not leave debug logging enabled permanently.* ___ - # Credits - This would not be possible without the following: -[Radarr](http://radarr.video/ "Radarr homepage") -[Sonarr](http://sonarr.tv/ "Sonarr homepage") -[LinuxServer.io Radarr](https://hub.docker.com/r/linuxserver/radarr "Radarr Docker container") container -[LinuxServer.io Sonarr](https://hub.docker.com/r/linuxserver/sonarr "Sonarr Docker container") container +[Lidarr](https://lidarr.audio/ "Lidarr homepage") +[LinuxServer.io Lidarr](https://hub.docker.com/r/linuxserver/lidarr "Lidarr Docker container") container [LinuxServer.io Docker Mods](https://hub.docker.com/r/linuxserver/mods "Docker Mods containers") project -[MKVToolNix](https://mkvtoolnix.download/ "MKVToolNix homepage") by Moritz Bunkus -The AWK script parsing mkvmerge output is adapted from Endoro's post on [VideoHelp](https://forum.videohelp.com/threads/343271-BULK-remove-non-English-tracks-from-MKV-container#post2292889). +[ffmpeg](https://ffmpeg.org/ "FFMpeg homepage") [warning]: http://files.softicons.com/download/application-icons/32x32-free-design-icons-by-aha-soft/png/32/Warning.png "Warning" [warning24]: http://files.softicons.com/download/toolbar-icons/24x24-free-pixel-icons-by-aha-soft/png/24x24/Warning.png "Warning" diff --git a/root/etc/cont-init.d/98-flac2mp3 b/root/etc/cont-init.d/98-flac2mp3 new file mode 100644 index 0000000..7943d61 --- /dev/null +++ b/root/etc/cont-init.d/98-flac2mp3 @@ -0,0 +1,46 @@ +#!/usr/bin/with-contenv bash + +cat <>> Flac2MP3 Mod by TheCaptain989 <<< +Repo: https://github.com/linuxserver/docker-mods/tree/lidarr-flac2mp3 + +Version: $(cat /etc/version.tc989) +---------------- +EOF + +# Determine if setup is needed +if [ ! -f /usr/bin/ffmpeg ]; then + echo "Running first time setup." + + if [ -f /usr/bin/apt ]; then + # Ubuntu + echo "Installing ffmpeg using apt-get" + apt-get update && \ + apt-get -y install ffmpeg && \ + rm -rf /var/lib/apt/lists/* + elif [ -f /sbin/apk ]; then + # Alpine + echo "Installing ffmpeg using apk" + apk add --no-cache ffmpeg && \ + rm -rf /var/lib/apt/lists/* + else + # Unknown + echo "Unknown package manager. Attempting to install ffmpeg using apt-get" + apt-get update && \ + apt-get -y install ffmpeg && \ + rm -rf /var/lib/apt/lists/* + fi +fi + +# Change ownership +if [ $(stat -c '%G' /usr/local/bin/flac2mp3.sh) != "abc" ]; then + echo "Changing ownership on scripts." + chown abc:abc /usr/local/bin/flac2mp3*.sh +fi + +# Make executable +if [ ! -x /usr/local/bin/flac2mp3.sh ]; then + echo "Making scripts executable." + chmod +x /usr/local/bin/flac2mp3*.sh +fi diff --git a/root/etc/cont-init.d/98-striptracks b/root/etc/cont-init.d/98-striptracks deleted file mode 100644 index 8aa9ba1..0000000 --- a/root/etc/cont-init.d/98-striptracks +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/with-contenv bash - -cat <>> Striptracks Mod by TheCaptain989 <<< -Repo: https://github.com/linuxserver/docker-mods/tree/radarr-striptracks - -Version: $(cat /etc/version.tc989) ----------------- -EOF - -# Determine if setup is needed -if [ ! -f /usr/bin/mkvmerge ]; then - echo "Running first time setup." - - if [ -f /usr/bin/apt ]; then - # Ubuntu - echo "Installing MKVToolNix using apt-get" - apt-get update && \ - apt-get -y install mkvtoolnix && \ - rm -rf /var/lib/apt/lists/* - elif [ -f /sbin/apk ]; then - # Alpine - echo "Installing MKVToolNix using apk" - apk add --no-cache mkvtoolnix && \ - rm -rf /var/lib/apt/lists/* - else - # Unknown - echo "Unknown package manager. Attempting to install MKVToolNix using apt-get" - apt-get update && \ - apt-get -y install mkvtoolnix && \ - rm -rf /var/lib/apt/lists/* - fi -fi - -# Change ownership -if [ $(stat -c '%G' /usr/local/bin/striptracks.sh) != "abc" ]; then - echo "Changing ownership on scripts." - chown abc:abc /usr/local/bin/striptracks*.sh -fi - -# Make executable -if [ ! -x /usr/local/bin/striptracks.sh ]; then - echo "Making scripts executable." - chmod +x /usr/local/bin/striptracks*.sh -fi - diff --git a/root/usr/local/bin/flac2mp3-debug.sh b/root/usr/local/bin/flac2mp3-debug.sh new file mode 100644 index 0000000..bb698ee --- /dev/null +++ b/root/usr/local/bin/flac2mp3-debug.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/flac2mp3.sh -d diff --git a/root/usr/local/bin/flac2mp3.sh b/root/usr/local/bin/flac2mp3.sh new file mode 100644 index 0000000..02b5891 --- /dev/null +++ b/root/usr/local/bin/flac2mp3.sh @@ -0,0 +1,256 @@ +#!/bin/bash + +# Script to convert FLAC files to MP3 using FFMpeg +# https://github.com/linuxserver/docker-mods/tree/lidarr-flac2mp3 +# Can also process MP3s and tag them appropriately +# Resultant MP3s are fully tagged + +# Dependencies: +# ffmpeg +# awk +# stat +# nice + +# Exit codes: +# 0 - success; or test +# 1 - no tracks files specified on command line +# 2 - mkvmerge not found +# 10 - awk script generated an error + +### Variables +export flac2mp3_script=$(basename "$0") +export flac2mp3_pid=$$ +export flac2mp3_config=/config/config.xml +export flac2mp3_log=/config/logs/flac2mp3.txt +export flac2mp3_maxlogsize=1024000 +export flac2mp3_maxlog=4 +export flac2mp3_debug=0 +export flac2mp3_tracks="$lidarr_addedtrackpaths" +[ -z "$flac2mp3_tracks" ] && flac2mp3_tracks="$lidarr_trackfile_path" # For other event type +export flac2mp3_recyclebin=$(sqlite3 /config/lidarr.db 'SELECT Value FROM Config WHERE Key="recyclebin"') +RET=$?; [ "$RET" != 0 ] && >&2 echo "WARNING[$RET]: Unable to read recyclebin information from database \"/config/lidarr.db\"" + +### Functions +function usage { + usage=" +$flac2mp3_script +Audio conversion script designed for use with Bazarr + +Source: https://github.com/TheCaptain989/lidarr-flac2mp3 + +Usage: + $0 [-d] [-b ] + +Arguments: + bitrate # output quality in bits per second (SI units) + +Options: + -d # enable debug logging + -b # set bitrate; default 320K + +Examples: + $flac2mp3_script -b 320k # Output 320 kilobits per second MP3 + (same as default behavior) + $flac2mp3_script -d -b 160k # Enable debugging, and output quality + 160 kilobits per second +" + >&2 echo "$usage" +} +# Can still go over flac2mp3_maxlog if read line is too long +# Must include whole function in subshell for read to work! +function log {( + while read + do + echo $(date +"%y-%-m-%-d %H:%M:%S.%1N")\|"[$flac2mp3_pid]$REPLY" >>"$flac2mp3_log" + local FILESIZE=$(stat -c %s "$flac2mp3_log") + if [ $FILESIZE -gt $flac2mp3_maxlogsize ] + then + for i in `seq $((flac2mp3_maxlog-1)) -1 0` + do + [ -f "${flac2mp3_log::-4}.$i.txt" ] && mv "${flac2mp3_log::-4}."{$i,$((i+1))}".txt" + done + [ -f "${flac2mp3_log::-4}.txt" ] && mv "${flac2mp3_log::-4}.txt" "${flac2mp3_log::-4}.0.txt" + touch "$flac2mp3_log" + fi + done +)} +# Inspired by https://stackoverflow.com/questions/893585/how-to-parse-xml-in-bash +function read_xml { + local IFS=\> + read -d \< ENTITY CONTENT +} +# Initiate API Rescan request +function rescan { + MSG="Info|Calling Lidarr API to rescan artist" + echo "$MSG" | log + [ $flac2mp3_debug -eq 1 ] && echo "Debug|Forcing rescan of artist '$lidarr_artist_id'. Calling Lidarr API 'RefreshArtist' using POST and URL 'http://$flac2mp3_bindaddress:$flac2mp3_port$flac2mp3_urlbase/api/v1/command?apikey=(removed)'" | log + RESULT=$(curl -s -d "{name: 'RefreshArtist', artistId: $lidarr_artist_id}" -H "Content-Type: application/json" \ + -X POST http://$flac2mp3_bindaddress:$flac2mp3_port$flac2mp3_urlbase/api/v1/command?apikey=$flac2mp3_apikey) + [ $flac2mp3_debug -eq 1 ] && echo "API returned: $RESULT" | awk '{print "Debug|"$0}' | log + JOBID="$(echo $RESULT | jq -crM .id)" + if [ "$JOBID" != "null" ]; then + local RET=0 + else + local RET=1 + fi + return $RET +} +# Check result of rescan job +function check_rescan { + local i=0 + for ((i=1; i <= 15; i++)); do + [ $flac2mp3_debug -eq 1 ] && echo "Debug|Checking job $JOBID completion, try #$i. Calling Lidarr API using GET and URL 'http://$flac2mp3_bindaddress:$flac2mp3_port$flac2mp3_urlbase/api/command/$JOBID?apikey=(removed)'" | log + RESULT=$(curl -s -H "Content-Type: application/json" \ + -X GET http://$flac2mp3_bindaddress:$flac2mp3_port$flac2mp3_urlbase/api/v1/command/$JOBID?apikey=$flac2mp3_apikey) + [ $flac2mp3_debug -eq 1 ] && echo "API returned: $RESULT" | awk '{print "Debug|"$0}' | log + if [ "$(echo $RESULT | jq -crM .status)" = "completed" ]; then + local RET=0 + break + else + if [ "$(echo $RESULT | jq -crM .status)" = "failed" ]; then + local RET=2 + break + else + local RET=1 + sleep 1 + fi + fi + done + return $RET +} +# Process options +while getopts ":db:" opt; do + case ${opt} in + d ) # For debug purposes only + MSG="Debug|Enabling debug logging." + echo "$MSG" | log + >&2 echo "$MSG" + flac2mp3_debug=1 + printenv | sort | sed 's/^/Debug|/' | log + ;; + b ) # Set bitrate + flac2mp3_bitrate="$OPTARG" + ;; + : ) + MSG="Error|Invalid option: -$OPTARG requires an argument" + echo "$MSG" | log + >&2 echo "$MSG" + ;; + esac +done +shift $((OPTIND -1)) + +# Set default bitrate +[ -z "$flac2mp3_bitrate" ] && flac2mp3_bitrate="320k" + +if [[ "$lidarr_eventtype" = "Test" ]]; then + echo "Info|Lidarr event: $lidarr_eventtype" | log + echo "Info|Script was test executed successfully." | log + exit 0 +fi + +if [ -z "$flac2mp3_tracks" ]; then + MSG="Error|No track file(s) specified! Not called from Lidarr?" + echo "$MSG" | log + >&2 echo "$MSG" + usage + exit 1 +fi + +if [ ! -f "/usr/bin/ffmpeg" ]; then + MSG="Error|/usr/bin/ffmpeg is required by this script" + echo "$MSG" | log + >&2 echo "$MSG" + exit 2 +fi + +# Legacy one-liner script +#find "$lidarr_artist_path" -name "*.flac" -exec bash -c 'ffmpeg -loglevel warning -i "{}" -y -acodec libmp3lame -b:a 320k "${0/.flac}.mp3" && rm "{}"' {} \; + +#### MAIN +echo "Info|Lidarr event: $lidarr_eventtype, Artist: $lidarr_artist_name ($lidarr_artist_id), Album: $lidarr_album_title ($lidarr_album_id), Export bitrate: $flac2mp3_bitrate, Tracks: $flac2mp3_tracks" | log +echo "$flac2mp3_tracks" | awk -v Debug=$flac2mp3_debug \ +-v Recycle="$flac2mp3_recyclebin" \ +-v Bitrate=$flac2mp3_bitrate ' +BEGIN { + FFMpeg="/usr/bin/ffmpeg" + FS="|" + RS="|" + IGNORECASE=1 +} +/\.flac/ { + Track=$1 + sub(/\n/,"",Track) + NewTrack=substr(Track, 1, length(Track)-5)".mp3" + print "Info|Writing: "NewTrack + if (Debug) print "Debug|Executing: nice "FFMpeg" -loglevel error -i \""Track"\" "CoverCmds1"-map 0 -y -acodec libmp3lame -b:a "Bitrate" -write_id3v1 1 -id3v2_version 3 "CoverCmds2"\""NewTrack"\"" + Result=system("nice "FFMpeg" -loglevel error -i \""Track"\" "CoverCmds1"-map 0 -y -acodec libmp3lame -b:a "Bitrate" -write_id3v1 1 -id3v2_version 3 "CoverCmds2"\""NewTrack"\" 2>&1") + if (Result) { + print "Error|"Result" converting \""Track"\"" + } else { + if (Recycle=="") { + if (Debug) print "Debug|Deleting: \""Track"\"" + system("[ -s \""NewTrack"\" ] && [ -f \""Track"\" ] && rm \""Track"\"") + } else { + match(Track,/^\/?[^\/]+\//) + RecPath=substr(Track,RSTART+RLENGTH) + sub(/[^\/]+$/,"",RecPath) + RecPath=Recycle RecPath + if (Debug) print "Debug|Moving: \""Track"\" to \""RecPath"\"" + system("[ ! -e \""RecPath"\" ] && mkdir -p \""RecPath"\"; [ -s \""NewTrack"\" ] && [ -f \""Track"\" ] && mv -t \""RecPath"\" \""Track"\"") + } + } +} +' | log + +RET="${PIPESTATUS[1]}" # captures awk exit status +if [ $RET != "0" ]; then + # Check for script completion and non-empty file + MSG="Error|Script exited abnormally. File permissions issue?" + echo "$MSG" | log + >&2 echo "$MSG" + exit 10 +fi + +# Call Lidarr API to RescanArtist +if [ ! -z "$lidarr_artist_id" ]; then + if [ -f "$flac2mp3_config" ]; then + # Read Lidarr config.xml + while read_xml; do + [[ $ENTITY = "Port" ]] && flac2mp3_port=$CONTENT + [[ $ENTITY = "UrlBase" ]] && flac2mp3_urlbase=$CONTENT + [[ $ENTITY = "BindAddress" ]] && flac2mp3_bindaddress=$CONTENT + [[ $ENTITY = "ApiKey" ]] && flac2mp3_apikey=$CONTENT + done < $flac2mp3_config + + [[ $flac2mp3_bindaddress = "*" ]] && flac2mp3_bindaddress=localhost + + # Scan the disk for the new audio tracks + if rescan; then + # Check that the rescan completed + if ! check_rescan; then + # Timeout or failure + MSG="Warn|Lidarr job ID $JOBID timed out or failed." + echo "$MSG" | log + >&2 echo "$MSG" + fi + else + # Error from API + MSG="Error|The 'RefreshArtist' API with artist $lidarr_artist_id failed." + echo "$MSG" | log + >&2 echo "$MSG" + fi + else + MSG="Warn|Unable to locate Lidarr config file: '$flac2mp3_config'" + echo "$MSG" | log + >&2 echo "$MSG" + fi +else + MSG="Warn|Missing environment variable lidarr_artist_id" + echo "$MSG" | log + >&2 echo "$MSG" +fi + +# Cool bash feature +MSG="Info|Completed in $(($SECONDS/60))m $(($SECONDS%60))s" +echo "$MSG" | log diff --git a/root/usr/local/bin/striptracks-dut.sh b/root/usr/local/bin/striptracks-dut.sh deleted file mode 100644 index e2c19af..0000000 --- a/root/usr/local/bin/striptracks-dut.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -. /usr/local/bin/striptracks.sh :dut :dut diff --git a/root/usr/local/bin/striptracks-eng-debug.sh b/root/usr/local/bin/striptracks-eng-debug.sh deleted file mode 100644 index 87ed2bb..0000000 --- a/root/usr/local/bin/striptracks-eng-debug.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -. /usr/local/bin/striptracks.sh -d :eng:und :eng diff --git a/root/usr/local/bin/striptracks-eng-jpn.sh b/root/usr/local/bin/striptracks-eng-jpn.sh deleted file mode 100644 index ea37f5d..0000000 --- a/root/usr/local/bin/striptracks-eng-jpn.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -. /usr/local/bin/striptracks.sh :eng:jpn:und :eng diff --git a/root/usr/local/bin/striptracks-eng.sh b/root/usr/local/bin/striptracks-eng.sh deleted file mode 100644 index a0eb344..0000000 --- a/root/usr/local/bin/striptracks-eng.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -. /usr/local/bin/striptracks.sh :eng:und :eng diff --git a/root/usr/local/bin/striptracks-fre-debug.sh b/root/usr/local/bin/striptracks-fre-debug.sh deleted file mode 100644 index 918a198..0000000 --- a/root/usr/local/bin/striptracks-fre-debug.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -. /usr/local/bin/striptracks.sh -d :fre:fra :fre:fra diff --git a/root/usr/local/bin/striptracks-fre.sh b/root/usr/local/bin/striptracks-fre.sh deleted file mode 100644 index 998ce43..0000000 --- a/root/usr/local/bin/striptracks-fre.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -. /usr/local/bin/striptracks.sh :fre:fra :fre:fra diff --git a/root/usr/local/bin/striptracks-ger.sh b/root/usr/local/bin/striptracks-ger.sh deleted file mode 100644 index 62047ab..0000000 --- a/root/usr/local/bin/striptracks-ger.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -. /usr/local/bin/striptracks.sh :ger:deu :ger:deu diff --git a/root/usr/local/bin/striptracks-spa.sh b/root/usr/local/bin/striptracks-spa.sh deleted file mode 100644 index 92f6c4e..0000000 --- a/root/usr/local/bin/striptracks-spa.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -. /usr/local/bin/striptracks.sh :spa :spa diff --git a/root/usr/local/bin/striptracks.sh b/root/usr/local/bin/striptracks.sh deleted file mode 100644 index 9d9034b..0000000 --- a/root/usr/local/bin/striptracks.sh +++ /dev/null @@ -1,489 +0,0 @@ -#!/bin/bash - -# Video remuxing script designed for use with Radarr and Sonarr -# Automatically strips out unwanted audio and subtitle streams, keeping only the desired languages. -# https://github.com/linuxserver/docker-mods/tree/radarr-striptracks - -# Adapted and corrected from Endoro's post 1/5/2014: -# https://forum.videohelp.com/threads/343271-BULK-remove-non-English-tracks-from-MKV-container#post2292889 -# -# Put a colon `:` in front of every language code. Expects ISO639-2 codes - -# Dependencies: -# mkvmerge -# awk -# curl -# jq -# numfmt -# stat -# nice - -# Exit codes: -# 0 - success; or test -# 1 - no video file specified on command line -# 2 - no audio language specified on command line -# 3 - no subtitle language specified on command line -# 4 - mkvmerge not found -# 5 - specified video file not found -# 6 - unable to rename video to temp video -# 10 - remuxing completed, but no output file found -# 20 - general error - -### Variables -export striptracks_script=$(basename "$0") -export striptracks_pid=$$ -export striptracks_arr_config=/config/config.xml -export striptracks_log=/config/logs/striptracks.txt -export striptracks_maxlogsize=512000 -export striptracks_maxlog=4 -export striptracks_debug=0 -export striptracks_type=$(printenv | sed -n 's/_eventtype *=.*$//p') -if [[ "${striptracks_type,,}" = "radarr" ]]; then - export striptracks_video="$radarr_moviefile_path" - export striptracks_api_endpoint="movie" - export striptracks_json_quality_root=".movieFile" - export striptracks_video_type="movie" - export striptracks_title="$radarr_movie_title ($radarr_movie_year)" -else - if [[ "${striptracks_type,,}" = "sonarr" ]]; then - export striptracks_video="$sonarr_episodefile_path" - export striptracks_api_endpoint="episodefile" - export striptracks_json_quality_root="" - export striptracks_video_type="series" - export striptracks_title="$sonarr_series_title $(numfmt --format "%02f" $sonarr_episodefile_seasonnumber)x$(numfmt --format "%02f" $sonarr_episodefile_episodenumbers) - $sonarr_episodefile_episodetitles" - fi -fi -export striptracks_api="Rescan${striptracks_video_type^}" -export striptracks_json_key="${striptracks_video_type}Id" -export striptracks_api_endpoint_idname="${striptracks_type,,}_${striptracks_api_endpoint}_id" -export striptracks_api_endpoint_id="${!striptracks_api_endpoint_idname}" -export striptracks_video_idname="${striptracks_type,,}_${striptracks_video_type}_id" -export striptracks_video_id="${!striptracks_video_idname}" -export striptracks_eventtype="${striptracks_type,,}_eventtype" -export striptracks_tempvideo="${striptracks_video}.tmp" -export striptracks_newvideo="${striptracks_video%.*}.mkv" -export striptracks_db="/config/${striptracks_type,,}.db" -if [ ! -f "$striptracks_db" ]; then - striptracks_db=/config/nzbdrone.db -fi -export striptracks_recyclebin=$(sqlite3 $striptracks_db 'SELECT Value FROM Config WHERE Key="recyclebin"') -RET=$?; [ "$RET" != 0 ] && >&2 echo "WARNING[$RET]: Unable to read recyclebin information from database \"$striptracks_db\"" - -### Functions -function usage { - usage=" -$striptracks_script -Video remuxing script designed for use with Radarr and Sonarr - -Source: https://github.com/TheCaptain989/radarr-striptracks - -Usage: - $0 [-d] - -Arguments: - audio_languages # ISO639-2 code(s) prefixed with a colon \`:\` - Multiple codes may be concatenated. - subtitle_languages # ISO639-2 code(s) prefixed with a colon \`:\` - Multiple codes may be concatenated. - -Options: - -d # enable debug logging - -Examples: - $striptracks_script :eng:und :eng # keep English and Undetermined audio and - English subtitles - $striptracks_script :eng \"\" # keep English audio and no subtitles - $striptracks_script -d :eng:kor:jpn :eng:spa # Enable debugging, keeping English, Korean, - and Japanese audio, and English and - Spanish subtitles -" - >&2 echo "$usage" -} -# Can still go over striptracks_maxlog if read line is too long -# Must include whole function in subshell for read to work! -function log {( - while read - do - echo $(date +"%Y-%-m-%-d %H:%M:%S.%1N")\|"[$striptracks_pid]$REPLY" >>"$striptracks_log" - local FILESIZE=$(stat -c %s "$striptracks_log") - if [ $FILESIZE -gt $striptracks_maxlogsize ] - then - for i in $(seq $((striptracks_maxlog-1)) -1 0); do - [ -f "${striptracks_log::-4}.$i.txt" ] && mv "${striptracks_log::-4}."{$i,$((i+1))}".txt" - done - [ -f "${striptracks_log::-4}.txt" ] && mv "${striptracks_log::-4}.txt" "${striptracks_log::-4}.0.txt" - touch "$striptracks_log" - fi - done -)} -# Inspired by https://stackoverflow.com/questions/893585/how-to-parse-xml-in-bash -function read_xml { - local IFS=\> - read -d \< ENTITY CONTENT -} -# Get video information -function get_video_info { - [ $striptracks_debug -eq 1 ] && echo "Debug|Getting video information for $striptracks_api_endpoint '$striptracks_api_endpoint_id'. Calling ${striptracks_type^} API using GET and URL 'http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/$striptracks_api_endpoint/$striptracks_api_endpoint_id?apikey=(removed)'" | log - RESULT=$(curl -s -H "Content-Type: application/json" \ - -X GET http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/$striptracks_api_endpoint/$striptracks_api_endpoint_id?apikey=$striptracks_apikey) - [ $striptracks_debug -eq 1 ] && echo "API returned: $RESULT" | awk '{print "Debug|"$0}' | log - if [ "$(echo $RESULT | jq -crM .path)" != "null" ]; then - local RET=0 - else - local RET=1 - fi - return $RET -} -# Initiate API Rescan request -function rescan { - MSG="Info|Calling ${striptracks_type^} API to rescan ${striptracks_video_type}, try #$i" - echo "$MSG" | log - [ $striptracks_debug -eq 1 ] && echo "Debug|Forcing rescan of $striptracks_json_key '$striptracks_video_id', try #$i. Calling ${striptracks_type^} API '$striptracks_api' using POST and URL 'http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/command?apikey=(removed)'" | log - RESULT=$(curl -s -d "{name: '$striptracks_api', $striptracks_json_key: $striptracks_video_id}" -H "Content-Type: application/json" \ - -X POST http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/command?apikey=$striptracks_apikey) - [ $striptracks_debug -eq 1 ] && echo "API returned: $RESULT" | awk '{print "Debug|"$0}' | log - JOBID="$(echo $RESULT | jq -crM .id)" - if [ "$JOBID" != "null" ]; then - local RET=0 - else - local RET=1 - fi - return $RET -} -# Check result of rescan job -function check_rescan { - local i=0 - for ((i=1; i <= 15; i++)); do - [ $striptracks_debug -eq 1 ] && echo "Debug|Checking job $JOBID completion, try #$i. Calling ${striptracks_type^} API using GET and URL 'http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/command/$JOBID?apikey=(removed)'" | log - RESULT=$(curl -s -H "Content-Type: application/json" \ - -X GET http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/command/$JOBID?apikey=$striptracks_apikey) - [ $striptracks_debug -eq 1 ] && echo "API returned: $RESULT" | awk '{print "Debug|"$0}' | log - if [ "$(echo $RESULT | jq -crM .status)" = "completed" ]; then - local RET=0 - break - else - if [ "$(echo $RESULT | jq -crM .status)" = "failed" ]; then - local RET=2 - break - else - local RET=1 - sleep 1 - fi - fi - done - return $RET -} - -# Process options -while getopts ":d" opt; do - case ${opt} in - d ) # For debug purposes only - MSG="Debug|Enabling debug logging." - echo "$MSG" | log - >&2 echo "$MSG" - striptracks_debug=1 - printenv | sort | sed 's/^/Debug|/' | log - ;; - esac -done -shift $((OPTIND -1)) - -if [ -z "$1" ]; then - MSG="Error|No audio languages specified!" - echo "$MSG" | log - >&2 echo "$MSG" - usage - exit 2 -fi - -if [ -z "$2" ]; then - MSG="Error|No subtitles languages specified!" - echo "$MSG" | log - >&2 echo "$MSG" - usage - exit 3 -fi - -if [ ! -f "/usr/bin/mkvmerge" ]; then - MSG="Error|/usr/bin/mkvmerge is required by this script" - echo "$MSG" | log - >&2 echo "$MSG" - exit 4 -fi - -if [[ "${!striptracks_eventtype}" = "Test" ]]; then - echo "Info|${striptracks_type^} event: ${!striptracks_eventtype}" | log - echo "Info|Script was test executed successfully." | log - exit 0 -fi - -if [ -z "$striptracks_video" ]; then - MSG="Error|No video file specified! Not called from Radarr/Sonarr?" - echo "$MSG" | log - >&2 echo "$MSG" - usage - exit 1 -fi - -if [ ! -f "$striptracks_video" ]; then - MSG="Error|Input file not found: \"$striptracks_video\"" - echo "$MSG" | log - >&2 echo "$MSG" - exit 5 -fi - -#### BEGIN MAIN -FILESIZE=$(numfmt --to iec --format "%.3f" $(stat -c %s "$striptracks_video")) -MSG="Info|${striptracks_type^} event: ${!striptracks_eventtype}, Video: $striptracks_video, Size: $FILESIZE, AudioKeep: $1, SubsKeep: $2" -echo "$MSG" | log - -# Rename the original video file to a temporary name -[ $striptracks_debug -eq 1 ] && echo "Debug|Renaming: \"$striptracks_video\" to \"$striptracks_tempvideo\"" | log -mv -f "$striptracks_video" "$striptracks_tempvideo" | log -RET=$?; [ "$RET" != 0 ] && { - MSG="ERROR[$RET]: Unable to rename video: \"$striptracks_video\" to temp video: \"$striptracks_tempvideo\". Halting." - echo "$MSG" | log - >&2 echo "$MSG" - exit 6 -} - -# Read in the output of mkvmerge info extraction -[ $striptracks_debug -eq 1 ] && echo "Debug|Executing: /usr/bin/mkvmerge -J \"$striptracks_tempvideo\"" | log -JSON=$(/usr/bin/mkvmerge -J "$striptracks_tempvideo") -RET=$?; [ "$RET" != 0 ] && { - MSG="ERROR[$RET]: Error executing mkvmerge." - echo "$MSG" | log - >&2 echo "$MSG" -} - -# This and the modified AWK script are a hack, and I know it. JQ is crazy hard to learn, BTW. -# Mimic the mkvmerge --identify-verbose option that has been deprecated -JSON_PROCESSED=$(echo $JSON | jq -jcrM ' -( if (.chapters | .[] | .num_entries) then - "Chapters: \(.chapters | .[] | .num_entries) entries\n" - else - "" - end -), -( .tracks | - .[] | - ( "Track ID \(.id): \(.type) (\(.codec)) [", - ( [.properties | to_entries |.[] | "\(.key):\(.value | tostring | gsub(" "; "\\s"))"] | join(" ")), - "]\n" ) -) -') -[ $striptracks_debug -eq 1 ] && echo "$JSON_PROCESSED" | awk '{print "Debug|"$0}' | log - -echo "$JSON_PROCESSED" | awk -v Debug=$striptracks_debug \ --v OrgVideo="$striptracks_video" \ --v TempVideo="$striptracks_tempvideo" \ --v MKVVideo="$striptracks_newvideo" \ --v Title="$striptracks_title" \ --v AudioKeep="$1" \ --v SubsKeep="$2" ' -BEGIN { - MKVMerge="/usr/bin/mkvmerge" - FS="[\t\n: ]" - IGNORECASE=1 -} -/^Track ID/ { - FieldCount=split($0, Fields) - if (Fields[1]=="Track") { - NoTr++ - Track[NoTr, "id"]=Fields[3] - Track[NoTr, "typ"]=Fields[5] - if (Fields[6]~/^\(/) { - Track[NoTr, "code"]=substr(Line,1,match(Line,/\)/)) - sub(/^[^\(]+/,"",Track[NoTr, "code"]) - } - if (Track[NoTr, "typ"]=="video") VidCnt++ - if (Track[NoTr, "typ"]=="audio") AudCnt++ - if (Track[NoTr, "typ"]=="subtitles") SubsCnt++ - for (i=6; i<=FieldCount; i++) { - if (Fields[i]=="language") Track[NoTr, "lang"]=Fields[++i] - } - } -} -/^Chapters/ { - Chapters=$3 -} -END { - if (!NoTr) { print "Error|No tracks found in \""TempVideo"\"" > "/dev/stderr"; exit } - if (!AudCnt) AudCnt=0; if (!SubsCnt) SubsCnt=0 - print "Info|Original tracks: "NoTr" (audio: "AudCnt", subtitles: "SubsCnt")" - if (Chapters) print "Info|Chapters: "Chapters - for (i=1; i<=NoTr; i++) { - if (Debug) print "Debug|i:"i,"Track ID:"Track[i,"id"],"Type:"Track[i,"typ"],"Lang:"Track[i, "lang"],"Code:"Track[i, "code"] - if (Track[i, "typ"]=="audio") { - if (AudioKeep~Track[i, "lang"]) { - AudKpCnt++ - print "Info|Keeping audio track "Track[i, "id"]": "Track[i, "lang"]" "Track[i, "code"] - if (AudioCommand=="") { - AudioCommand=Track[i, "id"] - } else { - AudioCommand=AudioCommand","Track[i, "id"] - } - # Special case if there is only one audio track, even if it was not specified - } else if (AudCnt==1) { - AudKpCnt++ - print "Info|Keeping only audio track "Track[i, "id"]": "Track[i, "lang"]" "Track[i, "code"] - AudioCommand=Track[i, "id"] - # Special case if there were multiple tracks, none were selected, and this is the last one. - } else if (AudioCommand=="" && Track[i, "id"]==AudCnt) { - AudKpCnt++ - print "Info|Keeping last audio track "Track[i, "id"]": "Track[i, "lang"]" "Track[i, "code"] - AudioCommand=Track[i, "id"] - } else { - if (Debug) print "Debug|\tRemove:", Track[i, "typ"], "track", Track[i, "id"], Track[i, "lang"] - } - } else { - if (Track[i, "typ"]=="subtitles") { - if (SubsKeep~Track[i, "lang"]) { - SubsKpCnt++ - print "Info|Keeping subtitle track "Track[i, "id"]": "Track[i, "lang"]" "Track[i, "code"] - if (SubsCommand=="") { - SubsCommand=Track[i, "id"] - } else { - SubsCommand=SubsCommand","Track[i, "id"] - } - } else { - if (Debug) print "Debug|\tRemove:", Track[i, "typ"], "track", Track[i, "id"], Track[i, "lang"] - } - } - } - } - if (!AudKpCnt) AudKpCnt=0; if (!SubsKpCnt) SubsKpCnt=0 - print "Info|Kept tracks: "AudKpCnt+SubsKpCnt+VidCnt" (audio: "AudKpCnt", subtitles: "SubsKpCnt")" - if (AudioCommand=="") { - # This should never happen, but belt and suspenders - CommandLine="-A" - } else { - CommandLine="-a "AudioCommand - } - if (SubsCommand=="") { - CommandLine=CommandLine" -S" - } else { - CommandLine=CommandLine" -s "SubsCommand - } - if (Debug) print "Debug|Executing: nice "MKVMerge" --title \""Title"\" -q -o \""MKVVideo"\" "CommandLine" \""TempVideo"\"" - Result=system("nice "MKVMerge" --title \""Title"\" -q -o \""MKVVideo"\" "CommandLine" \""TempVideo"\"") - if (Result>1) print "Error|"Result" remuxing \""TempVideo"\"" > "/dev/stderr" -}' | log - -#### END MAIN - -# Check for script completion and non-empty file -if [ -s "$striptracks_newvideo" ]; then - # Use Recycle Bin if configured - if [ "$striptracks_recyclebin" ]; then - [ $striptracks_debug -eq 1 ] && echo "Debug|Moving: \"$striptracks_tempvideo\" to \"${striptracks_recyclebin%/}/$(basename "$striptracks_video")"\" | log - mv "$striptracks_tempvideo" "${striptracks_recyclebin%/}/$(basename "$striptracks_video")" | log - else - [ $striptracks_debug -eq 1 ] && echo "Debug|Deleting: \"$striptracks_tempvideo\"" | log - rm "$striptracks_tempvideo" | log - fi -else - MSG="Error|Unable to locate or invalid remuxed file: \"$striptracks_newvideo\". Undoing rename." - echo "$MSG" | log - >&2 echo "$MSG" - [ $striptracks_debug -eq 1 ] && echo "Debug|Renaming: \"$striptracks_tempvideo\" to \"$striptracks_video\"" | log - mv -f "$striptracks_tempvideo" "$striptracks_video" | log - exit 10 -fi - -FILESIZE=$(numfmt --to iec --format "%.3f" $(stat -c %s "$striptracks_newvideo")) -MSG="Info|New size: $FILESIZE" -echo "$MSG" | log - -# Call *arr API to RescanMovie/RescanSeries -if [ -f "$striptracks_arr_config" ]; then - # Read *arr config.xml - while read_xml; do - [[ $ENTITY = "Port" ]] && striptracks_port=$CONTENT - [[ $ENTITY = "UrlBase" ]] && striptracks_urlbase=$CONTENT - [[ $ENTITY = "BindAddress" ]] && striptracks_bindaddress=$CONTENT - [[ $ENTITY = "ApiKey" ]] && striptracks_apikey=$CONTENT - done < $striptracks_arr_config - - [[ $striptracks_bindaddress = "*" ]] && striptracks_bindaddress=localhost - - # Check for video ID - if [ "$striptracks_video_id" ]; then - # Call API - if [ "${striptracks_type,,}" = "radarr" ] && get_video_info; then - # Save original quality - ORGQUALITY=$(echo $RESULT | jq -crM ${striptracks_json_quality_root}.quality) - fi - # Loop a maximum of twice - for ((i=1; $i <= 2; i++)); do - # Scan the disk for the new movie file - if rescan; then - # Check that the Rescan completed - if check_rescan; then - # This whole section doesn't work under Sonarr because the episodefile_id changes after the RescanSeries if the filename changes - # Should look into just using a PUT to change everything at once instead of a Rescan. - if [ "${striptracks_type,,}" = "radarr" ]; then - if get_video_info; then - # Check that the file didn't get lost in the Rescan. - # Radarr sometimes needs to Rescan twice when the file extension changes - # (.avi -> .mkv for example) - if [ "$(echo $RESULT | jq -crM .hasFile)" = "true" ]; then - # If we lost the quality information, put it back - # NOTE: This "works" with Radarr in that the change shows up in the GUI, but only until the page changes. - # It doesn't seem to write the info permanently. Maybe an API bug? - if [ "$(echo $RESULT | jq -crM ${striptracks_json_quality_root}.quality.quality.name)" = "Unknown" ]; then - [ $striptracks_debug -eq 1 ] && echo "Debug|Updating quality to '$(echo $ORGQUALITY | jq -crM .quality.name)'. Calling ${striptracks_type^} API using PUT and URL 'http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/$striptracks_api_endpoint/$striptracks_video_id?apikey=(removed)'" | log - RESULT=$(curl -s -d "$(echo $RESULT | jq -crM "${striptracks_json_quality_root}.quality=$ORGQUALITY")" -H "Content-Type: application/json" \ - -X PUT http://$striptracks_bindaddress:$striptracks_port$striptracks_urlbase/api/$striptracks_api_endpoint/$striptracks_video_id?apikey=$striptracks_apikey) - [ $striptracks_debug -eq 1 ] && echo "API returned: $RESULT" | awk '{print "Debug|"$0}' | log - if [ "$(echo $RESULT | jq -crM ${striptracks_json_quality_root}.quality.quality.name)" = "Unknown" ]; then - MSG="Warn|Unable to update ${striptracks_type^} $striptracks_api_endpoint '$striptracks_title' to quality '$(echo $ORGQUALITY | jq -crM .quality.name)'" - echo "$MSG" | log - >&2 echo "$MSG" - fi - fi - # The video record is [now] good - break - else - # Loop again because there was no file - continue - fi - else - # No 'path' in returned JSON. - MSG="Warn|The '$striptracks_api' API with $striptracks_api_endpoint $striptracks_api_endpoint_id returned no path." - echo "$MSG" | log - >&2 echo "$MSG" - fi - else - # Didn't do anything because we're in Sonarr - break - fi - else - # Timeout or failure - MSG="Warn|${striptracks_type^} job ID $JOBID timed out or failed." - echo "$MSG" | log - >&2 echo "$MSG" - fi - else - # Error from API - MSG="Error|The '$striptracks_api' API with $striptracks_json_key $striptracks_video_id failed." - echo "$MSG" | log - >&2 echo "$MSG" - fi - done - else - # No video ID means we can't call the API - MSG="Warn|Missing environment variable: $striptracks_video_idname" - echo "$MSG" | log - >&2 echo "$MSG" - fi -else - # No config file means we can't call the API - MSG="Warn|Unable to locate ${striptracks_type^} config file: '$striptracks_arr_config'" - echo "$MSG" | log - >&2 echo "$MSG" -fi - -# Cool bash feature -MSG="Info|Completed in $(($SECONDS/60))m $(($SECONDS%60))s" -echo "$MSG" | log From 9237e5bc913bbc4dede752e9c062728bfc133d12 Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Sat, 30 Jan 2021 10:40:08 -0600 Subject: [PATCH 10/13] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fdb191d..d3e301f 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Container info: ## Usage New file(s) with an MP3 extension will be placed in the same directory as the original FLAC file(s). Existing MP3 files with the same track name will be overwritten. -If you've configured the Lidarr Recycle Bin path correctly, the original video will be moved there. +If you've configured the Lidarr Recycle Bin path correctly, the original audio file will be moved there. ![warning24] **NOTE:** If you have *not* configured the Recycle Bin, the original FLAC audio file(s) will be deleted and permanently lost. ### Syntax From f1fd4b229dbdbd81b8da8847281d162eeefc1851 Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Thu, 11 Mar 2021 13:47:19 -0600 Subject: [PATCH 11/13] Release 1.2.1 - Added Variable Bit Rate option - Fixed cover art conversion issue - Fixed file permission/owner issue - Reworked some bash logic - Updated documentation --- .assets/danger.png | Bin 0 -> 947 bytes .assets/warning.png | Bin 0 -> 1310 bytes .dockerignore | 4 + .github/workflows/BuildImage.yml | 10 ++- README.md | 98 +++++++++++++++-------- SECURITY.md | 18 +++++ root/etc/cont-init.d/98-flac2mp3 | 4 +- root/usr/local/bin/flac2mp3-vbr.sh | 3 + root/usr/local/bin/flac2mp3.sh | 120 +++++++++++++++++++++-------- 9 files changed, 191 insertions(+), 66 deletions(-) create mode 100644 .assets/danger.png create mode 100644 .assets/warning.png create mode 100644 SECURITY.md create mode 100644 root/usr/local/bin/flac2mp3-vbr.sh diff --git a/.assets/danger.png b/.assets/danger.png new file mode 100644 index 0000000000000000000000000000000000000000..f9d46cc203f5eedaf303da9c38aa84f51b168ff0 GIT binary patch literal 947 zcmV;k15EshP)hx6se!F`0tm8P*@fR*} zp#N8ZuI5BysU^Z8MdKEq_6Kty#QUc`FLu{}<$V5pZC%9L)j5l> z!vORr7cewgUviwc?g}tII=V-|j)VJV&@7ABKiI?T5IF)OXWI%&h<7rX z%;wtybScj_)H&vk_Bn(ZTDSNO?R|0q%an0Th{yS)EB9hh?L1$Z*NGP}kU>cIAdlvxuPG&MM-UK+FPRD~FIFj6%CsyMl z%Cx1FP`_CakAbQ%E*GXH-(84s zWyUS*0T@UwAT-gGv+WZA+L5ubZYgDQcwipe79h&EWoKKF+PH=)EwiP*SP_t@FVNMo zj1uC_(-RZTMxjtR7jj+w;Ri0G0w3gR*`Nb_cx-WPt@0Ha3_OwJr%R8A0;S#)uM7`M z(=yRMP)N?T@|i*dK>v;36CKJI!)f-W?)LTv{~16q81%*5spo*|x#_TKnULkZ&za6a zuJ^|PF2;uk8@sx?9y;|*ssvHbtV5zyKb0*U-fl>>0cO+iLMr=?|G`gvv1;Q@I|RJt z)YEYWHnp@ZQMAW0cu#~Z=FjBaXx6j$HS3C89jj%_PppFHP(~CV9=T|K-`_WTcK$2JfU{EjJJ1O zRnA;iPG5Y$*((EyMoW09ERDP@gDORRckb?<5kO;0ONPP`fL(QhJc`e+HxsKi#^QQk zWV~I{eZ09gktR_&QeNJeF>L@F?_nUbv_L3aB$Ew&BujX%U=~%&TmYH4!-uB@(ERFa z1qyrJF4$4)_^>48x7lA~<8gt)-qOn2f}{b&ik$#l8%l+_>B+^%GR&LrW9uppfXijc ziKGCUx9w^K>N5S%RF>rG$Kz-bGEQ1}e z*;AP~mMVI@q@?6Ax5of(4@D1v<}X_ylt1fm<4q*LO>Lo@qWKm;zAr6sU{ZkQ*48Xk z4+_v$Kf~YvmI1%b>or~kKsZ=dSC=&*fQh<~0_j!7!qS|{0lZ`XQB`cuBxC(HPv=;y zD{`ZdZXz80SAeFLoy98J=JP;H)zllWx>%THgU1zPU1{pX14pwEs_>BF5fp7Jt6Ez; z);)e7FmMVmo5~HdC-ECoUas)r8y2cLlVBk?vZwA7q6i6^s&NVydz?*5OMH}elqSZjYP}1g z(g@@)NDg56QsJF_7LjNc3$q;FZCw@^p)l9N2*jb%AoRx-dU}(8A!P?}9vmPNgShhj zZ!zKuBJ>+k?F2acwK5W!%3+2Y7-l%4oc=BhfX3;Rm$&SmNILx`O|3p>cfG%-*$I*M_?L{(g UkdM1^r~m)}07*qoM6N<$f+i?#!~g&Q literal 0 HcmV?d00001 diff --git a/.dockerignore b/.dockerignore index cdb1a82..c129946 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,6 +1,10 @@ +# Docker ignore file .git .gitignore .github .gitattributes +.assets +hooks READMETEMPLATE.md README.md +SECURITY.md diff --git a/.github/workflows/BuildImage.yml b/.github/workflows/BuildImage.yml index 37ddec5..108473b 100644 --- a/.github/workflows/BuildImage.yml +++ b/.github/workflows/BuildImage.yml @@ -15,7 +15,15 @@ jobs: - name: Build image run: | - docker build --no-cache -t ${{ github.sha }} . + # Build variables + VERSION=$(git describe --tags --always) + cat <**NOTE:** This mod support Linux OSes only. +>**NOTE:** This mod supports Linux OSes only. -Container info: -![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/linuxserver/mods/lidarr-flac2mp3)) +Development Container info: +![Docker Image Size](https://img.shields.io/docker/image-size/thecaptain989/lidarr-flac2mp3 "Container Size") +![Docker Pulls](https://img.shields.io/docker/pulls/thecaptain989/lidarr-flac2mp3 "Container Pulls") +Production Container info: ![Docker Image Size](https://img.shields.io/docker/image-size/linuxserver/mods/lidarr-flac2mp3 "Container Size") # Installation 1. Pull the [linuxserver/lidarr](https://hub.docker.com/r/linuxserver/lidarr "LinuxServer.io's Lidarr container") docker image from Docker Hub: @@ -11,81 +14,114 @@ Container info: 2. Configure the Docker container with all the port, volume, and environment settings from the *original container documentation* here: **[linuxserver/lidarr](https://hub.docker.com/r/linuxserver/lidarr "Docker container")** - 1. Add the **DOCKER_MODS** environment variable to the `docker create` command, as follows: - `-e DOCKER_MODS=linuxserver/mods:lidarr-flac2mp3` + 1. Add a **DOCKER_MODS** environment variable to the `docker run` command, as follows: + - Stable release: `-e DOCKER_MODS=linuxserver/mods:lidarr-flac2mp3` + + *Example Docker CLI Configuration* + ```shell + docker run -d \ + --name=lidarr \ + -e PUID=1000 \ + -e PGID=1000 \ + -e TZ=America/Chicago \ + -e DOCKER_MODS=linuxserver/mods:lidarr-flac2mp3 \ + -p 8686:8686 \ + -v /path/to/appdata/config:/config \ + -v /path/to/music:/music \ + -v /path/to/downloads:/downloads \ + --restart unless-stopped \ + ghcr.io/linuxserver/lidarr + ``` *Example Synology Configuration* ![flac2mp3](.assets/lidarr-synology.png "Synology container settings") 2. Start the container. -3. After all of the above configuration is complete, to use ffmpeg, configure a custom script from the Settings->Connect screen and type the following in the **Path** field: +3. After the above configuration is complete, to use ffmpeg, configure a custom script from Lidarr's *Settings* > *Connect* screen and type the following in the **Path** field: `/usr/local/bin/flac2mp3.sh` -## Usage -New file(s) with an MP3 extension will be placed in the same directory as the original FLAC file(s). Existing MP3 files with the same track name will be overwritten. + *Example* + ![lidarr-flac2mp3](.assets/lidarr-custom-script.png "Lidarr Custom Script dialog") -If you've configured the Lidarr Recycle Bin path correctly, the original audio file will be moved there. -![warning24] **NOTE:** If you have *not* configured the Recycle Bin, the original FLAC audio file(s) will be deleted and permanently lost. + This will use the defaults to create a 320Kbps MP3 file. + + *For any other setting, you **must** either use one of the [included wrapper scripts](./README.md#included-wrapper-scripts) or create a custom script with the command line options you desire. See the [Syntax](./README.md#syntax) section below.* + +## Usage +New file(s) with an MP3 extension will be placed in the same directory as the original FLAC file(s) and have the same owner and permissions. Existing MP3 files with the same track name will be overwritten. + +If you've configured Lidarr's **Recycle Bin** path correctly, the original audio file will be moved there. +![danger] **NOTE:** If you have *not* configured the Recycle Bin, the original FLAC audio file(s) will be deleted and permanently lost. ### Syntax >**Note:** The **Arguments** field for Custom Scripts was removed in Lidarr release [v0.7.0.1347](https://github.com/lidarr/Lidarr/commit/b9d240924f8965ebb2c5e307e36b810ae076101e "Lidarr commit notes") due to security concerns. To support options with this version and later, a wrapper script can be manually created that will call *flac2mp3.sh* with the required arguments. -The script accepts two options which may be placed in the **Arguments** field: +The script accepts three command line options: -`[-d] [-b ]` +`[-d] [-b | -v ]` -The `-b bitrate` option, if specified, sets the output quality in bits per second. If no `-b` option is specified, the script will default to 320Kbps. +The `-b bitrate` option sets the output quality in constant bits per second (CBR). +The `-v quality` option sets the output quality using a variable bit rate (VBR) where `quality` is a value between 0 and 9, with 0 being the highest quality. +See the [FFmpeg MP3 Encoding Guide](https://trac.ffmpeg.org/wiki/Encode/MP3) for more details. +If neither `-b` nor `-v` options are specified, the script will default to constant 320Kbps. The `-d` option enables debug logging. ### Examples ``` --b 320k # Output 320 kilobits per second MP3 (same as default behavior) --d -b 160k # Enable debugging, and output 160 kilobits per second MP3 +-b 320k # Output 320 kbit/s MP3 (non VBR; same as default behavior) +-v 0 # Output variable bitrate, VBR 220-260 kbit/s +-d -b 160k # Enable debugging, and output 160 kbit/s MP3 ``` -### Included Wrapper Script -For your convenience, a wrapper script to enable debugging is included in the `/usr/local/bin/` directory. -Use this script in place of the `flac2mp3.sh` mentioned in the [Installation](./README.md#installation) section above. +### Included Wrapper Scripts +For your convenience, several wrapper scripts are included in the `/usr/local/bin/` directory. +You may use any of these scripts in place of the `flac2mp3.sh` mentioned in the [Installation](./README.md#installation) section above. ``` flac2mp3-debug.sh # Enable debugging +flac2mp3-vbr.sh # Use variable bit rate, quality 0 ``` ### Example Wrapper Script -To configure the last entry from the [Examples](./README.md#examples) section above, create and save a file called `wrapper.sh` to `/usr/local/bin` containing the following text: -``` +To configure the last entry from the [Examples](./README.md#examples) section above, create and save a file called `striptracks-custom.sh` to `/config` containing the following text: +```shell #!/bin/bash . /usr/local/bin/flac2mp3.sh -d -b 160k ``` -Then put `/usr/local/bin/wrapper.sh` in the **Path** field in place of `/usr/local/bin/flac2mp3.sh` mentioned in the [Installation](./README.md#installation) section above. +Make it executable: +```shell +chmod +x /config/striptracks-custom.sh +``` + +Then put `/config/striptracks-custom.sh` in the **Path** field in place of `/usr/local/bin/flac2mp3.sh` mentioned in the [Installation](./README.md#installation) section above. + +>**Note:** If you followed the Linuxserver.io recommendations when configuring your container, the `/config` directory will be mapped to an external storage location. It is therefore recommended to place custom scripts in the `/config` directory so they will survive container updates, but they may be placed anywhere that is accessible by Lidarr. ### Triggers The only events/notification triggers that have been tested are **On Release Import** and **On Upgrade** -![lidarr-flac2mp3](.assets/lidarr-custom-script.png "Lidarr Custom Script dialog") - ### Logs A log file is created for the script activity called: `/config/logs/flac2mp3.txt` -This log can be downloaded from the Lidarr GUI under System->Log Files +This log can be downloaded from Lidarr under *System* > *Log Files* Log rotation is performed, with 5 log files of 1MB each kept, matching Lidarr's log retention. ->![warning24] **NOTE:** If debug logging is enabled, the log file can grow very large very quickly. *Do not leave debug logging enabled permanently.* +>![danger] **NOTE:** If debug logging is enabled, the log file can grow very large very quickly. *Do not leave debug logging enabled permanently.* -___ -# Credits +## Credits This would not be possible without the following: [Lidarr](https://lidarr.audio/ "Lidarr homepage") [LinuxServer.io Lidarr](https://hub.docker.com/r/linuxserver/lidarr "Lidarr Docker container") container [LinuxServer.io Docker Mods](https://hub.docker.com/r/linuxserver/mods "Docker Mods containers") project -[ffmpeg](https://ffmpeg.org/ "FFMpeg homepage") +[ffmpeg](https://ffmpeg.org/ "FFMpeg homepage") +Icons made by [Freepik](https://www.freepik.com) from [Flaticon](https://www.flaticon.com/) -[warning]: http://files.softicons.com/download/application-icons/32x32-free-design-icons-by-aha-soft/png/32/Warning.png "Warning" -[warning24]: http://files.softicons.com/download/toolbar-icons/24x24-free-pixel-icons-by-aha-soft/png/24x24/Warning.png "Warning" +[warning]: .assets/warning.png "Warning" +[danger]: .assets/danger.png "Danger" diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..97dc1fc --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,18 @@ +# Security Policy + +## Supported Versions + +Only the latest major and minor version are supported. + +| Version | Supported | +| ------- | ------------------ | +| 1.2.x | :heavy_check_mark: | +| < 1.2 | :x: | + +## Reporting a Vulnerability + +Vulnerability reports or security concerns may be submitted as a new issue in GitHub, or emailed to: + +>thecaptain989@protonmail.com + +Please allow 48-hours for an initial response. An issue will be entered if accepted. diff --git a/root/etc/cont-init.d/98-flac2mp3 b/root/etc/cont-init.d/98-flac2mp3 index 7943d61..e8bff43 100644 --- a/root/etc/cont-init.d/98-flac2mp3 +++ b/root/etc/cont-init.d/98-flac2mp3 @@ -3,7 +3,9 @@ cat <>> Flac2MP3 Mod by TheCaptain989 <<< -Repo: https://github.com/linuxserver/docker-mods/tree/lidarr-flac2mp3 +Repos: + Dev/test: https://github.com/TheCaptain989/lidarr-flac2mp3 + Prod: https://github.com/linuxserver/docker-mods/tree/lidarr-flac2mp3 Version: $(cat /etc/version.tc989) ---------------- diff --git a/root/usr/local/bin/flac2mp3-vbr.sh b/root/usr/local/bin/flac2mp3-vbr.sh new file mode 100644 index 0000000..9fff691 --- /dev/null +++ b/root/usr/local/bin/flac2mp3-vbr.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +. /usr/local/bin/flac2mp3.sh -v 0 diff --git a/root/usr/local/bin/flac2mp3.sh b/root/usr/local/bin/flac2mp3.sh index 02b5891..b157243 100644 --- a/root/usr/local/bin/flac2mp3.sh +++ b/root/usr/local/bin/flac2mp3.sh @@ -1,20 +1,22 @@ #!/bin/bash # Script to convert FLAC files to MP3 using FFMpeg -# https://github.com/linuxserver/docker-mods/tree/lidarr-flac2mp3 -# Can also process MP3s and tag them appropriately -# Resultant MP3s are fully tagged +# Dev/test: https://github.com/TheCaptain989/lidarr-flac2mp3 +# Prod: https://github.com/linuxserver/docker-mods/tree/lidarr-flac2mp3 +# Resultant MP3s are fully tagged and retain same permissions as original file # Dependencies: # ffmpeg # awk # stat # nice +# chmod # Exit codes: # 0 - success; or test -# 1 - no tracks files specified on command line +# 1 - no tracks files found in environment # 2 - mkvmerge not found +# 3 - invalid command line arguments # 10 - awk script generated an error ### Variables @@ -34,25 +36,25 @@ RET=$?; [ "$RET" != 0 ] && >&2 echo "WARNING[$RET]: Unable to read recyclebin in function usage { usage=" $flac2mp3_script -Audio conversion script designed for use with Bazarr +Audio conversion script designed for use with Lidarr Source: https://github.com/TheCaptain989/lidarr-flac2mp3 Usage: - $0 [-d] [-b ] - -Arguments: - bitrate # output quality in bits per second (SI units) + $0 [-d] [-b | -v ] Options: - -d # enable debug logging - -b # set bitrate; default 320K + -d enable debug logging + -b set output quality in constant bits per second [default: 320k] + Ex: 160k, 240k, 300000 + -v set variable bitrate; quality between 0-9 + 0 is highest quality, 9 is lowest + See https://trac.ffmpeg.org/wiki/Encode/MP3 for more details Examples: - $flac2mp3_script -b 320k # Output 320 kilobits per second MP3 - (same as default behavior) - $flac2mp3_script -d -b 160k # Enable debugging, and output quality - 160 kilobits per second + $flac2mp3_script -b 320k # Output 320 kbit/s MP3 (non VBR; same as default behavior) + $flac2mp3_script -v 0 # Output variable bitrate, VBR 220-260 kbit/s + $flac2mp3_script -d -b 160k # Enable debugging and set output to 160 kbit/s " >&2 echo "$usage" } @@ -119,7 +121,7 @@ function check_rescan { return $RET } # Process options -while getopts ":db:" opt; do +while getopts ":db:v:" opt; do case ${opt} in d ) # For debug purposes only MSG="Debug|Enabling debug logging." @@ -128,27 +130,57 @@ while getopts ":db:" opt; do flac2mp3_debug=1 printenv | sort | sed 's/^/Debug|/' | log ;; - b ) # Set bitrate - flac2mp3_bitrate="$OPTARG" + b ) # Set constant bit rate + if [ -n "$flac2mp3_vbrquality" ]; then + MSG="Error|Both -b and -v options cannot be set at the same time." + echo "$MSG" | log + >&2 echo "$MSG" + usage + exit 3 + else + flac2mp3_bitrate="$OPTARG" + fi ;; - : ) - MSG="Error|Invalid option: -$OPTARG requires an argument" + v ) # Set variable quality + if [ -n "$flac2mp3_bitrate" ]; then + MSG="Error|Both -v and -b options cannot be set at the same time." + echo "$MSG" | log + >&2 echo "$MSG" + usage + exit 3 + else + flac2mp3_vbrquality="$OPTARG" + fi + ;; + : ) # No required argument specified + MSG="Error|Invalid option: -${OPTARG} requires an argument" echo "$MSG" | log >&2 echo "$MSG" + usage + exit 3 + ;; + * ) # Unknown option + MSG="Error|Unknown option: -${OPTARG}" + echo "$MSG" | log + >&2 echo "$MSG" + usage + exit 3 ;; esac done shift $((OPTIND -1)) -# Set default bitrate -[ -z "$flac2mp3_bitrate" ] && flac2mp3_bitrate="320k" +# Set default bit rate +[ -z "$flac2mp3_vbrquality" ] && [ -z "$flac2mp3_bitrate" ] && flac2mp3_bitrate="320k" +# Handle Lidarr Test event if [[ "$lidarr_eventtype" = "Test" ]]; then echo "Info|Lidarr event: $lidarr_eventtype" | log echo "Info|Script was test executed successfully." | log exit 0 fi +# Check if called from within Lidarr if [ -z "$flac2mp3_tracks" ]; then MSG="Error|No track file(s) specified! Not called from Lidarr?" echo "$MSG" | log @@ -157,6 +189,7 @@ if [ -z "$flac2mp3_tracks" ]; then exit 1 fi +# Check for required binaries if [ ! -f "/usr/bin/ffmpeg" ]; then MSG="Error|/usr/bin/ffmpeg is required by this script" echo "$MSG" | log @@ -164,48 +197,67 @@ if [ ! -f "/usr/bin/ffmpeg" ]; then exit 2 fi -# Legacy one-liner script +# Legacy one-liner script for posterity #find "$lidarr_artist_path" -name "*.flac" -exec bash -c 'ffmpeg -loglevel warning -i "{}" -y -acodec libmp3lame -b:a 320k "${0/.flac}.mp3" && rm "{}"' {} \; #### MAIN -echo "Info|Lidarr event: $lidarr_eventtype, Artist: $lidarr_artist_name ($lidarr_artist_id), Album: $lidarr_album_title ($lidarr_album_id), Export bitrate: $flac2mp3_bitrate, Tracks: $flac2mp3_tracks" | log +echo "Info|Lidarr event: $lidarr_eventtype, Artist: $lidarr_artist_name ($lidarr_artist_id), Album: $lidarr_album_title ($lidarr_album_id), Export bitrate: ${flac2mp3_bitrate:-$flac2mp3_vbrquality}, Tracks: $flac2mp3_tracks" | log echo "$flac2mp3_tracks" | awk -v Debug=$flac2mp3_debug \ -v Recycle="$flac2mp3_recyclebin" \ --v Bitrate=$flac2mp3_bitrate ' +-v Bitrate=$flac2mp3_bitrate \ +-v VBR=$flac2mp3_vbrquality ' BEGIN { FFMpeg="/usr/bin/ffmpeg" FS="|" RS="|" IGNORECASE=1 + if (Bitrate) { + if (Debug) print "Debug|Using constant bitrate of "Bitrate + BrCommand="-b:a "Bitrate + } else { + if (Debug) print "Debug|Using variable quality of "VBR + BrCommand="-q:a "VBR + } } /\.flac/ { + # Get each FLAC file name and create a new MP3 name Track=$1 sub(/\n/,"",Track) NewTrack=substr(Track, 1, length(Track)-5)".mp3" print "Info|Writing: "NewTrack - if (Debug) print "Debug|Executing: nice "FFMpeg" -loglevel error -i \""Track"\" "CoverCmds1"-map 0 -y -acodec libmp3lame -b:a "Bitrate" -write_id3v1 1 -id3v2_version 3 "CoverCmds2"\""NewTrack"\"" - Result=system("nice "FFMpeg" -loglevel error -i \""Track"\" "CoverCmds1"-map 0 -y -acodec libmp3lame -b:a "Bitrate" -write_id3v1 1 -id3v2_version 3 "CoverCmds2"\""NewTrack"\" 2>&1") + # Convert the track + if (Debug) print "Debug|Executing: nice "FFMpeg" -loglevel error -i \""Track"\" -c:v copy -map 0 -y -acodec libmp3lame "BrCommand" -write_id3v1 1 -id3v2_version 3 \""NewTrack"\"" + Result=system("nice "FFMpeg" -loglevel error -i \""Track"\" -c:v copy -map 0 -y -acodec libmp3lame "BrCommand" -write_id3v1 1 -id3v2_version 3 \""NewTrack"\" 2>&1") if (Result) { - print "Error|"Result" converting \""Track"\"" + print "Error|Exit code "Result" converting \""Track"\"" } else { if (Recycle=="") { - if (Debug) print "Debug|Deleting: \""Track"\"" - system("[ -s \""NewTrack"\" ] && [ -f \""Track"\" ] && rm \""Track"\"") + # No Recycle Bin, so check for non-zero size new file and delete the old one + if (Debug) print "Debug|Deleting: \""Track"\" and setting permissions on \""NewTrack"\"" + #Command="[ -s \""NewTrack"\" ] && [ -f \""Track"\" ] && chown --reference=\""Track"\" \""NewTrack"\" && chmod --reference=\""Track"\" \""NewTrack"\" && rm \""Track"\"" + Command="if [ -s \""NewTrack"\" ]; then if [ -f \""Track"\" ]; then chown --reference=\""Track"\" \""NewTrack"\"; chmod --reference=\""Track"\" \""NewTrack"\"; rm \""Track"\"; fi; fi" + if (Debug) print "Debug|Executing: "Command + system(Command) } else { + # Recycle Bin is configured, so check if it exists, append a relative path to it from the track, check for non-zero size new file, and move the old one to the Recycle Bin match(Track,/^\/?[^\/]+\//) RecPath=substr(Track,RSTART+RLENGTH) sub(/[^\/]+$/,"",RecPath) RecPath=Recycle RecPath - if (Debug) print "Debug|Moving: \""Track"\" to \""RecPath"\"" - system("[ ! -e \""RecPath"\" ] && mkdir -p \""RecPath"\"; [ -s \""NewTrack"\" ] && [ -f \""Track"\" ] && mv -t \""RecPath"\" \""Track"\"") + if (Debug) print "Debug|Moving: \""Track"\" to \""RecPath"\" and setting permissions on \""NewTrack"\"" + Command="if [ ! -e \""RecPath"\" ]; then mkdir -p \""RecPath"\"; fi; if [ -s \""NewTrack"\" ]; then if [ -f \""Track"\" ]; then chown --reference=\""Track"\" \""NewTrack"\"; chmod --reference=\""Track"\" \""NewTrack"\"; mv -t \""RecPath"\" \""Track"\"; fi; fi" + if (Debug) print "Debug|Executing: "Command + system(Command) } } } ' | log +#### END MAIN + +# Check for awk script completion RET="${PIPESTATUS[1]}" # captures awk exit status if [ $RET != "0" ]; then - # Check for script completion and non-empty file MSG="Error|Script exited abnormally. File permissions issue?" echo "$MSG" | log >&2 echo "$MSG" @@ -241,11 +293,13 @@ if [ ! -z "$lidarr_artist_id" ]; then >&2 echo "$MSG" fi else + # No config file means we can't call the API MSG="Warn|Unable to locate Lidarr config file: '$flac2mp3_config'" echo "$MSG" | log >&2 echo "$MSG" fi else + # No Artist ID means we can't call the API MSG="Warn|Missing environment variable lidarr_artist_id" echo "$MSG" | log >&2 echo "$MSG" From a7e8b63d006158f7eb05a108f151d7fea02d1ee4 Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Thu, 11 Mar 2021 18:37:56 -0600 Subject: [PATCH 12/13] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9ba7b48..b08b312 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ flac2mp3-vbr.sh # Use variable bit rate, quality 0 ``` ### Example Wrapper Script -To configure the last entry from the [Examples](./README.md#examples) section above, create and save a file called `striptracks-custom.sh` to `/config` containing the following text: +To configure the last entry from the [Examples](./README.md#examples) section above, create and save a file called `flac2mp3-custom.sh` to `/config` containing the following text: ```shell #!/bin/bash @@ -94,10 +94,10 @@ To configure the last entry from the [Examples](./README.md#examples) section ab ``` Make it executable: ```shell -chmod +x /config/striptracks-custom.sh +chmod +x /config/flac2mp3-custom.sh ``` -Then put `/config/striptracks-custom.sh` in the **Path** field in place of `/usr/local/bin/flac2mp3.sh` mentioned in the [Installation](./README.md#installation) section above. +Then put `/config/flac2mp3-custom.sh` in the **Path** field in place of `/usr/local/bin/flac2mp3.sh` mentioned in the [Installation](./README.md#installation) section above. >**Note:** If you followed the Linuxserver.io recommendations when configuring your container, the `/config` directory will be mapped to an external storage location. It is therefore recommended to place custom scripts in the `/config` directory so they will survive container updates, but they may be placed anywhere that is accessible by Lidarr. From 5e36a800576f3707440e52dad07f444c7e10e29e Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Fri, 19 Mar 2021 11:12:15 -0500 Subject: [PATCH 13/13] Updated BuildImage.yml as requested Modified the VERSION generation until I find a better way to do this. --- .github/workflows/BuildImage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/BuildImage.yml b/.github/workflows/BuildImage.yml index ca42bd4..0cdf870 100644 --- a/.github/workflows/BuildImage.yml +++ b/.github/workflows/BuildImage.yml @@ -16,7 +16,7 @@ jobs: - name: Build image run: | # Build variables - VERSION=$(git describe --tags --always) + VERSION=${GITHUB_SHA:0:7} cat <

&RaYSICo74yETWTc2S5L} zb_F2PKur5}?;Q6mrmjpNwf4O$W=c35gfgQpe0BIS97=FWvZMRDLr|8%0Dp$F8ql6P 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 G`QHFLog Files From 297b1a10139fd1841ac4b38d2709038bfd5718c6 Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Fri, 30 Oct 2020 11:52:03 -0500 Subject: [PATCH 09/13] Initial release --- .assets/lidarr-custom-script.png | Bin 0 -> 51791 bytes .assets/lidarr-synology.png | Bin 0 -> 13074 bytes .assets/striptracks-synology.png | Bin 13260 -> 0 bytes .assets/striptracks-v2-custom-script.png | Bin 26204 -> 0 bytes .assets/striptracks-v3-custom-script.png | Bin 64455 -> 0 bytes .github/workflows/BuildImage.yml | 4 +- README.md | 165 ++----- root/etc/cont-init.d/98-flac2mp3 | 46 ++ root/etc/cont-init.d/98-striptracks | 47 -- root/usr/local/bin/flac2mp3-debug.sh | 3 + root/usr/local/bin/flac2mp3.sh | 256 ++++++++++ root/usr/local/bin/striptracks-dut.sh | 3 - root/usr/local/bin/striptracks-eng-debug.sh | 3 - root/usr/local/bin/striptracks-eng-jpn.sh | 3 - root/usr/local/bin/striptracks-eng.sh | 3 - root/usr/local/bin/striptracks-fre-debug.sh | 3 - root/usr/local/bin/striptracks-fre.sh | 3 - root/usr/local/bin/striptracks-ger.sh | 3 - root/usr/local/bin/striptracks-spa.sh | 3 - root/usr/local/bin/striptracks.sh | 489 -------------------- 20 files changed, 347 insertions(+), 687 deletions(-) create mode 100644 .assets/lidarr-custom-script.png create mode 100644 .assets/lidarr-synology.png delete mode 100644 .assets/striptracks-synology.png delete mode 100644 .assets/striptracks-v2-custom-script.png delete mode 100644 .assets/striptracks-v3-custom-script.png create mode 100644 root/etc/cont-init.d/98-flac2mp3 delete mode 100644 root/etc/cont-init.d/98-striptracks create mode 100644 root/usr/local/bin/flac2mp3-debug.sh create mode 100644 root/usr/local/bin/flac2mp3.sh delete mode 100644 root/usr/local/bin/striptracks-dut.sh delete mode 100644 root/usr/local/bin/striptracks-eng-debug.sh delete mode 100644 root/usr/local/bin/striptracks-eng-jpn.sh delete mode 100644 root/usr/local/bin/striptracks-eng.sh delete mode 100644 root/usr/local/bin/striptracks-fre-debug.sh delete mode 100644 root/usr/local/bin/striptracks-fre.sh delete mode 100644 root/usr/local/bin/striptracks-ger.sh delete mode 100644 root/usr/local/bin/striptracks-spa.sh delete mode 100644 root/usr/local/bin/striptracks.sh diff --git a/.assets/lidarr-custom-script.png b/.assets/lidarr-custom-script.png new file mode 100644 index 0000000000000000000000000000000000000000..6a6813248d32c962fe20d017d1c1d1e6acab9dfe GIT binary patch literal 51791 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