Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 24-05-2020 17:15:57

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : Linux 5.7.11-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

[Résolu] aide pour supprimer et supprimer/remplacer dans une commande

Bonjour,

j'ai une commande qui me sort pratiquement ce que je veux sur des infos :

aplay -l | grep "carte"




carte 0: Audigy2 [SB Audigy 2 ZS [SB0350]], périphérique 0: emu10k1 [ADC Capture/Standard PCM Playback]
carte 0: Audigy2 [SB Audigy 2 ZS [SB0350]], périphérique 2: emu10k1 efx [Multichannel Capture/PT Playback]
carte 0: Audigy2 [SB Audigy 2 ZS [SB0350]], périphérique 3: emu10k1 [Multichannel Playback]
carte 0: Audigy2 [SB Audigy 2 ZS [SB0350]], périphérique 4: p16v [p16v]
 



ma commande :

device=$(aplay -l  | awk '{for (I=1;I<=NF;I++) if ($I == "périphérique") {print "hw:"$2$(I+1)};}')



me sort ça :

hw:0:0: hw:0:2: hw:0:3: hw:0:4:



mais il me faudrait ça :

"hw:0,0" "hw:0,2" "hw:0,3" "hw:0,4"



Une idée sur un truc pas trop compliqué pour que je puisse comprendre smile

Dernière modification par golgot200 (25-05-2020 08:00:03)

Hors ligne

#2 24-05-2020 18:38:57

David5647
Membre
Distrib. : Debian Bullseye/Sid
Noyau : 5.7.0-2-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

echo "hw:0:0: hw:0:2: hw:0:3: hw:0:4:"|  sed  's/\S*/"\0"/g'


"hw:0:0:" "hw:0:2:" "hw:0:3:" "hw:0:4:"

:cool:

Hors ligne

#3 24-05-2020 19:21:41

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Buster
Inscription : 11-08-2015

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

aplay -l  | awk '{for (I=1;I<=NF;I++) if ($I == "périphérique") {printf "\"hw:%s%s\" ", $2 , substr ( $(I+1) , 0 , 1  ) } }'

Hors ligne

#4 24-05-2020 19:28:21

MicP
Membre
Inscription : 29-02-2016

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

Bonjour

Tu as aussi :

device=$(aplay -l | awk -F: '/^carte/ {gsub(/[^0-9]/,"",$1);gsub(/[^0-9]/,"",$2);printf "\"hw:"$1","$2"\" "}')


Dernière modification par MicP (24-05-2020 20:10:29)

Hors ligne

#5 24-05-2020 19:52:27

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : Linux 5.7.11-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

Bonsoir à vous,

je vous lit avec attention.
Je fais de mon côté aussi. ( vos 3 propositions fonctionnent)

Hors ligne

#6 24-05-2020 19:57:54

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : Linux 5.7.11-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

Moi, j'en suis là mais ça ne me plait pas sur une chose.
Quand j'ai détecté le nombre de CARD, je rendre manuellement ça dans le script :

TRUE          "${CARD[0]}" \
FALSE           "${CARD[1]}" \
FALSE           "${CARD[2]}" \
FALSE           "${CARD[3]}");

Il faudrait que si 4 devices détectés, que ça écrive 4 cards en ligne. mais là, c'est une autre paire de manche. hmm

pour un début de script :


device=$(aplay -l  | awk '{for (I=1;I<=NF;I++) if ($I == "périphérique") {print "hw:"$2$(I+1)};}' | sed 's/.$//' | awk '{ print "\""$0"\""}' | sed 's/\:\([^:]*\)$/,\1/')
CARD=( ${device} )
choice=$(zenity --list --radiolist --width=1200 --height=500 \
        --title "Capture" \
        --text="Sélectionner Un Choix" \
        --column="Choix" --column="Périphériques" \
                FALSE           "${CARD[0]}" \
                FALSE           "${CARD[1]}" \
                FALSE           "${CARD[2]}" \
                FALSE           "${CARD[3]}");
 



hw.png

Dernière modification par golgot200 (24-05-2020 20:05:59)

Hors ligne

#7 24-05-2020 20:12:32

David5647
Membre
Distrib. : Debian Bullseye/Sid
Noyau : 5.7.0-2-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

oups, je corrige le mien, si l'on veut retirer les ":" :

echo "hw:0:0: hw:0:2: hw:0:3: hw:0:4:"|  sed  's/\(\S*\):/"\1"/g'



la méthode : on cherche tout ce qui est suite de caractère qui ne contient pas d'espace et on l'entour de guillemets:

\S : non blank character
* : 0 et +
( ) pour faire un groupe de capture
\( \) pour échapper les parenthèses
:  en dehors des parenthèses pour le retirer du groupe de capture
\1 : référence le groupe de capture

Dernière modification par David5647 (24-05-2020 20:15:10)

Hors ligne

#8 25-05-2020 00:31:29

MicP
Membre
Inscription : 29-02-2016

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

Bonjour

golgot200 a écrit :

… Quand j'ai détecté le nombre de CARD, je rendre manuellement ça dans le script :

TRUE          "${CARD[0]}" \
FALSE           "${CARD[1]}" \
FALSE           "${CARD[2]}" \
FALSE           "${CARD[3]}"); …

golgot200 a écrit :

… Il faudrait que si 4 devices détectés, que ça écrive 4 cards en ligne. …

Ok pour ces deux points, …

… ce qui donne (en bash):

theRegex='^card.*\ ([0-9]+):.*\ ([0-9]+):'
cards=($(while read -r; do [[ $REPLY =~ $theRegex ]]    \
&& printf "hw:${BASH_REMATCH[1]},${BASH_REMATCH[2]} ";  \
done <<< $(LANG=C aplay -l)))

titleHeight=92
lineHeight=23

boxHeight=$((($titleHeight+$lineHeight+(${#cards[@]}*$lineHeight))))
lstForZen=(${cards[@]/hw:/FALSE hw:})
lstForZen[0]="TRUE"
choice=$(zenity --list --radiolist --width=218 --height=$boxHeight  \
        --title "Capture"                                           \
        --text="Sélectionnez un périphérique"                       \
        --column="Choix" --column="Périphériques" ${lstForZen[@]})



Ou alors, en beaucoup plus court,
tu as aussi la sélection dans une liste déroulante :

theRegex='^card.*\ ([0-9]+):.*\ ([0-9]+):'
cards=($(while read -r; do [[ $REPLY =~ $theRegex ]]    \
&& printf "hw:${BASH_REMATCH[1]},${BASH_REMATCH[2]} ";  \
done <<< $(LANG=C aplay -l)))

choice=$(zenity --entry             \
        --title="Capture"           \
        --entry-text="${cards[0]}"  \
        --text="Sélectionnez un périphérique" ${cards[@]:1})

Dernière modification par MicP (25-05-2020 08:18:01)

Hors ligne

#9 25-05-2020 07:34:11

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : Linux 5.7.11-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

@MicP

Bonjour,

que dire à part que c'est magnifique. smile

Il reste plus qu'a mettre mes deux commandes dedans et tout sera nickel smile

Capture de la zone,window etc à capturer;

SIZE=$(slop -f "-s %wx%h -i :0.0+%x,%y")



La commande finale qui aura "LA CARTE CHOISIE" et "SIZE"

  ffmpeg -thread_queue_size 512 -f pulse -ac 2 -i "$choice" -f x11grab "$SIZE" -r 30 -acodec libmp3lame -vcodec libx264 -preset ultrafast -pix_fmt yuv444p -threads 0 -loglevel repeat+verbose "$OUTPUT/CAPTURE-[Le $(date +%d-%m-%y) à $(date +%H:%M:%S)].mkv"




EDIT: Il me semble que la version déroulante ne me prend pas toutes les cartes. Il me manque la hw:0,0

Dernière modification par golgot200 (25-05-2020 07:47:50)

Hors ligne

#10 25-05-2020 07:58:57

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : Linux 5.7.11-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

Et bien tout fonctionne MicP !!!
Celui avec la liste déroulante aussi. smile

Un grand merci. wink

Merci à vous tous smile

Hors ligne

#11 25-05-2020 08:29:05

MicP
Membre
Inscription : 29-02-2016

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

Content que ça fonctionne bien chez toi. smile

J'ai ajouté LANG=C avant le lancement de la commande aplay
pour que le motif de recherche (au lieu de carte, c'est card)
ne soit plus dépendant pas des variables locale du compte utilisateur.

=======
Quand aux dimensionnement automatique de la hauteur de la boîte de dialogue radiolist
il dépends de la taille de la police de caractères utilisée
et du thème utilisé qui pourrait modifier la hauteur de la barre de titre.

Si besoin, il faudra ajuster les variables titleHeight et lineHeight
je n'ai pas pris le temps de rechercher où trouver des références fiables
pour ces deux variables (peut-être du côté de GTK)

Dernière modification par MicP (25-05-2020 08:53:24)

Hors ligne

#12 25-05-2020 08:29:41

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : Linux 5.7.11-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

@MicP

C'est très bien comme ça smile
C'est universel

Voila l'idée :



#!/bin/bash

OUTPUT=~/MAGNETO

[ -d "$OUTPUT" ] || mkdir "$OUTPUT"


theRegex='^card.*\ ([0-9]+):.*\ ([0-9]+):'
cards=($(while read -r; do [[ $REPLY =~ $theRegex ]]    \
&& printf "hw:${BASH_REMATCH[1]},${BASH_REMATCH[2]} ";  \
done <<< $(LANG=C aplay -l)))

titleHeight=92
lineHeight=23

boxHeight=$((($titleHeight+$lineHeight+(${#cards[@]}*$lineHeight))))
lstForZen=(${cards[@]/hw:/FALSE hw:})
lstForZen[0]="TRUE"
choice=$(zenity --list --radiolist --width=218 --height=$boxHeight  \
        --title "Capture"                                           \
        --text="Sélectionnez un périphérique"                       \
        --column="Choix" --column="Périphériques" ${lstForZen[@]})

# https://www.cyberciti.biz/faq/bash-shell-find-out-if-a-variable-has-null-value-or-not/
condition="$choice"
if [ -z "$condition" ]
then
      echo "\$condition is NULL"
exit 0
else
      echo "\$condition is NOT NULL"


size=$(slop -f "-s %wx%h -i :0.0+%x,%y")


ffmpeg -guess_layout_max 0 -f alsa -thread_queue_size 512 -ac 2 -i $choice \
    -f x11grab -thread_queue_size 512 -probesize 42M $size -filter:v fps=60 \
    -acodec libmp3lame -c:v h264_nvenc -preset llhq -loglevel repeat+verbose \
    "$OUTPUT/CAPTURE-[Le $(date +%d-%m-%y) à $(date +%H:%M:%S)].mkv"

fi
 

Dernière modification par golgot200 (25-05-2020 08:31:29)

Hors ligne

#13 25-05-2020 08:36:34

MicP
Membre
Inscription : 29-02-2016

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

echo "Le $(date +%d-%m-%y\ à\ %H:%M:%S)"

donnera le même résultat que

echo "Le $(date +%d-%m-%y) à $(date +%H:%M:%S)"

à part que la première ligne de commande n'appelle la commande date qu'une seule fois.

Dernière modification par MicP (25-05-2020 08:41:30)

Hors ligne

#14 25-05-2020 08:39:47

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : Linux 5.7.11-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

MicP a écrit :

Le $(date +%d-%m-%y\ à\ +%H:%M:%S)

est équivalent à

Le $(date +%d-%m-%y) à $(date +%H:%M:%S)



Merci. smile

Une chose que je ne peux pas vérifier. Ceux qui ont pulse, la détection pour les cartes sera la même ?

Dernière modification par golgot200 (25-05-2020 08:40:35)

Hors ligne

#15 25-05-2020 08:44:25

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : Linux 5.7.11-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

Je me répond à moi même. Je dirais non vu qu'on force alsa dans le script.

Dernière modification par golgot200 (25-05-2020 08:44:45)

Hors ligne

#16 25-05-2020 08:47:24

MicP
Membre
Inscription : 29-02-2016

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

Le système de ma machine est Debian GNU/Linux 10 (buster) avec XFCE qui utilise PulseAudio comme Contrôle de volume
et la détection des cartes audio avec ces scripts fonctionne très bien sur ma machine.

Dernière modification par MicP (25-05-2020 08:48:50)

Hors ligne

#17 25-05-2020 08:50:10

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : Linux 5.7.11-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

MicP a écrit :

Le système de ma machine est Debian GNU/Linux 10 (buster) avec XFCE qui utilise PulseAudio comme Contrôle de volume
et la détection des carte audio avec ces scripts fonctionne très bien sur ma machine.



Alors c'est une bonne nouvelle ça. smile

Dernière modification par golgot200 (25-05-2020 08:52:39)

Hors ligne

#18 25-05-2020 09:21:58

Debian Alain
Adhérent(e)
Lieu : Bretagne
Distrib. : stable / testing
Noyau : Linux 5.8.0-1-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

Unknown encoder 'h264_nvenc'

En ligne

#19 25-05-2020 09:31:59

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : Linux 5.7.11-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

Debian Alain a écrit :

Unknown encoder 'h264_nvenc'



C'est normal wink

Je t'arrange ça de suite ....

Hors ligne

#20 25-05-2020 09:37:40

Debian Alain
Adhérent(e)
Lieu : Bretagne
Distrib. : stable / testing
Noyau : Linux 5.8.0-1-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

j'ai trouvé  des infos avec h.264_videotoolbox  mais çà ne semble pas fonctionner

En ligne

#21 25-05-2020 09:46:26

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : Linux 5.7.11-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : [Résolu] aide pour supprimer et supprimer/remplacer dans une commande

Voilà ton script pour test ici : (fonctionne chez moi)

https://debian-facile.org/viewtopic.php … 48#p334548

Hors ligne

Pied de page des forums