Files
ripster/site/getting-started/quickstart/index.html
2026-03-05 19:34:01 +00:00

95 lines
58 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html><html lang=de class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="Halbautomatische Disc-Ripping-Plattform für DVDs & Blu-rays mit HandBrake-Encoding"><meta name=author content=Michael><link href=https://mboehmlaender.github.io/ripster/getting-started/quickstart/ rel=canonical><link href=../configuration/ rel=prev><link href=../../architecture/ rel=next><link rel=icon href=../../assets/images/favicon.png><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.7.0"><title>Schnellstart - Ripster</title><link rel=stylesheet href=../../assets/stylesheets/main.618322db.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.ab4e12ef.min.css><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=deep-purple data-md-color-accent=purple> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#schnellstart-vollstandiger-workflow class=md-skip> Zum Inhalt </a> </div> <div data-md-component=announce> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class="md-header md-header--shadow md-header--lifted" data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Kopfzeile> <a href=../.. title=Ripster class="md-header__button md-logo" aria-label=Ripster data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 14a2 2 0 0 1-2-2c0-1.11.89-2 2-2s2 .89 2 2a2 2 0 0 1-2 2m0-10a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> Ripster </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Schnellstart </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=deep-purple data-md-color-accent=purple aria-label="Dunkelmodus aktivieren" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Dunkelmodus aktivieren" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class=md-option data-md-color-media data-md-color-scheme=slate data-md-color-primary=deep-purple data-md-color-accent=purple aria-label="Hellmodus aktivieren" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Hellmodus aktivieren" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=Suche placeholder=Suche autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class=md-search__options aria-label=Suche> <button type=reset class="md-search__icon md-icon" title=Zurücksetzen aria-label=Zurücksetzen tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap tabindex=0 data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> Suche wird initialisiert </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/mboehmlaender/ripster title="Zum Repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> ripster </div> </a> </div> </nav> <nav class=md-tabs aria-label=Hauptnavigation data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> Home </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../ class=md-tabs__link> Erste Schritte </a> </li> <li class=md-tabs__item> <a href=../../architecture/ class=md-tabs__link> Architektur </a> </li> <li class=md-tabs__item> <a href=../../pipeline/ class=md-tabs__link> Pipeline </a> </li> <li class=md-tabs__item> <a href=../../api/ class=md-tabs__link> API-Referenz </a> </li> <li class=md-tabs__item> <a href=../../configuration/ class=md-tabs__link> Konfiguration </a> </li> <li class=md-tabs__item> <a href=../../deployment/ class=md-tabs__link> Deployment </a> </li> <li class=md-tabs__item> <a href=../../tools/ class=md-tabs__link> Externe Tools </a> </li> </ul> </div> </nav> </header> <div class=md-container data-md-component=container> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=../.. title=Ripster class="md-nav__button md-logo" aria-label=Ripster data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 14a2 2 0 0 1-2-2c0-1.11.89-2 2-2s2 .89 2 2a2 2 0 0 1-2 2m0-10a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8"/></svg> </a> Ripster </label> <div class=md-nav__source> <a href=https://github.com/mboehmlaender/ripster title="Zum Repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> ripster </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> Home </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2 checked> <div class="md-nav__link md-nav__container"> <a href=../ class="md-nav__link "> <span class=md-ellipsis> Erste Schritte </span> </a> <label class="md-nav__link " for=__nav_2 id=__nav_2_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=true> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> Erste Schritte </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../prerequisites/ class=md-nav__link> <span class=md-ellipsis> Voraussetzungen </span> </a> </li> <li class=md-nav__item> <a href=../installation/ class=md-nav__link> <span class=md-ellipsis> Installation </span> </a> </li> <li class=md-nav__item> <a href=../configuration/ class=md-nav__link> <span class=md-ellipsis> Konfiguration </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> Schnellstart </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> Schnellstart </span> </a> <nav class="md-nav md-nav--secondary" aria-label=Inhaltsverzeichnis> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Inhaltsverzeichnis </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#ubersicht-pipeline-ablauf class=md-nav__link> <span class=md-ellipsis> Übersicht: Pipeline-Ablauf </span> </a> </li> <li class=md-nav__item> <a href=#schritt-1-ripster-starten class=md-nav__link> <span class=md-ellipsis> Schritt 1 Ripster starten </span> </a> </li> <li class=md-nav__item> <a href=#schritt-2-disc-einlegen-disc_detected class=md-nav__link> <span class=md-ellipsis> Schritt 2 Disc einlegen → DISC_DETECTED </span> </a> </li> <li class=md-nav__item> <a href=#schritt-3-analyse-starten-metadata_selection class=md-nav__link> <span class=md-ellipsis> Schritt 3 Analyse starten → METADATA_SELECTION </span> </a> </li> <li class=md-nav__item> <a href=#schritt-4-metadaten-auswahlen-metadataselectiondialog class=md-nav__link> <span class=md-ellipsis> Schritt 4 Metadaten auswählen (MetadataSelectionDialog) </span> </a> <nav class=md-nav aria-label="Schritt 4 Metadaten auswählen (MetadataSelectionDialog)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#4a-omdb-suchergebnis-wahlen class=md-nav__link> <span class=md-ellipsis> 4a) OMDb-Suchergebnis wählen </span> </a> </li> <li class=md-nav__item> <a href=#4b-manuelle-eingabe-ohne-omdb class=md-nav__link> <span class=md-ellipsis> 4b) Manuelle Eingabe (ohne OMDb) </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#schritt-5-optional-playlist-auswahl-waiting_for_user_decision class=md-nav__link> <span class=md-ellipsis> Schritt 5 Optional: Playlist-Auswahl → WAITING_FOR_USER_DECISION </span> </a> </li> <li class=md-nav__item> <a href=#schritt-6-ripping-ripping class=md-nav__link> <span class=md-ellipsis> Schritt 6 Ripping → RIPPING </span> </a> </li> <li class=md-nav__item> <a href=#schritt-7-track-review-ready_to_encode class=md-nav__link> <span class=md-ellipsis> Schritt 7 Track-Review → READY_TO_ENCODE </span> </a> <nav class=md-nav aria-label="Schritt 7 Track-Review → READY_TO_ENCODE"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#audio-track-aktionen-verstehen class=md-nav__link> <span class=md-ellipsis> Audio-Track-Aktionen verstehen </span> </a> </li> <li class=md-nav__item> <a href=#untertitel-flags class=md-nav__link> <span class=md-ellipsis> Untertitel-Flags </span> </a> </li> <li class=md-nav__item> <a href=#vorauswahl-regeln class=md-nav__link> <span class=md-ellipsis> Vorauswahl-Regeln </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#schritt-8-encoding-encoding class=md-nav__link> <span class=md-ellipsis> Schritt 8 Encoding → ENCODING </span> </a> </li> <li class=md-nav__item> <a href=#schritt-9-fertig-finished class=md-nav__link> <span class=md-ellipsis> Schritt 9 Fertig! → FINISHED </span> </a> </li> <li class=md-nav__item> <a href=#fehlerbehandlung class=md-nav__link> <span class=md-ellipsis> Fehlerbehandlung </span> </a> <nav class=md-nav aria-label=Fehlerbehandlung> <ul class=md-nav__list> <li class=md-nav__item> <a href=#job-im-status-error class=md-nav__link> <span class=md-ellipsis> Job im Status ERROR </span> </a> </li> <li class=md-nav__item> <a href=#haufige-fehlerursachen class=md-nav__link> <span class=md-ellipsis> Häufige Fehlerursachen </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#kurzubersicht-aller-schritte class=md-nav__link> <span class=md-ellipsis> Kurzübersicht aller Schritte </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3> <div class="md-nav__link md-nav__container"> <a href=../../architecture/ class="md-nav__link "> <span class=md-ellipsis> Architektur </span> </a> <label class="md-nav__link " for=__nav_3 id=__nav_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> Architektur </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../architecture/overview/ class=md-nav__link> <span class=md-ellipsis> Übersicht </span> </a> </li> <li class=md-nav__item> <a href=../../architecture/backend/ class=md-nav__link> <span class=md-ellipsis> Backend-Services </span> </a> </li> <li class=md-nav__item> <a href=../../architecture/frontend/ class=md-nav__link> <span class=md-ellipsis> Frontend-Komponenten </span> </a> </li> <li class=md-nav__item> <a href=../../architecture/database/ class=md-nav__link> <span class=md-ellipsis> Datenbank </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_4> <div class="md-nav__link md-nav__container"> <a href=../../pipeline/ class="md-nav__link "> <span class=md-ellipsis> Pipeline </span> </a> <label class="md-nav__link " for=__nav_4 id=__nav_4_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> Pipeline </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../pipeline/workflow/ class=md-nav__link> <span class=md-ellipsis> Workflow & Zustände </span> </a> </li> <li class=md-nav__item> <a href=../../pipeline/encoding/ class=md-nav__link> <span class=md-ellipsis> Encode-Planung & Track-Auswahl </span> </a> </li> <li class=md-nav__item> <a href=../../pipeline/playlist-analysis/ class=md-nav__link> <span class=md-ellipsis> Playlist-Analyse </span> </a> </li> <li class=md-nav__item> <a href=../../pipeline/post-encode-scripts/ class=md-nav__link> <span class=md-ellipsis> Post-Encode-Skripte </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_5> <div class="md-nav__link md-nav__container"> <a href=../../api/ class="md-nav__link "> <span class=md-ellipsis> API-Referenz </span> </a> <label class="md-nav__link " for=__nav_5 id=__nav_5_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> API-Referenz </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../api/pipeline/ class=md-nav__link> <span class=md-ellipsis> Pipeline API </span> </a> </li> <li class=md-nav__item> <a href=../../api/settings/ class=md-nav__link> <span class=md-ellipsis> Settings API </span> </a> </li> <li class=md-nav__item> <a href=../../api/history/ class=md-nav__link> <span class=md-ellipsis> History API </span> </a> </li> <li class=md-nav__item> <a href=../../api/websocket/ class=md-nav__link> <span class=md-ellipsis> WebSocket Events </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_6> <div class="md-nav__link md-nav__container"> <a href=../../configuration/ class="md-nav__link "> <span class=md-ellipsis> Konfiguration </span> </a> <label class="md-nav__link " for=__nav_6 id=__nav_6_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> Konfiguration </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../configuration/settings-reference/ class=md-nav__link> <span class=md-ellipsis> Alle Einstellungen </span> </a> </li> <li class=md-nav__item> <a href=../../configuration/environment/ class=md-nav__link> <span class=md-ellipsis> Umgebungsvariablen </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_7> <div class="md-nav__link md-nav__container"> <a href=../../deployment/ class="md-nav__link "> <span class=md-ellipsis> Deployment </span> </a> <label class="md-nav__link " for=__nav_7 id=__nav_7_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> Deployment </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../deployment/development/ class=md-nav__link> <span class=md-ellipsis> Entwicklungsumgebung </span> </a> </li> <li class=md-nav__item> <a href=../../deployment/production/ class=md-nav__link> <span class=md-ellipsis> Produktion </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_8> <div class="md-nav__link md-nav__container"> <a href=../../tools/ class="md-nav__link "> <span class=md-ellipsis> Externe Tools </span> </a> <label class="md-nav__link " for=__nav_8 id=__nav_8_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> Externe Tools </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../tools/makemkv/ class=md-nav__link> <span class=md-ellipsis> MakeMKV </span> </a> </li> <li class=md-nav__item> <a href=../../tools/handbrake/ class=md-nav__link> <span class=md-ellipsis> HandBrake </span> </a> </li> <li class=md-nav__item> <a href=../../tools/mediainfo/ class=md-nav__link> <span class=md-ellipsis> MediaInfo </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <h1 id=schnellstart-vollstandiger-workflow>Schnellstart Vollständiger Workflow<a class=headerlink href=#schnellstart-vollstandiger-workflow title="Permanent link">&para;</a></h1> <p>Nach der <a href=../installation/ >Installation</a> und <a href=../configuration/ >Konfiguration</a> führt diese Seite Schritt für Schritt durch den ersten Rip mit allen Details aus dem Code.</p> <hr> <h2 id=ubersicht-pipeline-ablauf>Übersicht: Pipeline-Ablauf<a class=headerlink href=#ubersicht-pipeline-ablauf title="Permanent link">&para;</a></h2> <div class=pipeline-steps> <div class=pipeline-step> <div class="pipeline-step-badge step-idle"></div> <div class=pipeline-step-label>IDLE</div> <div class=pipeline-step-sub>Warten</div> </div> <div class=pipeline-step> <div class="pipeline-step-badge step-idle">1</div> <div class=pipeline-step-label>DISC_DETECTED</div> <div class=pipeline-step-sub>Disc erkannt</div> </div> <div class=pipeline-step> <div class="pipeline-step-badge step-running">2</div> <div class=pipeline-step-label>METADATA_SELECTION</div> <div class=pipeline-step-sub>OMDb &amp; Dialog</div> </div> <div class=pipeline-step> <div class="pipeline-step-badge step-wait"></div> <div class=pipeline-step-label>WAITING_FOR_USER_DECISION</div> <div class=pipeline-step-sub>Playlist wählen<br><em>(nur bei Obfusk.)</em></div> </div> <div class=pipeline-step> <div class="pipeline-step-badge step-user">3</div> <div class=pipeline-step-label>READY_TO_START</div> <div class=pipeline-step-sub>Bereit</div> </div> <div class=pipeline-step> <div class="pipeline-step-badge step-running">4</div> <div class=pipeline-step-label>RIPPING</div> <div class=pipeline-step-sub>MakeMKV</div> </div> <div class=pipeline-step> <div class="pipeline-step-badge step-running">5</div> <div class=pipeline-step-label>MEDIAINFO_CHECK</div> <div class=pipeline-step-sub>HandBrake-Scan</div> </div> <div class=pipeline-step> <div class="pipeline-step-badge step-user">6</div> <div class=pipeline-step-label>READY_TO_ENCODE</div> <div class=pipeline-step-sub>Track-Review</div> </div> <div class=pipeline-step> <div class="pipeline-step-badge step-encode">7</div> <div class=pipeline-step-label>ENCODING</div> <div class=pipeline-step-sub>HandBrake</div> </div> <div class=pipeline-step> <div class="pipeline-step-badge step-encode">8*</div> <div class=pipeline-step-label>POST-ENCODE</div> <div class=pipeline-step-sub>Skripte<br><em>(innerhalb ENCODING)</em></div> </div> <div class=pipeline-step> <div class="pipeline-step-badge step-done"></div> <div class=pipeline-step-label>FINISHED</div> <div class=pipeline-step-sub>Fertig</div> </div> </div> <p><strong>Legende:</strong> <span style=color:#546e7a>● Warten</span> &nbsp;|&nbsp; <span style=color:#1565c0>■ Läuft automatisch</span> &nbsp;|&nbsp; <span style=color:#3949ab>■ Benutzeraktion</span> &nbsp;|&nbsp; <span style=color:#e65100>⚠ Optional</span> &nbsp;|&nbsp; <span style=color:#6a1b9a>■ Encodierung</span> &nbsp;|&nbsp; <span style=color:#2e7d32>✓ Fertig</span></p> <details class=note> <summary>Vollständiges Zustandsdiagramm (inkl. Fehler- &amp; Alternativpfade)</summary> <div class=pipeline-diagram> <pre class=mermaid><code>flowchart LR
START(( )) --&gt; IDLE
IDLE --&gt;|Disc erkannt| DD[DISC_DETECTED]
DD --&gt;|Analyse starten| META[METADATA\nSELECTION]
META --&gt;|Metadaten übernommen| RTS[READY_TO\nSTART]
META --&gt;|vorhandenes RAW +\nPlaylist offen| WUD[WAITING_FOR\nUSER_DECISION]
RTS --&gt;|Auto-Start| RIP[RIPPING]
RTS --&gt;|Auto-Start mit RAW| MIC[MEDIAINFO\nCHECK]
RIP --&gt;|MKV fertig| MIC
RIP --&gt;|Fehler| ERR
MIC --&gt;|Playlist offen (Backup)| WUD
WUD --&gt;|Playlist bestätigt| MIC
WUD --&gt;|Playlist bestätigt,\nnoch kein RAW| RTS
MIC --&gt; RTE[READY_TO\nENCODE]
RTE --&gt;|Encoding starten| ENC[ENCODING]
ENC --&gt;|inkl. Post-Skripte| FIN([FINISHED])
ENC --&gt;|Fehler| ERR
ERR([ERROR]) --&gt;|Retry / Cancel| IDLE
style FIN fill:#e8f5e9,stroke:#66bb6a,color:#2e7d32
style ERR fill:#ffebee,stroke:#ef5350,color:#c62828
style WUD fill:#fff8e1,stroke:#ffa726,color:#e65100
style ENC fill:#f3e5f5,stroke:#ab47bc,color:#6a1b9a</code></pre> </div> </details> <hr> <h2 id=schritt-1-ripster-starten>Schritt 1 Ripster starten<a class=headerlink href=#schritt-1-ripster-starten title="Permanent link">&para;</a></h2> <div class="language-bash highlight"><pre><span></span><code><span id=__span-0-1><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nb>cd</span><span class=w> </span>ripster
</span><span id=__span-0-2><a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>./start.sh
</span></code></pre></div> <p>Öffne <a href=http://localhost:5173>http://localhost:5173</a> im Browser. Das Dashboard zeigt <code>IDLE</code>.</p> <hr> <h2 id=schritt-2-disc-einlegen-disc_detected>Schritt 2 Disc einlegen → <code>DISC_DETECTED</code><a class=headerlink href=#schritt-2-disc-einlegen-disc_detected title="Permanent link">&para;</a></h2> <p>Lege eine DVD oder Blu-ray ein. Der <code>diskDetectionService</code> pollt das Laufwerk alle <code>disc_poll_interval_ms</code> Millisekunden (Standard: 4 Sekunden).</p> <p><strong>Was passiert im Code:</strong></p> <ul> <li><code>diskDetectionService</code> emittiert <code>discInserted</code> mit Geräteinformationen</li> <li><code>pipelineService.onDiscInserted()</code> wird aufgerufen</li> <li>Dashboard-Status-Badge zeigt <strong>"Medium erkannt"</strong></li> <li>Status-Text zeigt <strong>"Neue Disk erkannt"</strong></li> <li>Der <strong>"Analyse starten"</strong>-Button wird aktiv</li> </ul> <div class="admonition tip"> <p class=admonition-title>Manuelle Auslösung</p> <p>Falls die automatische Erkennung nicht greift: <div class="language-bash highlight"><pre><span></span><code><span id=__span-1-1><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a>curl<span class=w> </span>-X<span class=w> </span>POST<span class=w> </span>http://localhost:3001/api/pipeline/analyze
</span></code></pre></div></p> </div> <hr> <h2 id=schritt-3-analyse-starten-metadata_selection>Schritt 3 Analyse starten → <code>METADATA_SELECTION</code><a class=headerlink href=#schritt-3-analyse-starten-metadata_selection title="Permanent link">&para;</a></h2> <p>Klicke auf <strong>"Analyse starten"</strong>.</p> <p><strong>Was passiert im Code:</strong></p> <ol> <li>Ein neuer Job-Datensatz wird in der Datenbank angelegt (<code>status: METADATA_SELECTION</code>)</li> <li>Ripster versucht, den Titel automatisch aus dem Disc-Label/Modell zu ermitteln</li> <li>Mit diesem erkannten Titel wird sofort eine <strong>OMDb-Suche</strong> ausgelöst</li> <li>Der <code>MetadataSelectionDialog</code> öffnet sich im Frontend mit den vorgeladenen Suchergebnissen</li> </ol> <p><strong>Erkannter Titel:</strong> Der Disc-Label (z. B. <code>INCEPTION</code>) wird als Suchbegriff verwendet. Falls kein Label vorhanden, bleibt das Suchfeld leer.</p> <hr> <h2 id=schritt-4-metadaten-auswahlen-metadataselectiondialog>Schritt 4 Metadaten auswählen (<code>MetadataSelectionDialog</code>)<a class=headerlink href=#schritt-4-metadaten-auswahlen-metadataselectiondialog title="Permanent link">&para;</a></h2> <p>Der Dialog zeigt vorgeladene OMDb-Suchergebnisse. Du kannst:</p> <h3 id=4a-omdb-suchergebnis-wahlen>4a) OMDb-Suchergebnis wählen<a class=headerlink href=#4a-omdb-suchergebnis-wahlen title="Permanent link">&para;</a></h3> <div class="language-text highlight"><pre><span></span><code><span id=__span-2-1><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a>┌─────────────────────────────────────────────────┐
</span><span id=__span-2-2><a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a>│ Suche: [Inception ] 🔍 │
</span><span id=__span-2-3><a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a>├─────────────────────────────────────────────────┤
</span><span id=__span-2-4><a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a>│ ▶ Inception (2010) · Movie · tt1375666 │
</span><span id=__span-2-5><a id=__codelineno-2-5 name=__codelineno-2-5 href=#__codelineno-2-5></a>│ Inception: ... · Series · ... │
</span><span id=__span-2-6><a id=__codelineno-2-6 name=__codelineno-2-6 href=#__codelineno-2-6></a>├─────────────────────────────────────────────────┤
</span><span id=__span-2-7><a id=__codelineno-2-7 name=__codelineno-2-7 href=#__codelineno-2-7></a>│ [Auswahl übernehmen] │
</span><span id=__span-2-8><a id=__codelineno-2-8 name=__codelineno-2-8 href=#__codelineno-2-8></a>└─────────────────────────────────────────────────┘
</span></code></pre></div> <ul> <li>Suche durch Titel anpassen und Enter drücken</li> <li>Typ-Filter: <code>movie</code> / <code>series</code> umschalten möglich</li> <li>Einen Eintrag anklicken, dann <strong>"Auswahl übernehmen"</strong></li> </ul> <h3 id=4b-manuelle-eingabe-ohne-omdb>4b) Manuelle Eingabe (ohne OMDb)<a class=headerlink href=#4b-manuelle-eingabe-ohne-omdb title="Permanent link">&para;</a></h3> <p>Falls kein passendes Ergebnis gefunden wird: - Titel, Jahr und IMDb-ID manuell eingeben - OMDb-Poster wird übersprungen</p> <p><strong>Was passiert nach Bestätigung:</strong></p> <p>Ripster ruft <code>pipelineService.selectMetadata()</code> auf und startet den nächsten Schritt automatisch:</p> <ul> <li>Job wird auf <code>READY_TO_START</code> gesetzt (kurzer Übergangszustand)</li> <li>Falls bereits RAW vorhanden: direkter Sprung zu <code>MEDIAINFO_CHECK</code></li> <li>Falls kein RAW vorhanden: automatischer Start von <code>RIPPING</code></li> <li>Wenn bereits andere Jobs laufen, landet der Start stattdessen in der Queue</li> </ul> <hr> <h2 id=schritt-5-optional-playlist-auswahl-waiting_for_user_decision>Schritt 5 Optional: Playlist-Auswahl → <code>WAITING_FOR_USER_DECISION</code><a class=headerlink href=#schritt-5-optional-playlist-auswahl-waiting_for_user_decision title="Permanent link">&para;</a></h2> <p>Dieser Zustand erscheint nur bei mehrdeutigen Blu-ray-Playlists (typisch nach RAW-Analyse im Backup-Modus).</p> <p>Der <strong>Playlist-Auswahl-Dialog</strong> erscheint <strong>zusätzlich</strong> (nach dem Metadaten-Dialog):</p> <div class="language-text highlight"><pre><span></span><code><span id=__span-3-1><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a>┌───────────────────────────────────────────────────────────────┐
</span><span id=__span-3-2><a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a>│ Playlist-Auswahl │
</span><span id=__span-3-3><a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a>│ Es wurden mehrere Titel mit ähnlicher Laufzeit gefunden. │
</span><span id=__span-3-4><a id=__codelineno-3-4 name=__codelineno-3-4 href=#__codelineno-3-4></a>│ Bitte wähle die korrekte Playlist: │
</span><span id=__span-3-5><a id=__codelineno-3-5 name=__codelineno-3-5 href=#__codelineno-3-5></a>├───────────┬──────────┬────────┬──────────────────────────────┤
</span><span id=__span-3-6><a id=__codelineno-3-6 name=__codelineno-3-6 href=#__codelineno-3-6></a>│ Playlist │ Laufzeit │ Score │ Bewertung │
</span><span id=__span-3-7><a id=__codelineno-3-7 name=__codelineno-3-7 href=#__codelineno-3-7></a>├───────────┼──────────┼────────┼──────────────────────────────┤
</span><span id=__span-3-8><a id=__codelineno-3-8 name=__codelineno-3-8 href=#__codelineno-3-8></a>│ ● 00800 │ 2:28:05 │ +18 │ wahrscheinlich korrekt │
</span><span id=__span-3-9><a id=__codelineno-3-9 name=__codelineno-3-9 href=#__codelineno-3-9></a>│ │ │ │ (lineare Segmentfolge) │
</span><span id=__span-3-10><a id=__codelineno-3-10 name=__codelineno-3-10 href=#__codelineno-3-10></a>├───────────┼──────────┼────────┼──────────────────────────────┤
</span><span id=__span-3-11><a id=__codelineno-3-11 name=__codelineno-3-11 href=#__codelineno-3-11></a>│ ○ 00801 │ 2:28:12 │ 4 │ Auffällige Segmentreihenfolge │
</span><span id=__span-3-12><a id=__codelineno-3-12 name=__codelineno-3-12 href=#__codelineno-3-12></a>├───────────┼──────────┼────────┼──────────────────────────────┤
</span><span id=__span-3-13><a id=__codelineno-3-13 name=__codelineno-3-13 href=#__codelineno-3-13></a>│ ○ 00900 │ 2:28:05 │ 32 │ Fake-Struktur │
</span><span id=__span-3-14><a id=__codelineno-3-14 name=__codelineno-3-14 href=#__codelineno-3-14></a>│ │ │ │ (alternierendes Sprungmuster) │
</span><span id=__span-3-15><a id=__codelineno-3-15 name=__codelineno-3-15 href=#__codelineno-3-15></a>└───────────┴──────────┴────────┴──────────────────────────────┘
</span><span id=__span-3-16><a id=__codelineno-3-16 name=__codelineno-3-16 href=#__codelineno-3-16></a> 847 Playlists insgesamt · 3 relevante Kandidaten (≥ 15 min)
</span><span id=__span-3-17><a id=__codelineno-3-17 name=__codelineno-3-17 href=#__codelineno-3-17></a> Empfehlung: 00800 (vorausgewählt)
</span><span id=__span-3-18><a id=__codelineno-3-18 name=__codelineno-3-18 href=#__codelineno-3-18></a> [Playlist übernehmen]
</span></code></pre></div> <ul> <li>Die empfohlene Playlist ist <strong>vorausgewählt</strong> (Checkbox)</li> <li>Score und Bewertungslabel helfen bei der Entscheidung</li> <li>Nach <strong>"Playlist übernehmen"</strong> setzt Ripster automatisch fort:</li> <li>mit vorhandenem RAW in <code>MEDIAINFO_CHECK</code></li> <li>ohne RAW über <code>READY_TO_START</code> weiter Richtung <code>RIPPING</code></li> </ul> <div class="admonition info"> <p class=admonition-title>Scoring-Details</p> <p>Wie die Scores berechnet werden, erklärt die <a href=../../pipeline/playlist-analysis/ >Playlist-Analyse</a>-Seite.</p> </div> <hr> <h2 id=schritt-6-ripping-ripping>Schritt 6 Ripping → <code>RIPPING</code><a class=headerlink href=#schritt-6-ripping-ripping title="Permanent link">&para;</a></h2> <p><strong>Vorher prüft Ripster:</strong> Existiert bereits eine Raw-Datei für diesen Job?</p> <ul> <li><strong>Ja, Raw-Datei vorhanden</strong> → Direkt zu Schritt 7 (Track-Review), kein erneutes Ripping</li> <li><strong>Nein</strong> → MakeMKV-Ripping startet</li> </ul> <p>Im Standardfall startet Ripster diesen Schritt automatisch nach der Metadaten-Auswahl. Der Button <strong>"Job starten"</strong> ist hauptsächlich für Sonderfälle sichtbar (z. B. Fallback/Queue).</p> <p><strong>Was MakeMKV ausführt (MKV-Modus):</strong></p> <div class="language-bash highlight"><pre><span></span><code><span id=__span-4-1><a id=__codelineno-4-1 name=__codelineno-4-1 href=#__codelineno-4-1></a>makemkvcon<span class=w> </span>mkv<span class=w> </span>disc:0<span class=w> </span>all<span class=w> </span>/mnt/raw/Inception-2010/<span class=w> </span><span class=se>\</span>
</span><span id=__span-4-2><a id=__codelineno-4-2 name=__codelineno-4-2 href=#__codelineno-4-2></a><span class=w> </span>--minlength<span class=o>=</span><span class=m>900</span><span class=w> </span>-r
</span></code></pre></div> <p><strong>Was MakeMKV ausführt (Backup-Modus):</strong></p> <div class="language-bash highlight"><pre><span></span><code><span id=__span-5-1><a id=__codelineno-5-1 name=__codelineno-5-1 href=#__codelineno-5-1></a>makemkvcon<span class=w> </span>backup<span class=w> </span>disc:0<span class=w> </span>/mnt/raw/Inception-2010-backup/<span class=w> </span><span class=se>\</span>
</span><span id=__span-5-2><a id=__codelineno-5-2 name=__codelineno-5-2 href=#__codelineno-5-2></a><span class=w> </span>--decrypt<span class=w> </span>-r
</span></code></pre></div> <p><strong>Live-Fortschritt</strong> wird aus der MakeMKV-Ausgabe geparst:</p> <div class="language-text highlight"><pre><span></span><code><span id=__span-6-1><a id=__codelineno-6-1 name=__codelineno-6-1 href=#__codelineno-6-1></a>PRGV:2048,0,65536 → Fortschritt wird berechnet und per WebSocket gesendet
</span><span id=__span-6-2><a id=__codelineno-6-2 name=__codelineno-6-2 href=#__codelineno-6-2></a>PRGT:5011,0,&quot;Sichern...&quot; → Aktueller Task-Name
</span></code></pre></div> <p><strong>Typische Dauer:</strong> - DVD: 2045 Minuten - Blu-ray: 45120 Minuten</p> <hr> <h2 id=schritt-7-track-review-ready_to_encode>Schritt 7 Track-Review → <code>READY_TO_ENCODE</code><a class=headerlink href=#schritt-7-track-review-ready_to_encode title="Permanent link">&para;</a></h2> <p>Nach dem Ripping, nach Playlist-Übernahme oder direkt bei vorhandenem RAW startet der <strong>HandBrake-Scan</strong>:</p> <div class="language-bash highlight"><pre><span></span><code><span id=__span-7-1><a id=__codelineno-7-1 name=__codelineno-7-1 href=#__codelineno-7-1></a>HandBrakeCLI<span class=w> </span>--scan<span class=w> </span>-i<span class=w> </span>&lt;quelle&gt;<span class=w> </span>-t<span class=w> </span><span class=m>0</span>
</span></code></pre></div> <p>Dieser Scan liest alle Tracks aus ohne zu encodieren. Ripster baut daraus den Encode-Plan mit automatischer Vorauswahl:</p> <p><strong>Status: <code>MEDIAINFO_CHECK</code></strong> läuft automatisch, kein Benutzereingriff</p> <p>Danach öffnet sich das <strong>Encode-Review-Panel</strong> (<code>READY_TO_ENCODE</code>):</p> <div class="language-text highlight"><pre><span></span><code><span id=__span-8-1><a id=__codelineno-8-1 name=__codelineno-8-1 href=#__codelineno-8-1></a>┌─────────────────────────────────────────────────────────────────┐
</span><span id=__span-8-2><a id=__codelineno-8-2 name=__codelineno-8-2 href=#__codelineno-8-2></a>│ Encode-Review │
</span><span id=__span-8-3><a id=__codelineno-8-3 name=__codelineno-8-3 href=#__codelineno-8-3></a>│ Titel: Disc Title 1 · Laufzeit: 2:28:05 · 28 Kapitel │
</span><span id=__span-8-4><a id=__codelineno-8-4 name=__codelineno-8-4 href=#__codelineno-8-4></a>├─────────────────────────────────────────────────────────────────┤
</span><span id=__span-8-5><a id=__codelineno-8-5 name=__codelineno-8-5 href=#__codelineno-8-5></a>│ Audio-Spuren │
</span><span id=__span-8-6><a id=__codelineno-8-6 name=__codelineno-8-6 href=#__codelineno-8-6></a>├──────┬─────────────────────────────┬───────────────────────────┤
</span><span id=__span-8-7><a id=__codelineno-8-7 name=__codelineno-8-7 href=#__codelineno-8-7></a>│ ☑ │ Track 1: English (AC3, 5.1) │ Copy (ac3) │
</span><span id=__span-8-8><a id=__codelineno-8-8 name=__codelineno-8-8 href=#__codelineno-8-8></a>│ ☑ │ Track 2: Deutsch (DTS, 5.1) │ Fallback Transcode (av_aac)│
</span><span id=__span-8-9><a id=__codelineno-8-9 name=__codelineno-8-9 href=#__codelineno-8-9></a>│ ☐ │ Track 3: Français (AC3, 2.0) │ Nicht übernommen │
</span><span id=__span-8-10><a id=__codelineno-8-10 name=__codelineno-8-10 href=#__codelineno-8-10></a>├──────┴─────────────────────────────┴───────────────────────────┤
</span><span id=__span-8-11><a id=__codelineno-8-11 name=__codelineno-8-11 href=#__codelineno-8-11></a>│ Untertitel-Spuren │
</span><span id=__span-8-12><a id=__codelineno-8-12 name=__codelineno-8-12 href=#__codelineno-8-12></a>├──────┬─────────────────────────────┬────────┬──────┬──────────┤
</span><span id=__span-8-13><a id=__codelineno-8-13 name=__codelineno-8-13 href=#__codelineno-8-13></a>│ ☑ │ Track 1: Deutsch │ Einbr.☐ │Forc.☐│Default☑ │
</span><span id=__span-8-14><a id=__codelineno-8-14 name=__codelineno-8-14 href=#__codelineno-8-14></a>│ ☐ │ Track 2: English │ Einbr.☐ │Forc.☐│Default☐ │
</span><span id=__span-8-15><a id=__codelineno-8-15 name=__codelineno-8-15 href=#__codelineno-8-15></a>├──────┴─────────────────────────────┴────────┴──────┴──────────┤
</span><span id=__span-8-16><a id=__codelineno-8-16 name=__codelineno-8-16 href=#__codelineno-8-16></a>│ [Encoding starten] │
</span><span id=__span-8-17><a id=__codelineno-8-17 name=__codelineno-8-17 href=#__codelineno-8-17></a>└─────────────────────────────────────────────────────────────────┘
</span></code></pre></div> <h3 id=audio-track-aktionen-verstehen>Audio-Track-Aktionen verstehen<a class=headerlink href=#audio-track-aktionen-verstehen title="Permanent link">&para;</a></h3> <table> <thead> <tr> <th>Symbol/Text</th> <th>Bedeutung</th> </tr> </thead> <tbody> <tr> <td><code>Copy (ac3)</code></td> <td>Track wird <strong>verlustfrei</strong> direkt übernommen</td> </tr> <tr> <td><code>Copy (truehd)</code></td> <td>TrueHD-Track wird direkt übernommen</td> </tr> <tr> <td><code>Transcode (av_aac)</code></td> <td>Track wird zu AAC umgewandelt</td> </tr> <tr> <td><code>Fallback Transcode (av_aac)</code></td> <td>Copy nicht möglich → automatisch zu AAC</td> </tr> <tr> <td><code>Preset-Default (HandBrake)</code></td> <td>HandBrake-Preset entscheidet</td> </tr> <tr> <td><code>Nicht übernommen</code></td> <td>Track ist nicht ausgewählt</td> </tr> </tbody> </table> <h3 id=untertitel-flags>Untertitel-Flags<a class=headerlink href=#untertitel-flags title="Permanent link">&para;</a></h3> <table> <thead> <tr> <th>Flag</th> <th>Bedeutung</th> </tr> </thead> <tbody> <tr> <td><strong>Einbrennen</strong></td> <td>Untertitel werden fest ins Video gebrannt (nur ein Track möglich)</td> </tr> <tr> <td><strong>Forced</strong></td> <td>Nur erzwungene Untertitel-Einblendungen übernehmen</td> </tr> <tr> <td><strong>Default</strong></td> <td>Diese Spur wird beim Abspielen automatisch aktiviert</td> </tr> </tbody> </table> <h3 id=vorauswahl-regeln>Vorauswahl-Regeln<a class=headerlink href=#vorauswahl-regeln title="Permanent link">&para;</a></h3> <p>Die Tracks mit <code></code> wurden nach der Regel aus den Einstellungen automatisch vorausgewählt (<code>selectedByRule: true</code>). Die Auswahl kann frei geändert werden.</p> <p>Klicke <strong>"Encoding starten"</strong> (bzw. im Pre-Rip-Modus <strong>"Backup + Encoding starten"</strong>), um fortzufahren. Falls die Auswahl noch nicht bestätigt wurde, übernimmt das Frontend die Bestätigung automatisch beim Start.</p> <hr> <h2 id=schritt-8-encoding-encoding>Schritt 8 Encoding → <code>ENCODING</code><a class=headerlink href=#schritt-8-encoding-encoding title="Permanent link">&para;</a></h2> <p>HandBrake startet mit dem finalisierten Plan:</p> <div class="language-bash highlight"><pre><span></span><code><span id=__span-9-1><a id=__codelineno-9-1 name=__codelineno-9-1 href=#__codelineno-9-1></a>HandBrakeCLI<span class=w> </span><span class=se>\</span>
</span><span id=__span-9-2><a id=__codelineno-9-2 name=__codelineno-9-2 href=#__codelineno-9-2></a><span class=w> </span>-i<span class=w> </span>/dev/sr0<span class=w> </span><span class=se>\</span>
</span><span id=__span-9-3><a id=__codelineno-9-3 name=__codelineno-9-3 href=#__codelineno-9-3></a><span class=w> </span>-o<span class=w> </span><span class=s2>&quot;/mnt/movies/Inception (2010).mkv&quot;</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-9-4><a id=__codelineno-9-4 name=__codelineno-9-4 href=#__codelineno-9-4></a><span class=w> </span>-t<span class=w> </span><span class=m>1</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-9-5><a id=__codelineno-9-5 name=__codelineno-9-5 href=#__codelineno-9-5></a><span class=w> </span>--preset<span class=w> </span><span class=s2>&quot;H.265 MKV 1080p30&quot;</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-9-6><a id=__codelineno-9-6 name=__codelineno-9-6 href=#__codelineno-9-6></a><span class=w> </span>-a<span class=w> </span><span class=m>1</span>,2<span class=w> </span><span class=se>\</span>
</span><span id=__span-9-7><a id=__codelineno-9-7 name=__codelineno-9-7 href=#__codelineno-9-7></a><span class=w> </span>-E<span class=w> </span>copy:ac3,av_aac<span class=w> </span><span class=se>\</span>
</span><span id=__span-9-8><a id=__codelineno-9-8 name=__codelineno-9-8 href=#__codelineno-9-8></a><span class=w> </span>-s<span class=w> </span><span class=m>1</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-9-9><a id=__codelineno-9-9 name=__codelineno-9-9 href=#__codelineno-9-9></a><span class=w> </span>--subtitle-default<span class=w> </span><span class=m>1</span>
</span></code></pre></div> <p><strong>Live-Fortschritt</strong> wird aus HandBrake-stderr geparst:</p> <div class="language-text highlight"><pre><span></span><code><span id=__span-10-1><a id=__codelineno-10-1 name=__codelineno-10-1 href=#__codelineno-10-1></a>Encoding: task 1 of 1, 73.50 % (45.23 fps, avg 44.12 fps, ETA 00h12m34s)
</span></code></pre></div> <p>Das Dashboard zeigt: - Fortschrittsbalken (0100 %) - Aktuelle Encoding-Geschwindigkeit (FPS) - Geschätzte Restzeit (ETA)</p> <p><strong>Typische Dauer (abhängig von CPU/GPU und Preset):</strong> - Schnelles Preset (<code>fast</code>): 0.5× Echtzeit - Standard-Preset: 13× Echtzeit - Langsames Preset (<code>slow</code>): 510× Echtzeit</p> <hr> <h2 id=schritt-9-fertig-finished>Schritt 9 Fertig! → <code>FINISHED</code><a class=headerlink href=#schritt-9-fertig-finished title="Permanent link">&para;</a></h2> <div class="language-text highlight"><pre><span></span><code><span id=__span-11-1><a id=__codelineno-11-1 name=__codelineno-11-1 href=#__codelineno-11-1></a>/mnt/nas/movies/
</span><span id=__span-11-2><a id=__codelineno-11-2 name=__codelineno-11-2 href=#__codelineno-11-2></a>└── Inception (2010).mkv ✓ Encodierung abgeschlossen
</span></code></pre></div> <ul> <li>Job-Status in der Datenbank: <code>FINISHED</code></li> <li>PushOver-Benachrichtigung (falls konfiguriert)</li> <li>Eintrag in der <a href=http://localhost:5173/history>History</a> mit vollständigen Logs</li> </ul> <hr> <h2 id=fehlerbehandlung>Fehlerbehandlung<a class=headerlink href=#fehlerbehandlung title="Permanent link">&para;</a></h2> <h3 id=job-im-status-error>Job im Status <code>ERROR</code><a class=headerlink href=#job-im-status-error title="Permanent link">&para;</a></h3> <ol> <li><strong>Dashboard</strong>: Details-Button → Log-Ausgabe prüfen</li> <li><strong>Retry</strong>: Job vom Fehlerzustand neu starten (behält Metadaten)</li> <li><strong>History</strong>: Vollständige Logs und Fehlerdetails</li> </ol> <h3 id=haufige-fehlerursachen>Häufige Fehlerursachen<a class=headerlink href=#haufige-fehlerursachen title="Permanent link">&para;</a></h3> <table> <thead> <tr> <th>Fehler</th> <th>Ursache</th> <th>Lösung</th> </tr> </thead> <tbody> <tr> <td>MakeMKV: Lizenzfehler</td> <td>Abgelaufene Beta-Lizenz</td> <td>Neue Lizenz im <a href="https://www.makemkv.com/forum/viewtopic.php?t=1053">MakeMKV-Forum</a></td> </tr> <tr> <td>HandBrake: Preset nicht gefunden</td> <td>Preset-Name falsch</td> <td><code>HandBrakeCLI --preset-list</code> prüfen</td> </tr> <tr> <td>Keine Disc erkannt</td> <td>Laufwerk-Berechtigungen</td> <td><code>sudo chmod a+rw /dev/sr0</code></td> </tr> <tr> <td>Falsches Video (zerstückelt)</td> <td>Falsche Playlist</td> <td>Job re-encodieren mit anderer Playlist</td> </tr> <tr> <td>OMDb: Keine Ergebnisse</td> <td>API-Key fehlt oder Titel nicht gefunden</td> <td>Einstellungen prüfen; manuell eingeben</td> </tr> </tbody> </table> <hr> <h2 id=kurzubersicht-aller-schritte>Kurzübersicht aller Schritte<a class=headerlink href=#kurzubersicht-aller-schritte title="Permanent link">&para;</a></h2> <table> <thead> <tr> <th>#</th> <th>Status</th> <th>Benutzeraktion</th> <th>Was Ripster tut</th> </tr> </thead> <tbody> <tr> <td>1</td> <td><code>IDLE</code></td> <td>Disc einlegen</td> <td>Disc-Polling erkennt Disc</td> </tr> <tr> <td>2</td> <td><code>DISC_DETECTED</code></td> <td>"Analyse starten" klicken</td> <td>Job anlegen, OMDb vorsuchen</td> </tr> <tr> <td>3</td> <td><code>METADATA_SELECTION</code></td> <td>Film im Dialog auswählen</td> <td>Start automatisch einplanen/auslösen</td> </tr> <tr> <td>4</td> <td><code>READY_TO_START</code></td> <td>meist keine</td> <td>Übergangszustand vor Auto-Start</td> </tr> <tr> <td>5</td> <td><code>RIPPING</code></td> <td>Warten</td> <td>MakeMKV rippt, Fortschritt streamen</td> </tr> <tr> <td>6</td> <td><code>MEDIAINFO_CHECK</code></td> <td>Warten</td> <td>HandBrake-Scan, Encode-Plan bauen</td> </tr> <tr> <td>7</td> <td><code>WAITING_FOR_USER_DECISION</code> (optional)</td> <td>Playlist manuell wählen</td> <td>Auf Bestätigung warten</td> </tr> <tr> <td>8</td> <td><code>READY_TO_ENCODE</code></td> <td>Tracks prüfen + "Encoding starten"</td> <td>Auswahl übernehmen, Start auslösen</td> </tr> <tr> <td>9</td> <td><code>ENCODING</code></td> <td>Warten</td> <td>HandBrake encodiert, inkl. Post-Skripte</td> </tr> <tr> <td>10</td> <td><code>FINISHED</code></td> <td></td> <td>Datei fertig, Benachrichtigung senden</td> </tr> </tbody> </table> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Zurück zum Seitenanfang </button> </main> <footer class=md-footer> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/YOUR_GITHUB_USERNAME/ripster target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <script id=__config type=application/json>{"annotate": null, "base": "../..", "features": ["navigation.tabs", "navigation.tabs.sticky", "navigation.sections", "navigation.expand", "navigation.indexes", "navigation.top", "search.highlight", "search.suggest", "content.code.copy", "content.code.annotate", "content.tabs.link", "toc.integrate"], "search": "../../assets/javascripts/workers/search.7a47a382.min.js", "tags": null, "translations": {"clipboard.copied": "In Zwischenablage kopiert", "clipboard.copy": "In Zwischenablage kopieren", "search.result.more.one": "1 weiteres Suchergebnis auf dieser Seite", "search.result.more.other": "# weitere Suchergebnisse auf dieser Seite", "search.result.none": "Keine Suchergebnisse", "search.result.one": "1 Suchergebnis", "search.result.other": "# Suchergebnisse", "search.result.placeholder": "Suchbegriff eingeben", "search.result.term.missing": "Es fehlt", "select.version": "Version ausw\u00e4hlen"}, "version": {"provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.e71a0d61.min.js></script> </body> </html>