Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/08/2013, à 10:51

artik1024

[ Résolu ] Merger plusieurs cd1, cd2 ... en .avi dans un même dossier

Bonjours à tous,

J'ai depuis peu l'envie de merger mes rips que j'effectuais à l'époque en 2 CD voir plus (jusqu'à 6 maximum) au format .avi.

Me retrouvant avec un dossier, je souhaite pouvoir en une ligne de commande pouvoir les regrouper. J'ai la ligne de commande qui me permet de faire un film :

avimerge -o ski.avi -i ski-cd1.avi ski-cd2.avi

Mais comment pouvoir lui demander de le faire sur tout un dossier ? J'ai par exemple cette arborescence :

ski-cd1.avi
ski-cd2.avi
vacances-cd1.avi
vacances-cd2.avi
vacances-cd3.avi

Comment avoir en une ligne de commande :

ski.avi
vacances.avi

Merci pour ce petit coup de main

Dernière modification par artik1024 (Le 09/08/2013, à 09:31)

Hors ligne

#2 Le 07/08/2013, à 12:37

serged

Re : [ Résolu ] Merger plusieurs cd1, cd2 ... en .avi dans un même dossier

avimerge -o ski.avi -i /chemin/*.avi

Faire simplement attention à ce que ski.avi ne se retrouve pas dans le même répertoire que les autres. (ou l’appeller ski.AVI quitte à le renommer après...).


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#3 Le 07/08/2013, à 13:20

Shanx

Re : [ Résolu ] Merger plusieurs cd1, cd2 ... en .avi dans un même dossier

La solution que tu proposes suppose que dans chemin/, il n’y a que les fichiers correspondant à ski, ce qui n’est pas forcément le cas.


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#4 Le 07/08/2013, à 14:56

artik1024

Re : [ Résolu ] Merger plusieurs cd1, cd2 ... en .avi dans un même dossier

Shanx a écrit :

La solution que tu proposes suppose que dans chemin/, il n’y a que les fichiers correspondant à ski, ce qui n’est pas forcément le cas.

Effectivement, tous les .avi sont dans le même répertoire. Ca semble plus compliqué que ce que je pensais...

Hors ligne

#5 Le 07/08/2013, à 15:04

Shanx

Re : [ Résolu ] Merger plusieurs cd1, cd2 ... en .avi dans un même dossier

Tu vas devoir utiliser les expressions régulières pour déterminer quels fichiers correspondent à quels films. Je ne suis pas assez doué en bash pour te donner une solution rapidement, désolé.


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#6 Le 07/08/2013, à 15:18

pingouinux

Re : [ Résolu ] Merger plusieurs cd1, cd2 ... en .avi dans un même dossier

Bonjour,
Voici une proposition :
S'il n'y a pas d'espaces dans les noms de fichiers, et si la numérotation des CD ne dépasse pas 9

cd /répertoire_où_sont_les_.avi
while read prefix
do
   echo avimerge -o "$prefix.avi" -i "$prefix"-*.avi;
done < <(while read f; do f="${f%%-*.avi}"; echo "${f##*/}";done < <(find -type f -name \*-cd\*.avi)|sort -u)

Retirer le echo si c'est bon.

Hors ligne

#7 Le 08/08/2013, à 04:22

nesthib

Re : [ Résolu ] Merger plusieurs cd1, cd2 ... en .avi dans un même dossier

Une petite variante avec quelques vérifications :

#!/bin/bash

function ma_commande { (( $# > 1 )) && echo avimerge -o "${1/-cd[0-9]/}" -i "$@" ; }

P_FICHIER=""
for FICHIER in *.avi
do
    FICHIER_OUT=${FICHIER/-cd[0-9]/}
    [[ $FICHIER != $FICHIER_OUT && $FICHIER_OUT == ${P_FICHIER/-cd[0-9]/} ]] && FICHIERS+=("$FICHIER") || { ma_commande "${FICHIERS[@]}" ; FICHIERS=( "$FICHIER" ) ; } 
    P_FICHIER="$FICHIER"
done
ma_commande "${FICHIERS[@]}"

La commande à modifier est : «  echo avimerge -o "${1/-cd[0-9]/}" -i "$@" »
ce qui donnera par exemple :

avimerge -o ski.avi -i ski-cd1.avi ski-cd2.avi
avimerge -o vacances.avi -i vacances-cd1.avi vacances-cd2.avi vacances-cd3.avi

pour la liste ski-cd1.avi ski-cd2.avi tout_seul.avi vacances-cd1.avi vacances-cd2.avi vacances-cd3.avi


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#8 Le 09/08/2013, à 02:43

artik1024

Re : [ Résolu ] Merger plusieurs cd1, cd2 ... en .avi dans un même dossier

pingouinux et nesthib, vraiment merci pour vos réponses. La solution de nesthib est parfaitement fonctionnelle smile

Cependant un dernier détail auquel je n'avait pas pensé vient de me prendre 2 heures sans résultat. Je voudrais qu'après chaque merge, les fichiers sources soient effacés afin de ne pas saturer mon disque de doublons lors des merges. J'ai donc essayé pas mal de trucs comme remplacer la dernière ligne par

ma_commande "${FICHIERS[@]}" && rm "${FICHIERS[@]}"

Ou bien rajouter

rm "${FICHIERS[@]}

à la fin du script. Le soucis est que cette dernière fonctionne mais n'efface que les derniers fichiers du dossier complet. Avec tout ce que j'ai testé et mon peu de connaissance, je pense que la réponse va me paraître évidente, mais quoiqu'il en soit, là je sèche !

Aussi nesthib il y a une chose que je ne comprend pas et qui pourrait m'aider à mieux comprendre le bash. Ton script "boucle" (j'entend par là qu'après chaque merge, il passe au suivante jusqu'à la fin du dossier). Si je met "rm "${FICHIERS[@]}" à la fin du script, il n'est pas prit dans cette boucle, et ne s'execute qu'à la fin du dossier, et non à la fin de l'action de merger, avant de passer à la suivante. Tu pourrais me dire pourquoi ?

Bonne nuit wink

Hors ligne

#9 Le 09/08/2013, à 04:14

pingouinux

Re : [ Résolu ] Merger plusieurs cd1, cd2 ... en .avi dans un même dossier

artik1024 #8 a écrit :
ma_commande "${FICHIERS[@]}" && rm "${FICHIERS[@]}"

Cette commande peut s'avérer dangereuse en cas d'erreur. Personnellement, je ferais le ménage après avoir vérifié que tout s'est passé normalement.
Il semble aussi que les 2 dernières ligne du script de nesthib en #7 aient été inversées. ma_commande doit en effet être exécutée dans la boucle.
Corrigé : Suite à la remarque de nesthib en #10

Dernière modification par pingouinux (Le 09/08/2013, à 05:43)

Hors ligne

#10 Le 09/08/2013, à 05:04

nesthib

Re : [ Résolu ] Merger plusieurs cd1, cd2 ... en .avi dans un même dossier

@pingouinux : Non, ma_commande est bien exécuté dans la boucle pour tout les tours sauf le dernier, mais doit aussi l'être à la fin de la boucle pour le dernier tour wink

@artik1024 : rm "${FICHIERS[@]}" devrait fonctionner, il faut dans ce cas le mettre à la fois sur la dernière ligne et dans la boucle :

[[ $FICHIER != $FICHIER_OUT && $FICHIER_OUT == ${P_FICHIER/-cd[0-9]/} ]] && FICHIERS+=("$FICHIER") || { ma_commande "${FICHIERS[@]}" ; rm "${FICHIERS[@]}" ; FICHIERS=( "$FICHIER" ) ; }

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#11 Le 09/08/2013, à 05:38

pingouinux

Re : [ Résolu ] Merger plusieurs cd1, cd2 ... en .avi dans un même dossier

@nesthib : Au temps pour moi, j'avais regardé en diagonale, et ai encore dit une bêtise. Désolé sad

Hors ligne

#12 Le 09/08/2013, à 09:31

artik1024

Re : [ Résolu ] Merger plusieurs cd1, cd2 ... en .avi dans un même dossier

Un grand merci à vous 2, le script est parfaitement fonctionnel. Je lance donc ma commande dans le dossier complet smile
(Merci nesthib pour l'explication de la boucle, là c'est clair !

nesthib : Tu me confirmes bien qu'en dernière ligne :

ma_commande "${FICHIERS[@]}" && rm "${FICHIERS[@]}"

N'est pas risqué ? (dans le doute je ne l'ai pas mis, mais c'est pour savoir)

Dernière modification par artik1024 (Le 09/08/2013, à 09:39)

Hors ligne