MPack (Music Packager)

  • so... hab mein Tool endlich fertig


    ich packe es mal hier rein,
    wenn jemand es nutzen will


    gibt aber bitte auch feedback


    [:edit]
    da mir das thema zu einseitig wurde
    und ich mich nicht wirklich für ein monolog begeistern kann
    habe ich alle meines erachtens unnötigen beiträge gelöscht.


    damit ich das script aber auch weiterentwicken kann
    brauche ich bugreports & featurerequests
    am besten mit beispielcode


    [:edit2]
    hier mal wieder diskret ein update von mir
    wenn irgend einer dass findet, runterläd & ein comment hinterlässt,
    dann werde ich den post wieder aktiver machen...


    BugFix:
    - Dateinamen welche "&" beinhalten werden nicht mehr verkürzt

  • morgen... bzw. mahlzeit...
    achtung monolog! kann übersprungen werden...


    soso... es gibt also mindestens 24 leute da draußen MPack nutzen
    bzw. mal angeschaut haben und nicht einer hat seinen senf dazu gegeben...
    nunja mir egal :P
    ihr scheind damit wohl zufrieden zu sein, ich bin es jedenfalls nicht...


    so werde ich mein script weitesgehend umschreiben:
    an en eigenarten von Win7 anpassen
    und umstellung auf pipes mit ffmpeg


    aber rechnet nicht damit, dass ich dieses jahr noch damit fertig werde
    dazu habe ich leider zuwenig freizeit :(


    so das war mein monolog für heute, jetzt komme ich zu meiner eigendlichen frage:


    wie ihr sieht habe ich schonmal eine rudimentäre decode/encode-pipe hinbekommen


    jetzt fersuche ich darin eine normalitation(gain)-funktion einzubauen
    bin mir noch nicht ganz sicher wie ich das bewerkstelligen soll


    super währe es wenn ffmpeg/ffplay so eine funktion beinhalten würde
    (dazu muss ich die dokumentation nochmal wälzen)


    alternativ müsste ich besweet dazwischen schalten
    (ein in meinen augen schon betagtes programm)


    dann gibt es noch sox
    habe ich bis jetzt noch nicht verwendet, aber ich denke als cli-audioeditor
    ist es vielseitiger als besweet...


    wie dem aich sei an 3-fach pipes hab ich mich noch nicht herangedraut...


    Code
    1. ffmpeg.exe -i "%xI%" -f wav - | lame.exe - "%xO%.out.mp3"


    so ich steh dann erstmal auf um mein hirn durchzuspühlen...

  • so da ffmpeg kein gain unterstützt will ich es erstmal mit mplayer/mencoder probieren
    bohr voll der krampf ich bekomm den einfach nicht dazu was sinvolles an lame zu übergeben...


    hier meine ersten gehversuche
    keines funktioniert


    Code
    1. ::"%xAppDir%\MPlayer\mencoder.exe" -novideo -af volnorm=1 -oac pcm %1 | "%xAppDir%\LAME\lame.exe" - "%~dpn1.out.mp3"
    2. ::"%xAppDir%\MPlayer\mplayer.exe" "%1 -vc null -vo null -ao pcm -af resample=32000,volnorm=1 -o - | "%xAppDir%\LAME\lame.exe" - "%~dpn1.out.mp3"
    3. "%xAppDir%\MPlayer\mencoder.exe" -novideo -oac pcm %1 -o - | "%xAppDir%\LAME\lame.exe" - "%~dpn1.out.mp3"


    mein ziel:
    von einer beliebigen mediendatei eine pcm-pipe an einen encoder zu schicken
    ich weis nicht was das problem an mencoder ist, warum der so störrisch ist


    gibt es überhaupt eine gute dokumentation von mencoder (am besten in deutsch)?

  • Von ffmpeg weiß ich mittlerweile, dass die Reihenfolge der Parameter wichtig sein kann. Wer also z.B. die Format-Optionen schon vor dem Namen der Eingabe-Datei angibt, der legt damit nicht das Format der Ausgabe fest, sondern überschreibt damit das automatisch erkannte Eingabeformat. Wer weiß, ob das bei mencoder ähnlich ist.


    Auch ist eventuell nicht jedes Build grundsätzlich in der Lage, die Ausgabe an STDOUT weiterzuleiten. Es gab zumindest mal Schwierigkeiten bei bestimmten Compilern, binäre Ausgabe korrekt zu unterstützen.

  • hab auch bei der forensuche festgestellt,
    dass man/ich eigendlich nur probleme damit hatte...


    dann werd ich wohl ein gain-tool in eine 3-fach pipe einbinden müssen


    (trozdem sind lösungsforschläge zu mencoder weiter willkommen)


    jetzt brauch ich erstmal ein gain-tool...

  • so ich hab jetzt ne 3-fach pipe mit ffmpeg|sox|lame gemacht
    und musste gleich wieder ne macke feststellen...


    sox macht zu beginn meiner musikstücke immer ein störgeräusch
    vermutlich interpetiert er metadaten als wave...


    hier der codeschnipsel

    Code
    1. ffmpeg.exe -i "%~1" -ac 2 -ar 44100 -acodec pcm_s16le -f wav - | sox.exe -s -b 16 -c 2 -r 44100 -t raw - -t wav - | lame.exe -V5 - "%~dpn~1.out.mp3"


    aufgeund diesem fehlers habe ich noch keine normalisierungsfunktion von sox einbinden können,
    erstmal muss die reibungslose übergabe funktionieren bevor ich an der normalisierung scheitere... :D


    eine raw-pcm ausgabe von ffmpeg verweigert mir mein sox;
    wie man sieht muss ich sox auch noch sagen was es für ein wave-format ist,
    selber erkennen tut er sowas wohl nicht!?

  • Wenn es "raw" ist, kann niemand erkennen, welches Format es ist, weil bei der Raw-Ausgabe ja auch der Header fehlt, in dem z.B. Samplingrate, Kanalanzahl und Auflösung gestanden hätten. Es ist dann nur eine Folge von Bytes der Samples, und nur wenn die richtig gelesen wird, kommt auch was hörbares dabei heraus.


    Vielleicht kannst du auch als WAV ausgeben lassen; dabei gäbe es nur das Problem, dass am Anfang der Ausgabe noch nicht bekannt ist, wie groß der Datenblock am Ende sein würde, also kann seine Größe noch nicht in seinem Chunk-Header stehen... Manche Tools (z.B. Nero AAC Encoder) haben Optionen, die Größenangaben zu ignorieren.

  • falls es Deine ffmpeg Version unterstützt könnteste mal:

    Code
    1. ffmpeg.exe -i "%~1" -ac 2 -ar 44100 -acodec pcm_s16le -f sox - | sox.exe -p -t wav - | lame.exe -V5 - "%~dpn~1.out.mp3"

    versuchen,... '-s -b 16 -c 2 -r 44100' sollte man dann nicht brauchen, weil sox die Daten aus dem Input lesen kann,...


    unter Linux würde man meist:

    Code
    1. ffmpeg.exe -i "%~1" -ac 2 -ar 44100 -acodec pcm_s16le -f u16le - | sox -t raw -e signed-integer -2 -c2 -r44100 - | lame.exe -V5 - "%~dpn~1.out.mp3"

    verwenden, sollte aber unter Windows auch gehen.


    Cu Selur


    Ps.: falls Du interessante sox Zeilen zusammenbastelst würden die mich auch interessieren.

  • der erste codeschnipsel funktioniert leider nicht


    Code
    1. FFmpeg version SVN-r22229, Copyright (c) 2000-2010 the FFmpeg developers built on Mar 6 2010 06:05:33 with gcc 4.4.2 configuration: --enable-memalign-hack --cross-prefix=i686-mingw32- --cc=ccache-i686-mingw32-gcc --arch=i686 --target-os=mingw32 --enable-runtime-cpudetect --enable-avisynth --enable-gpl --enable-version3 --enable-bzlib --enable-libgsm --enable-libfaad --enable-pthreads --enable-libvorbis --enable-libtheora --enable-libspeex --enable-libmp3lame --enable-libopenjpeg --enable-libxvid --enable-libschroedinger --enable-libx264 --enable-libopencore_amrwb --enable-libopencore_amrnb libavutil 50.10. 0 / 50.10. 0 libavcodec 52.55. 0 / 52.55. 0 libavformat 52.54. 0 / 52.54. 0 libavdevice 52. 2. 0 / 52. 2. 0 libswscale 0.10. 0 / 0.10. 0[mp3 @ 003bc040]max_analyze_duration reachedInput #0, mp3, from 'D:\Programme\Media\Audio\_x.MPack\Abmischung.50.mp3': Duration: 00:00:28.72, start: 0.000000, bitrate: 190 kb/s Stream #0.0: Audio: mp3, 48000 Hz, 2 channels, s16, 32 kb/s[sox @ 02fa4d50]invalid codec; use pcm_s32le or pcm_s32beOutput #0, sox, to 'pipe:': Metadata: encoder : Lavf52.54.0 Stream #0.0: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/sStream mapping: Stream #0.0 -> #0.0[B]Could not write header for output file #0 (incorrect codec parameters ?)[/B]/cygdrive/d/Programme/Media/Audio/_x.MPack/tools/sox/sox FAIL formats: can't open input `-': premature EOFAssuming raw pcm input fileLAME 3.97 32bits (http://www.mp3dev.org/)CPU features: MMX (ASM used), 3DNow! (ASM used), SSE (ASM used), SSE2Using polyphase lowpass filter, transition band: 15826 Hz - 16360 HzEncoding <stdin> to D:\Programme\Media\Audio\_x.MPack\zz_Abmischung.50.mp3.out.mp3Encoding as 44.1 kHz VBR(q=5) j-stereo MPEG-1 Layer III (ca. 11.9x) qval=3Drücken Sie eine beliebige Taste . . .


    der zweite codeschnipsel klappt auch nicht so recht



    den code hab ich 1:1 kopiert, nur an lokale gegebenheiten angepasst... (pfade und platzhalter)
    den sox tipp 'pcm_s32le' habe ich probiert, das codieren läuft zwar durch
    doch ist der inhalt zerstört (pcm_s32le <--> pcm_s16le)
    da muss man wohl mer anpassen als einfach den codec zu ändern...

  • uff... ne klappt leider nicht...


    Code
    1. "%xAppDir%\ffmpeg\ffmpeg.exe" -threads 4 -v -10 -y -i "%xI%" -f sox - | "%xAppDir%\sox\sox.exe" -p -t wav - | "%xAppDir%\LAME\lame.exe" -V5 - "%xO%.out.mp3"


    das was rauskommt hab ich mal mit angehangen...


    cmd ausgabe:

  • interressant:
    ich habe mal dein ordner mit meinen programm-versionen nachgebildet...
    selbe fehlerhafte ausgabe...


    sox v14.3.0 ist mit meiner identisch


    lame ist bei mir noch die version v3.97 und nicht v3.99
    (glaube aber nicht das lame hier das problem verursacht)


    bei ffmpeg siehts schon anders aus
    ich verwende die 'aktuelle' svn-version r22229 von ffmpeg.arrozcru.org
    du hast wohl eine 'mod' von "Sherpya"... quelle?

  • schon seltsam das mit ffmpeg
    ich hab jetzt von deiner quelle die neuste version geladen (r22140)
    und auch diese geht nicht (mehr)


    schon schade das ffmpeg in diesen fall so unzufallessig ist...
    einmal updaten und schon geht nix mehr...
    will hoffen das es nur ein vorübergehender bug ist...

  • ich hab mir mal überlegt,
    das es schön blöd ist,
    das nur die eine ffmpeg version funktioniert


    vielleicht ist es doch besser das ganze ohne format-auto-erkennung zu verarbeiten (raw-stream)
    dann gebe ich halt die eckdaten mit an,
    diese kann ich später mit mediainfo ermitteln,
    ich werd es eh später nochmal brauchen (für die tag's)


    der raw-stream hatte ja halbwegs geklappt, vielleicht bekomm msn es 100%-ig hin


    hier der codeschnipsel:

    Code
    1. ffmpeg.exe -i %1 -ac 2 -ar 44100 -acodec pcm_s16le -f wav - | sox.exe -s -b 16 -c 2 -r 44100 -t raw - -t wav - | lame.exe --silent -V5 - "%~dpn1.out.mp3"


    und als anhang die fehlerhafte datei


    [edit:] ffmpeg version ist r22140 von MPlayer

  • Gerade nach hause gekommen, gucke morgen drauf, aber was mir direkt auffällt:

    Zitat

    -f wav - | sox.exe -s -b 16 -c 2 -r 44100 -t raw -

    d.h. ffmpeg sagst Du: "pack nen wav-header dran"
    sox sagst Du: "da kommen raw-Daten"
    -> da wundert es nicht, dass es nicht geht. ;)


    Zitat

    ffmpeg.exe -i CodeMonkey.mp3 -ac 2 -ar 44100 -acodec pcm_s16le -f u16le - | sox.exe -s -b 16 -c 2 -r 44100 -t raw - -t wav - | lame.exe --silent -V5 - "out.mp3"

    geht bei mir ohne Probleme und u16le als Outputformat sollte i.d.R. (zumindest auf nicht Unix-Systemen) in ffmpeg standardmäßig dabei sein :) (hab lame jetzt die 3.98.2 genommen)


    Zitat

    ffmpeg version ist r22140 von MPlayer

    Was jetzt ffmpeg oder MPlayer ? ;)