• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Mit ffmpeg Audiospur extrahieren über Automator und Shell Script

kybdf2

Rheinischer Winterrambour
Registriert
10.02.06
Beiträge
923
Hallo zusammen,

ich habe mit Automator einen Dienst erstellt, der "ausgewählte Dateien und Ordner in Finder" empfängt und dann ein Shell Skript (bash) ausführt, bei dem die Eingabe als Argumente übergeben werden.

Das Shell Skript sieht folgendermaßen aus:

Code:
suffix=$(/usr/local/bin/ffprobe "$@" 2>&1 |/usr/bin/sed -En 's/.*Audio: (…), .*/\1/p')
folder=$(dirname "$@")
/usr/local/bin/ffmpeg -i "$@" -vn -acodec copy "$folder"/audio."$suffix"

Der Sinn dabei soll sein, dass mit Hilfe des Programms ffprobe der verwendete Audiocodec in der angegebenen Videodatei ermittelt wird und dieser dann direkt als Dateierweiterung für die extrahierte Audiodatei benutzt wird.

Wenn ich diese Befehle ins Terminal eingebe, funktioniert es genau so wie es soll.

Wenn ich allerdings den Dienst ausführe, erhalte ich als Audiodatei eine "audio.", also ohne Dateierweiterung. Der Fehler scheint somit in der ersten Zeile zu liegen. Ich wüsste jedoch nicht, was genau da nicht funktionieren soll. Ich habe auch extra die kompletten Pfade zu den Programmen ffprobe und sed angegeben, weil ich schon mal das Problem hatte, dass z.B. ffprobe oder ffmpeg sonst gar nicht gefunden werden.

Ausser "Shell-Skript ausführen abgeschlossen" und "Arbeitsablauf abgeschlossen", bekomme ich auch vom Automator sonst keine Meldungen.

Was übersehe ich hier?

Viele Grüße,
kybdf2

EDIT: Gerade habe ich einen Thread gefunden, in dem erklärt wird, warum man die Pfade angeben muss. Das Problem habe ich also nun nicht mehr. Das andere jedoch schon...
 
Wie sieht denn die Ausgabe von ffprobe aus?

Du könntest das Suffix auch einfach mit suffix="${@##*.}"; herausfinden.
 
Hi, danke für die schnelle Antwort.

Die Ausgabe von ffprobe sieht zum Beispiel so aus:

Code:
FFprobe version SVN-r26402, Copyright (c) 2007-2011 the FFmpeg developers
  built on Jan 28 2013 21:02:50 with llvm_gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
  configuration: --enable-libmp3lame --enable-shared --arch=x86_64
  libavutil     50.36. 0 / 50.36. 0
  libavcore      0.16. 1 /  0.16. 1
  libavcodec    52.108. 0 / 52.108. 0
  libavformat   52.93. 0 / 52.93. 0
  libavdevice   52. 2. 3 / 52. 2. 3
  libavfilter    1.74. 0 /  1.74. 0
  libswscale     0.12. 0 /  0.12. 0
[matroska,webm @ 0x7fdf4b016000] Estimating duration from bitrate, this may be inaccurate
Input #0, matroska,webm, from '/Users/kybdf2/Downloads/sample.mkv':
  Metadata:
    METADATACREATOR : Yet Another Metadata Injector for FLV - Version 1.8
    HASKEYFRAMES    : true
    HASVIDEO        : true
    HASAUDIO        : true
    HASMETADATA     : true
    CANSEEKTOEND    : true
    DURATION        : 307
    DATASIZE        : 168710778
    VIDEOSIZE       : 163528294
    FRAMERATE       : 25
    VIDEODATARATE   : 4158
    VIDEOCODECID    : 7
    WIDTH           : 1920
    HEIGHT          : 1080
    AUDIOSIZE       : 5098856
    AUDIODATARATE   : 126
    AUDIOCODECID    : 10
    AUDIOSAMPLERATE : 3
    AUDIOSAMPLESIZE : 1
    STEREO          : true
    FILESIZE        : 168712057
    LASTTIMESTAMP   : 307
    LASTKEYFRAMETIMESTAMP: 307
    LASTKEYFRAMELOCATION: 168712037
    ENCODER         : Lavf52.93.0
  Duration: 00:05:07.10, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: h264, yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 29.97 fps, 30 tbr, 1k tbn, 59.94 tbc
    Stream #0.1: Audio: aac, 48000 Hz, stereo, s16

Das mit dem Suffix hast du missverstanden. Mit deinem Befehl bekomme ich das Suffix der Videodatei. Ich möchte aber aus dieser Videodatei eine Audiospur mit ffmpeg extrahieren. Das ist auch kein Problem, man muss nur das richtige Suffix angeben (in diesem Fall aac). Um dieses zu bekommen, lass ich einmal vorher ffprobe laufen und lasse nachschauen, was bei "Audio:" dahintersteht. So ungefähr ;)
 
Der Fehler dürfte sein, dass ... (3 Zeichen) durch die Rechtschreibkorrektur ersetzt wird durch … (1 Zeichen). Entweder du änderst das oder ersetzt es mit .{3}
 
  • Like
Reaktionen: kybdf2
Ich fall vom Stuhl... das war es tatsächlich und mir war es nicht aufgefallen *schäm*, habe es jetzt noch mal manuell mit (...) ersetzt und jetzt funktioniert alles. Vielen Dank.
 
Nachtrag: Eine Rechtschreibkorrektur in einem Scripting Fenster überhaupt aktiv zu schalten, ist natürlich schon relativ zweifelhaft. Böse, böse Apple ;)