ffmpeg - in jedem neuen Terminalfenster???

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
Antworten
rola621
Beiträge: 399
Registriert: 13.05.2021 18:12:20

ffmpeg - in jedem neuen Terminalfenster???

Beitrag von rola621 » 14.07.2021 12:51:56

Hallo!

Ich habe heute eine Konvertierung von flac zu mp3 durchgeführt und dabei folgenden Befehl verwendet:

Code: Alles auswählen

find . -type f -name "*.flac" -exec bash -c 'FILE="$1"; ffmpeg -i "${FILE}" -vn -c:a libmp3lame -ab 320k -y "${FILE%.flac}.mp3" && rm "${FILE}";' _ '{}' \;
Danach habe ich das Terminal geschlossen, es wurde alles zu meiner Zufriedenheit konvertiert.


Jetzt, immer wenn ich ein neues Terminal starte, auch nach einem kompletten Systemneustart, wird mir folgendes im Terminal angezeigt:

Code: Alles auswählen

ffmpeg version 4.3.2-0+deb11u2 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 10 (Debian 10.2.1-6)
  configuration: --prefix=/usr --extra-version=0+deb11u2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
: No such file or directory
bash:  _ {} \;: Kommando nicht gefunden.
debian@debian:~$ 
Aber wohlgemerkt ohne, dass ich irgendetwas im Terminal mache.
Wie kann sowas passieren, und was soll ich in so einem Fall tun?

Viele Grüße
Rola
Notebook & Desktop: Debian bookworm & Xfce

JTH
Moderator
Beiträge: 3007
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: ffmpeg - in jedem neuen Terminalfenster???

Beitrag von JTH » 14.07.2021 13:24:26

Das ist ja lustig ;) Hast du dir die Zeile versehentlich in die ~/.bashrc oder so geschrieben?

Code: Alles auswählen

grep libmp3lame ~/.bashrc ~/.profile ~/.bash_profile
Manchmal bekannt als Just (another) Terminal Hacker.

rola621
Beiträge: 399
Registriert: 13.05.2021 18:12:20

Re: ffmpeg - in jedem neuen Terminalfenster???

Beitrag von rola621 » 14.07.2021 14:24:37

Hmm, gut möglich 8O

Code: Alles auswählen

debian@debian:~$ grep libmp3lame ~/.bashrc ~/.profile ~/.bash_profile
/home/debian/.bashrc:alias flactomp3='find . -type f -name "*.flac" -exec bash -c 'FILE="$1"; ffmpeg -i "${FILE}" -vn -c:a libmp3lame -ab 320k -y "${FILE%.flac}.mp3" && rm "${FILE}";' _ '{}' \;'
grep: /home/debian/.bash_profile: Datei oder Verzeichnis nicht gefunden
Das heißt es liegt an dem Alias, den ich gesetzt habe, oder?

Habe mir den im Eingangspost erwähnten Befehl von hier kopiert:
https://unix.stackexchange.com/question ... ith-ffmpeg
Notebook & Desktop: Debian bookworm & Xfce

JTH
Moderator
Beiträge: 3007
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: ffmpeg - in jedem neuen Terminalfenster???

Beitrag von JTH » 14.07.2021 14:43:31

rola621 hat geschrieben: ↑ zum Beitrag ↑
14.07.2021 14:24:37
Das heißt es liegt an dem Alias, den ich gesetzt habe, oder?
Jop. Da in der Zeile mehrfach die einfachen Anführungszeichen ' vorkommen, hast du damit effektiv folgendes gemacht:

Code: Alles auswählen

alias flactomp3='find . -type f -name "*.flac" -exec bash -c '

FILE="$1"; ffmpeg -i "${FILE}" -vn -c:a libmp3lame -ab 320k -y "${FILE%.flac}.mp3" && rm "${FILE}";' _ '{}' \;'
Einen kürzer als gewollten Alias gesetzt und eine andere, nicht vollständige Zeile, die beim Öffnen der Shell immer direkt ausgeführt wird.

Um das zu korrigieren, musst du die inneren ' mit einem \ escapen:

Code: Alles auswählen

alias flactomp3='find . -type f -name "*.flac" -exec bash -c \'FILE="$1"; ffmpeg -i "${FILE}" -vn -c:a libmp3lame -ab 320k -y "${FILE%.flac}.mp3" && rm "${FILE}";\' _ \'{}\' \;'
Manchmal bekannt als Just (another) Terminal Hacker.

rola621
Beiträge: 399
Registriert: 13.05.2021 18:12:20

Re: ffmpeg - in jedem neuen Terminalfenster???

Beitrag von rola621 » 14.07.2021 15:23:58

Das klingt absolut logisch und einleuchtend, Danke!
Habe es direkt umgesetzt:

Code: Alles auswählen

alias flactomp3='find . -type f -name "*.flac" -exec bash -c \'FILE="$1"; ffmpeg -i "${FILE}" -vn -c:a libmp3lame -ab 320k -y "${FILE%.flac}.mp3" && rm "${FILE}";\' _ \'{}\' \;'
Allerdings ist, auch nach einem Systemneustart, alles wie gehabt im Terminal, also die eingangs geposteten ffmpeg Meldungen kommen nach wie vor als Begrüßung im Terminal.

Es wurden doch aber alle ' "escaped", außer der erste und der letzte, die ja aber zur Abgrenzung des Alias notwendig sind..?
Notebook & Desktop: Debian bookworm & Xfce

JTH
Moderator
Beiträge: 3007
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: ffmpeg - in jedem neuen Terminalfenster???

Beitrag von JTH » 14.07.2021 16:06:32

Ha, das klappt tatsächlich nicht. War mir gar nicht so recht bewusst:
man bash hat geschrieben: A single quote may not occur between single quotes, even when preceded by a backslash.
Man lernt nie aus :lol:


Du müsstest also die ' im Alias durch " ersetzen (an den Stellen wo jetzt \' steht) und die wiederum an anderen passenden Stellen escapen:

Code: Alles auswählen

alias flactomp3='find . -type f -name "*.flac" -exec bash -c "FILE=\"\$1\"; ffmpeg -i \"\${FILE}\" -vn -c:a libmp3lame -ab 320k -y \"\${FILE%.flac}.mp3\" && rm \"\${FILE}\";" _ "{}" \;'
Und man müsste dann die $ der Variablen innerhalb des bash -c auch escapen, damit sie nicht zu früh expandiert werden.

Oder du nimmst so einen $'string' (hat der einen Namen?), dann ginge Escapter-Single-Quote in Single-Quote:

Code: Alles auswählen

alias flactomp3=$'find . -type f -name "*.flac" -exec bash -c \'FILE="$1"; ffmpeg -i "${FILE}" -vn -c:a libmp3lame -ab 320k -y "${FILE%.flac}.mp3" && rm "${FILE}";\' _ \'{}\' \;'
Manchmal bekannt als Just (another) Terminal Hacker.

Benutzeravatar
Houbey
Beiträge: 727
Registriert: 03.03.2012 05:13:32

Re: ffmpeg - in jedem neuen Terminalfenster???

Beitrag von Houbey » 14.07.2021 16:38:06

Hallo rola. :) Und falls du dir mal die .bashrc zerschießen solltest, kannst du dir diese jederzeit wiederherstellen.

Terminal öffnen und:

Code: Alles auswählen

# cd ~
# mv .bashrc .bashrc.old
Damit hast du deine alte .bashrc zumindest schon einmal gesichert.
Danach dann noch:

Code: Alles auswählen

# cp /etc/skel/.bashrc ./
Das gleiche sollte dann auch gehen falls du deine .bashrc im /root Verzeichnis verändert haben solltest und diese dann wiederherstellen musst.
Viele Grüße
Houbey

------------------------------
Debian GNU/Linux 11.8 Bullseye, Xfce 4.16, als 64-Bit und bis jetzt noch glücklich damit. 8)

rola621
Beiträge: 399
Registriert: 13.05.2021 18:12:20

Re: ffmpeg - in jedem neuen Terminalfenster???

Beitrag von rola621 » 14.07.2021 17:23:05

Danke vielmals ihr Beiden, für die rege Beteiligung und die konstruktiven Beiträge!

Unglaublich, was kleine Details ausmachen.

Habe beide Befehle getestet und funktionieren problemlos.
Also nur durch das davorsetzen des $ wurde der Alias zu einem "string" und schon waren die escapten ' ok. Verblüffend!

Könnt ihr mir noch weiterführende Lektüre empfehlen, um mit den ganzen Grundbegriffen wie string, wildcard, escapen und dem ganzen Fachjargon etwas vertrauter zu werden?
Oder einfach direkt die manpages der bash?
Notebook & Desktop: Debian bookworm & Xfce

JTH
Moderator
Beiträge: 3007
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: ffmpeg - in jedem neuen Terminalfenster???

Beitrag von JTH » 14.07.2021 17:34:22

Ich hab früher viel von TLDP mitgenommen: Bash Guide for Beginners und Advanced Bash-Scripting Guide.
In letzteren gucke ich immer noch mal rein, wenn mir beim Wechsel zwischen verschiedenen Sprachen was partout nicht einfallen will. Die sind zwar beide nicht ganz aktuell – es gibt auch bei der Bash durchaus mal neue (Sprach-)Funktionalität – aber für Grundlagen sicher weiter hilfreich.

Und ja, ansonsten gucke ich persänlich auch immer öfter in die Manpage (sollte man bei allen Kommandos! :) ). Wenn man ungefähr weiß, was man sucht, ist das ein schneller, immer verfügbarer Weg, um auch Syntaxkleinigkeiten nachzuschlagen.

Wenn du dich an größeren Skripten versuchst, kann ich dir nur Debianshellcheck empfehlen. Das bewahrt vor vielen (Anfänger-)Fehlern. Eine ganze Liste von letzteren findet man z.B. auch hier: Bash Pitfalls.
Manchmal bekannt als Just (another) Terminal Hacker.

rola621
Beiträge: 399
Registriert: 13.05.2021 18:12:20

Re: ffmpeg - in jedem neuen Terminalfenster???

Beitrag von rola621 » 14.07.2021 18:20:39

Super, danke vielmals! Da hab ich erstmal einiges zu tun :-)
Notebook & Desktop: Debian bookworm & Xfce

Antworten