MP4 to MP3 Umwandeln

Status
Für weitere Antworten geschlossen.
Also bei mir funktioniert es noch nach wie vor.

Entscheidend ist die Zeile: Error while opening decoder for input stream #0:1 : Operation not permitted
Kannst du das Skript mal bitte von einem anderen User ausführen lassen - idealerweise als ein Admin oder root?

Ich habe es mal noch etwas 'verschönert':
Bash:
#!/bin/sh

#------------------------- Variablen:
infolder="/volume1/docker/handbrake/storage/mp4/" # Quellverzeichnis
outfolder="/volume1/docker/handbrake/output/" # Zielverzeichnis

# optional Quelldateien in Papierkorb verschieben lassen / sonst leer lassen:
delfolder="/volume1/docker/handbrake/storage/mp4/#recycle"     # Löschverzeichnis der Quelldateien

#--------------------------------------------------
if [ ! -d "${outfolder}" ] || [ ! -d "${infolder}" ]; then
    echo "Pfade prüfen!" > "${outfolder%/}/info.log"
    exit
fi

IFS=$'\012'
for i in $(find "$infolder" -name "*.mp4" -type f); do
    title=$(basename $i)
    title=${title%.*}
    echo "bearbeite $i" >> "${outfolder%/}/info.log"
    ffmpegLog=$(ffmpeg -y -i "$i" -ab 192k -vn "${outfolder%/}/${title}.mp3" 2>&1)
    echo "$ffmpegLog" >> "${outfolder%/}/info.log"
    if [ -d "$delfolder" ] ; then
        echo "verschiebe $i nach $delfolder" >> "${outfolder%/}/info.log"
        mv "$i" "$delfolder"
    fi
done
 
ich hab es als Aufgabe gemacht und funktioniert wenn ich root als benutzereinstelle. eine frage kann ich mehrere Ordner umwandeln so das sie im output auch so wieder erstellt werden
 
Ich habe es für dich mal so angepasst, dass Unterordner mit abgebildet werden:

Bash:
#!/bin/sh

#------------------------- anzupassende Variablen -------------------------
# Quellverzeichnis:
    infolder="/volume1/docker/handbrake/input/"
# Zielverzeichnis:
    outfolder="/volume1/docker/handbrake/output/"
# optional Quelldateien in Papierkorb verschieben lassen / sonst leer lassen:
    delfolder="/volume1/docker/handbrake/storage/mp4/#recycle"

#------------------------- ab hier nichts mehr ändern -------------------------
log="${outfolder%/}/info.log"

if [ ! -d "${outfolder}" ] || [ ! -d "${infolder}" ]; then
    echo "ERROR: Pfade prüfen!"
    exit
fi

IFS=$'\012'
for i in $(find "$infolder" -name "*.mp4" -type f); do
    filename=$(basename $i)
    title=${filename%.*}
    subdir=$(sed "s~$infolder~~g;s~$filename~~g;" <<< "$i")
    outfoldertmp="${outfolder%/}/${subdir}"
    echo "bearbeite $i" >> "$log"
    mkdir -p "${outfoldertmp}"
    ffmpegLog=$(ffmpeg -y -i "$i" -ab 192k -vn ${outfoldertmp%/}/${title}.mp3 2>&1)
    echo "$ffmpegLog" >> "$log"
    if [ -d "$delfolder" ] ; then
        delfoldertmp="${delfolder%/}/${subdir}"
        mkdir -p "$delfoldertmp"
        echo "verschiebe $i nach $delfoldertmp" >> "$log"
        mv "$i" "${delfoldertmp%/}"
    fi
done
 
Zuletzt bearbeitet:
Hallo,

der Code hat mir sehr weiter geholfen, jedoch ist die output-Datei bei mir ebenfalls 0 Byte große.
Dies scheint laut dem Log aber nicht an den Rechten zu liegen, sondern eher an einem fehlenden decoder,
doch wie kann ich diesen nachträglich installieren?

Fehlerauszug:
"Decoder (codec aac) not found for input stream #0:0"

PS: Log ist im Anhang.
Mir ist bewust, dass dieser Beitrag schon etwas älter ist, doch hoffentlich kann trotzdem jemand helfen.
DS 1621+ DSM 7.1-42661 Update 2
 

Anhänge

In ffmpeg von DSM7.1 ist kein AAC En- und Decoder mehr enthalten. Lade dir von Synnocomunity das ffmpeg und passe ggf. die Pfade im Skript an.
 
  • Like
Reaktionen: Mayo_248
Danke für die schnelle Antwort, ich werde mich da mal reinfuchsen.

Ist es richtig, dass ich das AAC-Audio-File mit dem zusätzlichen Comando "-acodec copy" und dem ausgabeformat AAC, einfach extrahieren kann.
Zumindest in einem Kurzen Test mit deinem Script hat es super geklappt.
Ich frage mich nur ob ich mir damit ggf. Fehler einbaue, oder ggf. ganz am Thema vorbei rausche.

Könntest du bitte etwas genauer auf "passe ggf. die Pfade im Skript an", das Paket ist ja schnell installiert, aber danach ist auch erstmal bei mir ende.
Wie bringe ich der DS bei, dieses FFmpeg Paket zu benutzen ?
Meine Englischkenntnisse sind hierfür wahrscheinlich nicht ausreichend.

Gruß Mayo
 
Zuletzt bearbeitet:
Ist es richtig, dass ich das AAC-Audio-File mit dem zusätzlichen Comando "-acodec copy" und dem ausgabeformat AAC, einfach extrahieren kann.
Zumindest in einem Kurzen Test mit deinem Script hat es super geklappt.
Ja, dass sollte so gehen.
ffmpeg -i "$quelldatei" -c:a copy -vn "/pfad/audiospur.m4a"
Die Dateiendung solltest du hier vorher wissen / bei mp4 ist es meistens ein aac Stream, also dann ein m4a-Container.
-c:a copy ist das gleiche wie -acodec copy

Könntest du bitte etwas genauer auf "passe ggf. die Pfade im Skript an", das Paket ist ja schnell installiert, aber danach ist auch erstmal bei mir ende.
Wie bringe ich der DS bei, dieses FFmpeg Paket zu benutzen ?
Das Paket überschreibt das ffmpeg der DS nicht, sondern installiert es parallel. Um es explizit zu nutzen, muss es auch direkt im Skript angesprochen werden. Am besten, man legt den Pfad in eine Variable, falls man es an mehreren Stellen brauchen sollte.

Bash:
ffmpeg=/usr/local/ffmpeg/bin/ffmpeg
$ffmpeg -i "$i" -c:a copy -vn "/pfad/audiospur.m4a"

Edit:
offenbar ist der Pfad ab DSM7 ein anderer:
Bash:
ffmpeg=/var/packages/ffmpeg/target/bin/ffmpeg
$ffmpeg -i "$i" -c:a copy -vn "/pfad/audiospur.m4a"

oder:
Bash:
ffmpeg=/volume1/@appstore/ffmpeg/bin/ffmpeg  # hier ggf. das Volume anpassen, wenn nicht auf Volume1 installiert
$ffmpeg -i "$i" -c:a copy -vn "/pfad/audiospur.m4a"
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Mayo_248
Vielen lieben dank für die Tolle erklärung, und vorallem Danke, dass du dir für meine Probleme Zeit genommen hast =).
 
  • Love
  • Like
Reaktionen: Iarn und geimist
Hallo zusammen,
ich versuche wie Mayo_248 den Fehler zu finden (MP3 sind 0Bytes groß)

Fehlercode:
bearbeite /volume1/60_Musik/test1/Barfuß am Klavier.mp4
ffmpeg version 4.1.8 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 8.5.0 (GCC)
configuration: --prefix=/usr --incdir='${prefix}/include/ffmpeg' --arch=i686 --target-os=linux --cross-prefix=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu- --enable-cross-compile --enable-optimizations --enable-pic --enable-gpl --enable-shared --disable-static --disable-stripping --enable-version3 --enable-encoders --enable-pthreads --disable-protocols --disable-protocol=rtp --enable-protocol=file --enable-protocol=pipe --disable-muxer=image2 --disable-muxer=image2pipe --disable-swscale-alpha --disable-ffplay --disable-ffprobe --disable-doc --disable-devices --disable-bzlib --disable-altivec --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libmp3lame --disable-vaapi --disable-cuvid --disable-nvenc --disable-decoder=aac --disable-decoder=aac_fixed --disable-encoder=aac --disable-decoder=amrnb --disable-decoder=ac3 --disable-decoder=ac3_fixed --disable-encoder=zmbv --disable-encoder=dca --disable-decoder=dca --disable-encoder=ac3 --disable-encoder=ac3_fixed --disable-encoder=eac3 --disable-decoder=eac3 --disable-encoder=truehd --disable-decoder=truehd --disable-encoder=hevc_vaapi --disable-decoder=hevc --disable-muxer=hevc --disable-demuxer=hevc --disable-parser=hevc --disable-bsf=hevc_mp4toannexb --x86asmexe=yasm --cc=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu-wrap-gcc --enable-yasm --enable-libx264 --enable-encoder=libx264
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/volume1/60_Musik/test1/Barfuß am Klavier.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.20.100
Duration: 00:03:15.36, start: 0.000000, bitrate: 629 kb/s
Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, 128 kb/s (default)
Metadata:
handler_name : ISO Media file produced by Google Inc.
Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1080x1080 [SAR 1:1 DAR 1:1], 495 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Metadata:
handler_name : ISO Media file produced by Google Inc.
Stream mapping:
Stream #0:0 -> #0:0 (? (?) -> mp3 (libmp3lame))
Decoder (codec aac) not found for input stream #0:0

Script:
Bash:

#!/bin/sh

#------------------------- Variablen:
infolder="/volume1/60_Musik/test1/" # Quellverzeichnis
outfolder="/volume1/60_Musik/test1mp3/" # Zielverzeichnis

# optional Quelldateien in Papierkorb verschieben lassen / sonst leer lassen:
delfolder="/volume1/60_Musik/test1mp3/#recycle" # Löschverzeichnis der Quelldateien

#--------------------------------------------------



log="${outfolder%/}/info.log"

if [ ! -d "${outfolder}" ] || [ ! -d "${infolder}" ]; then
echo "ERROR: Pfade prüfen!"
exit
fi


IFS=$'\012'
ffmpeg=/var/packages/ffmpeg/target/bin/ffmpeg
$ffmpeg -i "$i" -c:a copy -vn "/pfad/audiospur.m4a"
for i in $(find "$infolder" -name "*.mp4" -type f); do
filename=$(basename $i)
title=${filename%.*}
subdir=$(sed "s~$infolder~~g;s~$filename~~g;" <<< "$i")
outfoldertmp="${outfolder%/}/${subdir}"
echo "bearbeite $i" >> "$log"
mkdir -p "${outfoldertmp}"
ffmpegLog=$(ffmpeg -y -i "$i" -ab 192k -vn ${outfoldertmp%/}/${title}.mp3 2>&1)
echo "$ffmpegLog" >> "$log"
if [ -d "$delfolder" ] ; then
delfoldertmp="${delfolder%/}/${subdir}"
mkdir -p "$delfoldertmp"
echo "verschiebe $i nach $delfoldertmp" >> "$log"
mv "$i" "${delfoldertmp%/}"
fi
done


was läuft bei mir falsch? habe das ffmpeg 6.0 über die Synnocomunity installiert.

Hilfe :)
 
Herzlich willkommen hier im Forum :)

Folgende Zeilen geben Aufschluss:
ffmpeg version 4.1.8 Copyright (c) 2000-2021 the FFmpeg developers
Decoder (codec aac) not found for input stream #0:0

Offensichtlich wird nicht deine manuell installierte ffmpeg-Version genutzt.

Ich hab mir mal die Version 6 von ffmpeg installiert. Diese erreicht man über diesen Pfad: /usr/local/bin/ffmpeg6. Also mal bitte die nachstehende Zeilen so ändern:
Bash:
ffmpeg=/usr/local/bin/ffmpeg6
...
ffmpegLog=$($ffmpeg -y -i "$i" -ab 192k -vn "${outfoldertmp%/}/${title}.mp3" 2>&1)

PS: Bitte Code auch als solchen posten, damit man es besser lesen kann - danke :)
Bildschirmfoto 2023-04-24 um 11.24.59.png

PPS: diese zwei Zeilen bringen dir nichts, wenn du sie einfach in das Skript einfügst:
Code:
ffmpeg=/var/packages/ffmpeg/target/bin/ffmpeg
$ffmpeg -i "$i" -c:a copy -vn "/pfad/audiospur.m4a"
 
Zuletzt bearbeitet:
Hier nochmal als Ganzes mit definierbarer ffmpeg-Version:

Bash:
#!/bin/bash

#------------------------- anzupassende Variablen -------------------------
# Quellverzeichnis:
    infolder="/volume1/docker/handbrake/input/"
# Zielverzeichnis:
    outfolder="/volume1/docker/handbrake/output/"
# optional Quelldateien in Papierkorb verschieben lassen / sonst leer lassen:
    delfolder="/volume1/docker/handbrake/storage/mp4/#recycle"
# gewünschte ffmpeg-Version definieren (>= DSM7):
    # originale Syno-Version:
    ffmpeg=$(which ffmpeg)
    # ffmpeg 6 von synocommunity:
    ffmpeg=/usr/local/bin/ffmpeg6


#------------------------- ab hier nichts mehr ändern -------------------------
log="${outfolder%/}/info.log"

if [ ! -d "${outfolder}" ] || [ ! -d "${infolder}" ]; then
    echo "ERROR: Pfade prüfen!"
    exit
fi

IFS=$'\012'
for i in $(find "$infolder" -name "*.mp4" -type f); do
    filename="$(basename $i)"
    title="${filename%.*}"
    subdir="$(sed "s~$infolder~~g;s~$filename~~g;" <<< "$i")"
    outfoldertmp="${outfolder%/}/${subdir}"
    echo "bearbeite $i" >> "$log"
    mkdir -p "${outfoldertmp}"
    ffmpegLog=$($ffmpeg -y -i "$i" -ab 192k -vn "${outfoldertmp%/}/${title}.mp3" 2>&1)
    echo "$ffmpegLog" >> "$log"
    if [ -d "$delfolder" ] ; then
        delfoldertmp="${delfolder%/}/${subdir}"
        mkdir -p "$delfoldertmp"
        echo "verschiebe $i nach $delfoldertmp" >> "$log"
        mv "$i" "${delfoldertmp%/}"
    fi
done
 
Zuletzt bearbeitet:
jawohl jetzt hat es funktioniert, vielen Dank! :) und danke für die Erklärungen! :)
Grüße Tobias
 
  • Like
Reaktionen: geimist
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat