🐳 Tdarr

Tdarr - Distributed transcode automation using FFmpeg/HandBrake + Audio/Video library analytics + video health checking (Windows, macOS, Linux & Docker)

Docker Ready 4,102 stars
1. Pull Image docker pull HaveAGitGat/Tdarr:latest
2. 1-Click Launch Command docker run -d --name Tdarr --restart always HaveAGitGat/Tdarr:latest
docker/Dockerfile.base
FROM lsiobase/ubuntu:jammy

ENV \
 LIBVA_DRIVERS_PATH="/usr/lib/x86_64-linux-gnu/dri" \
 LD_LIBRARY_PATH="/usr/lib/x86_64-linux-gnu" \
 NVIDIA_DRIVER_CAPABILITIES="compute,video,utility" \
 NVIDIA_VISIBLE_DEVICES="all" \
 HANDBRAKE=1.7.3

ENV WEB_UI_PORT="8265" SERVER_PORT="8266" NODE_PORT="8267" PUID="1000" PGID="1000" UMASK="002" TZ="Etc/UTC" HOME="/home/Tdarr"

# handle deps
RUN apt-get update &&  \
        apt-get install -y \
            software-properties-common \
            git \
            trash-cli && \
    mkdir -p \
    /app \
    /logs \
    /temp \
    "${HOME}" && \
    # useradd -u ${PUID} -U -d ${HOME} -s /bin/false Tdarr && \
    # usermod -G users Tdarr && \

    apt-get update && \
    apt-get install -y curl unzip wget comskip \
        # for apprise
        python3-pip && \
        pip3 install apprise && \

    # MkvToolNIX
    wget -O /usr/share/keyrings/gpg-pub-moritzbunkus.gpg https://mkvtoolnix.download/gpg-pub-moritzbunkus.gpg && \
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/gpg-pub-moritzbunkus.gpg] https://mkvtoolnix.download/ubuntu/ jammy main" | tee /etc/apt/sources.list.d/mkvtoolnix.download.list && \
    echo "deb-src [arch=amd64 signed-by=/usr/share/keyrings/gpg-pub-moritzbunkus.gpg] https://mkvtoolnix.download/ubuntu/ jammy main" | tee -a /etc/apt/sources.list.d/mkvtoolnix.download.list && \
    apt-get update && apt-get install -y mkvtoolnix && \

    #cc-extractor
    apt-get install -y \
        libglew-dev \
        libglfw3-dev \
        cmake \
        gcc \
        libcurl4-gnutls-dev \
        tesseract-ocr \
        libtesseract-dev \
        libleptonica-dev \
        clang \
        libclang-dev && \
        # libgpac-dev && \
        git clone https://github.com/CCExtractor/ccextractor.git && \
        cd ccextractor/linux && \ 
        git checkout 35e73c1c90ce3ca69394d3523836bb1cdec28f11 && \
        ./build -without-rust && \
        mv ./ccextractor /usr/bin/ccextractor && \
        
        cd / && rm -rf /ccextractor && \
    if uname -m | grep -q x86; then \

# Setup Intel Package Repository
        curl -sSL https://repositories.intel.com/gpu/intel-graphics.key | \
            gpg --dearmor --output /usr/share/keyrings/intel-graphics.gpg && \
        echo "deb [arch=amd64,i386 signed-by=/usr/share/keyrings/intel-graphics.gpg] https://repositories.intel.com/gpu/ubuntu jammy client" | \
            tee /etc/apt/sources.list.d/intel-gpu-jammy.list && \
        apt-get update && \

        apt install -y \
            intel-opencl-icd \
            intel-level-zero-gpu \
            level-zero \
            intel-media-va-driver-non-free \
            libmfx1 \
            libmfxgen1 \
            libvpl2 \
            libegl-mesa0 \
            libegl1-mesa \
            libegl1-mesa-dev \
            libgbm1 \
            libgl1-mesa-dev \
            libgl1-mesa-dri \
            libglapi-mesa \
            libgles2-mesa-dev \
            libglx-mesa0 \
            libigdgmm12 \
            libxatracker2 \
            mesa-va-drivers \
            mesa-vdpau-drivers \
            mesa-vulkan-drivers \
            va-driver-all \
            vainfo \
            hwinfo \
            clinfo && \

        # FFmpeg 6
        ffmpegversion=$(curl --silent https://api.github.com/repos/jellyfin/jellyfin-ffmpeg/releases/latest | grep -oP '"tag_name":\s*"v\K[^"]+' | sort -h | tail -n1) && \
        wget https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v$ffmpegversion/jellyfin-ffmpeg6_$ffmpegversion-jammy_amd64.deb && \
        apt install -y \
        ./jellyfin-ffmpeg6_$ffmpegversion-jammy_amd64.deb && \
        rm -rf ./jellyfin-ffmpeg6_$ffmpegversion-jammy_amd64.deb && \
        ln -s /usr/lib/jellyfin-ffmpeg/ffmpeg /usr/local/bin/ffmpeg && \
        ln -s /usr/lib/jellyfin-ffmpeg/ffmpeg /usr/local/bin/tdarr-ffmpeg && \
        # apt-get install -y ffmpeg && \
        # HandBrake dependencies
        apt-get install -y \
            autoconf \
            automake \
            build-essential \
            cmake \
            git \
            libass-dev \
            libass9 \
            libbz2-dev \
            libfontconfig-dev \
            libfreetype-dev \
            libfribidi-dev \
            libharfbuzz-dev \
            libjansson-dev \
            liblzma-dev \
            libmp3lame-dev \
            libnuma-dev \
            libogg-dev \
            libopus-dev \
            libsamplerate0-dev \
            libspeex-dev \
            libtheora-dev \
            libtool \
            libtool-bin \
            libturbojpeg0-dev \
            libvorbis-dev \
            libx264-dev \
            libxml2-dev \
            libvpx-dev \
            m4 \
            make \
            meson \
            nasm \
            ninja-build \
            patch \
            pkg-config \
            # python \
            tar \
            zlib1g-dev \
            # QSV dependencies
            libva-dev \
            libdrm-dev && \

        rm -rdf /tmp/handbrake && \
        mkdir -p /tmp/handbrake && \
        git clone \
            --branch ${HANDBRAKE} \
            --depth 1 https://github.com/HandBrake/HandBrake.git \
            /tmp/handbrake && \
        cd /tmp/handbrake && \
        ./configure \
            --enable-nvenc \
            --enable-qsv \
            --enable-x265 \
            --disable-gtk \
            --launch-jobs=14 \
            --launch \
            --force && \
        make --directory=build install && \
        cp /tmp/handbrake/build/HandBrakeCLI /usr/local/bin/HandBrakeCLI && \
        rm -rdf /tmp/handbrake/ ; \
    fi && \
    if uname -m | grep -q aarch64; then \
        apt-get install -y handbrake-cli ffmpeg && \
        ln -s /usr/bin/ffmpeg /usr/local/bin/tdarr-ffmpeg ; \
    fi && \
    if uname -m | grep -q armv7l; then \
        apt-get install -y handbrake-cli ffmpeg && \
        ln -s /usr/bin/ffmpeg /usr/local/bin/tdarr-ffmpeg ; \
    fi && \

    trash-empty && \
        if uname -m | grep -q x86; then \
            apt-get clean && \
            apt purge -y \
                g++-9 \
                gcc-9 \
                # libc6-dev \
                libstdc++-9-dev \
                cpp-9 \
                libgcc-9-dev \
                libstd-rust-dev \
                # libllvm12 \
                libicu-dev \
                cargo \
                libstd-rust-1.65 \
                libstd-rust-dev \
                git \
                cmake \
                python3-pip ; \
        fi && \
    apt autoremove -y