ffmpeg auf Pi2 ?

  • Hallo liebe Community,


    aktuell habe ich noch einen ungenutzten Pi 2 (aus einem alten Projekt) bei mir rumfliegen und dachte mir, wieso den nicht benutzen.


    Denn ich habe folgendes "Problem":
    Ich habe mitlerweile eine recht große Filmesammlung (>1000) und habe ein Problem.
    Alle Filme sind h264 , AC3 5.1 kodiert, mein Player (FireTV Stick mit Plex) erkennt die 5.1 tonspur aber nicht richtig und gibt nur die Center-Spur wider.


    Optimal wäre es jetzt, wenn ich eine automatisierte Lösung auf dem Raspberry finde der sich einen Film nach dem anderen vornimmt, die Tonspur zu AAC 2.0 codiert und die neue Tonspur zusätzlich zur 5.1 Spur in die mkv muxed.
    Die Videospur soll dabei nur kopiert werden.


    Zur not würde ich auch die 5.1 überschreiben.


    Geht das mit ffmpeg oder gibt es da eine bessere Lösung?
    Das es sehr lange dauert ist mir klar, würde ich auch gerne in kauf nehmen :)


    LG
    Dennis

    Edited once, last by Dimmi52 ().

  • Allgemein bringt ffmpeg alle nötigen Werkzeuge mit um sowas zu machen - ja. Es käme nur darauf an wie man es installiert... Ich empfehle es grundsätzlich selber zu kompilieren und dabei dann Optionen zu setzen die enabled oder disabled werden sollen.


    Ich kann dir aber nicht beantworten Wie der benötigte Befehl zum re-muxen aussieht!


    Eine mögliche Alternative wäre ggf auch mp4box



    Vorbereitung wäre die nötigen Pakete zum kompilieren zu installieren - hierbei müssten auch direkt Pakete installiert werden die für die spätere Kompilierung zur Nutzung von ffmpeg erkannt werden würden.
    Das kompilieren kann ziemlich lange dauern - insbesondere auf einem älteren Pi1. Deshalb installiere ich hier auch direkt ein Tool "screen" mit in dem wir das spätere kompilieren drin ausführen sodass es auch dann weiter läuft wenn wir die SSH Verbindung trennen.

    Code
    apt-get update
    apt-get install build-essential libav-tools libavcodec-extra-56 libpcre3-dev libpcre++-dev zlib1g-dev libcurl4-openssl-dev libssl-dev libx264-dev libmp3lame-dev git-core curl screen


    Üblicherweise legt man sich Quellcodes in ein bestimmtes Verzeichnis: /usr/src/
    Wir laden uns also nun den Sourcecode von ffmpeg in dieses Verzeichnis:

    Code
    cd /usr/src
    git clone git://source.ffmpeg.org/ffmpeg.git


    Anschließend in das neue Verzeichnis wechseln..

    Code
    cd ffmpeg


    Dann ginge es ans kompilieren. Generell, sofern eine "configure" Datei vorhanden ist, kann man sich mithilfe von ./configure --help die möglichen Parameter anzeigen lassen - darüber kann man dann Funktionen/Features enablen oder disablen. Das solltest du dir auf jeden Fall vor dem eigentlichen kompilieren gründlich angucken.


    Da ich einen Einzeiler zum kompilieren usw verwende, muss man jetzt erst mal "screen" starten und da drin dann erst den Einzeiler ausführen:

    Code
    screen


    Ich mach dann normalerweise das:

    Code
    ./configure --enable-nonfree --enable-gpl --enable-libx264 && make -j4 && make install

    Aber ob das auch für Dich passend ist kann ich nicht beurteilen!


    "make -j4" sorgt dafür das 4 gleichzeitige Jobs zum kompilieren genutzt werden - was auf einem Pi2 dafür sorgt das alle 4 Cores gleichmäßig ausgenutzt werden und somit das Kompilieren schneller ist. Auf einem Pi1 muss man "-j4" aber weg lassen da der keine 4 Cores hat.



    In wiefern du dann jeden einzelnen Film deiner Sammlung automatisiert abarbeiten lassen kannst, kann ich zum jetzigen Zeitpunkt noch nicht sagen - da aber davon auszugehen ist dass deine Sammlung nicht stagnieren wird, wäre es ratsam eine Art Datenbank anzulegen mit Filmen die bereits bearbeitet wurden damit nicht immer wieder alle remuxed werden.
    Da wären aber ein paar mehr Informationen Deinerseits nicht schlecht ;)

  • Das hilft mir schon mal sehr weiter!
    Muss mich dann noch weiter einlesen, aber das ist schon mal ein sehr guter Ansatzpunkt :)


    Bezüglich deines letzten Punktes:
    Ehrlich gesagt bin ich etwas ratlos was du damit meinst :D
    So wie ich das verstehe siehst du ein Problem in dem Abbruch des gewünschten Automatismus?
    Ich bin mir nicht sicher ob das relevant ist, wenn ich per find rekursich meinen Filmeordner durchsuche und anschließend an ffmpeg leite.
    Dazu sollte ich vielleicht noch sagen, dass aktuell alle Filme als .avi vorliegen, diese aber nach dem Prozess mkv Container sein sollen. Dadurch sollte ich nicht durcheinanderkommen.


    Hatte da an ein kleines Skript gedacht:


    find ./ -name '*.avi'
    for i in *.avi;
    do ffmpeg -i $i -c:v copy -profile:v main -level 3.1 -c:a libfaac -b:a 128k $i.mkv;
    done


    Ob das so klappt, keine ahnung :D

    Edited once, last by Dimmi52 ().


  • In der Form nicht, nein ;) Da fehlt für "for" das zuvor gefundene..
    Unter Vorbehalt evtl. so:


    Bevor du das Script drüber jagst solltest du aber erst prüfen ob der ffmpeg Befehl korrekt ist und das Ergebnis wie gewünscht wäre und ggf die letzten Zeilen (ab ffmpeg) zum testen auskommentieren um zu prüfen ob das auch wie gewünscht funktioniert. :D


    "-threads 0" bewirkt übrigens das ffmpeg selber ermittelt wie viele Cores zur Verfügung stehen und nutzt dann alle. Beim Pi2 würde er dann also 4 Threads nutzen.


    Es wär aber auch fraglich wann das Script aufgeführt werden soll - da das Umwandeln vermutlich anfangs sehr lange dauert und ziemlich viel Last erzeugen wird... Machst du mit dem Pi noch was anderes wie zB als MediaCenter nutzen?

  • Coole Sache! Danke für die hilfestellung beim Skript!
    Werde ich nachher mal ausprobieren :)


    Das mit den Cores hilft mir auch sehr, da ich den Pi tatsächlich für nichts anderes nutzeen würde als das konvertieren.
    Fürs MedienCenter nutze ich einen anderen Pi :D


    Aber rein theoretisch ich würde nebenher noch xbmc laufen lassen, könnte ich angeben er soll nur die kerne 3 und 4 nutzen?


    Was ich noch nicht ganz aus dem Script rauslesen konnte:
    Es wird eine neue Datei erstellt die ausschließlich die neue Tonspur enthält oder?
    Eine Möglichkeit auch die alte Tonspur in die Ausgabedatei zu integrieren gibt es nicht oder?


    Danke schon mal für deine riesen Hilfe :)

    Edited once, last by Dimmi52 ().


  • Aber rein theoretisch ich würde nebenher noch xbmc laufen lassen, könnte ich angeben er soll nur die kerne 3 und 4 nutzen?


    Wenn du "-threads 2" angibst nutzt er nur 2 Kerne, welche das sind kannst du dabei aber nicht festlegen. Der Kernel Scheduler verteilt die Last aber selbstständig sehr gut.



    Es wird eine neue Datei erstellt die ausschließlich die neue Tonspur enthält oder?
    Eine Möglichkeit auch die alte Tonspur in die Ausgabedatei zu integrieren gibt es nicht oder?


    Dazu kann ich nichts sagen - habe die Zeile nur von dir übernommen.