Debian Debian-France Debian-Facile Debian-fr.org Debian-fr.xyz Debian ? Communautés

Debian-facile

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

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

#1 11-12-2020 20:36:53

laguespa
Membre
Distrib. : Stretch
Noyau : 4.9.0-4-amd64
(G)UI : Mate
Inscription : 25-09-2009

[Resolu] Conversion .mov en .mp4

Bonjour.

Je voudrais utiliser ffmpeg pour convertir un répertoire complet de fichiers .mov en .mp4 en retrouvant le nom du fichier .mov dans mon nouveau fichier .mp4.
Vous connaissez une ligne de commande sympathique qui va m'éviter de les faire à la main un par un ?

Merci et bonne soirée.

Dernière modification par laguespa (06-03-2021 12:53:35)


"Ce serait peut-être l’une des plus grandes opportunités manquées de notre époque si le logiciel libre ne libérait rien d’autre que du code."

Hors ligne

#2 11-12-2020 20:45:23

cyrille
Adhérent(e)
Distrib. : SID + FreeBSD. Stable sur serveurs.
(G)UI : Xfce/Openbox
Inscription : 21-06-2020
Site Web

Re : [Resolu] Conversion .mov en .mp4

Hello tu cherches donc une fonction recursive



#!/bin/sh
 
dossierDeTravail="/home/serveur";
 
recursiveSearch() {
    [ -r "$1" ] && [ -x "$1" ] || return 1 # Si on peut fouiller dans le dossier
    [ "`ls "$1" | wc -l`" == "0" ] && return 0 # Si le dossier est vide
    for file in "$1"/*; do
        if [ -d "$file" ]; then
            recursiveSearch "$file"
        fi
        echo "$file"
    done
}
 
recursiveSearch  $dossierDeTravail

 



Cette fonction gérera tous les niveau de l'arborescence
Tu mets ta commande de conversion à la ligne echo "$file"





SInon via zenity, un autre exemple



#!/bin/sh
#
# Test de l'existence du programme ZENITY
if which zenity > /dev/null; then
    echo "zenity already install. Fine."
else
    echo "zenity does not exist. Go for the installation"
    su -c "apt-get install zenity"
fi
 
dossier=`zenity --title="Choisir un dossier" --file-selection --directory` ;
find $dossier -depth -name '*.wav' -execdir bash -c '[[ -f $0 ]] &&  flac -7 --replay-gain "$0" ' {} \;

 



Bon bien sûr il faut les adpater à tes besoins , sans doute via ffmpeg

Dernière modification par cyrille (11-12-2020 20:56:00)


"Ils ne me comprennent point, je ne suis pas la bouche qu’il faut à ces oreilles."
== Ainsi parlait Zarathoustra. ==
=== Nietzsche ===

Hors ligne

#3 11-12-2020 20:57:30

cyrille
Adhérent(e)
Distrib. : SID + FreeBSD. Stable sur serveurs.
(G)UI : Xfce/Openbox
Inscription : 21-06-2020
Site Web

Re : [Resolu] Conversion .mov en .mp4

ffmpeg -i video.mov -vcodec h264 -acodec mp2 video.mp4


Ligne de conversion possible


"Ils ne me comprennent point, je ne suis pas la bouche qu’il faut à ces oreilles."
== Ainsi parlait Zarathoustra. ==
=== Nietzsche ===

Hors ligne

#4 11-12-2020 21:09:20

vv222
Administrateur
Lieu : Bretagne
Distrib. : GNU/Linux Debian « Sid »
Noyau : Linux ≥ 5.10 (amd64)
(G)UI : Openbox
Inscription : 18-11-2013
Site Web

Re : [Resolu] Conversion .mov en .mp4

Une proposition toute basique, avec find et ffmpeg :

find ~/mon/répertoire -type f -name \*.mov -exec \
    sh -c 'ffmpeg -i "$1" "${1%.mov}.mp4"' sh {} \;



À chaque fois le fichier mp4 est créé à côté du fichier mov original, seule son extension va changer.


Jouer sous Debian ? Facile !

Hors ligne

#5 11-12-2020 21:14:32

laguespa
Membre
Distrib. : Stretch
Noyau : 4.9.0-4-amd64
(G)UI : Mate
Inscription : 25-09-2009

Re : [Resolu] Conversion .mov en .mp4

cyrille a écrit :

Hello tu cherches donc une fonction recursive



Non, pas une fonction récursive. Juste un répertoire à traiter sans sous-répertoires et pas un script, juste une conmmande à lancer dans le répertoire dans lequel se trouvent mes .mov


cyrille a écrit :

ffmpeg -i video.mov -vcodec h264 -acodec mp2 video.mp4


Ligne de conversion possible



Ok, mais dans ce cas je dois retaper tous les noms des fichiers .mov en sortie de commande pour les avoir à l'identique en .mp4

A+


"Ce serait peut-être l’une des plus grandes opportunités manquées de notre époque si le logiciel libre ne libérait rien d’autre que du code."

Hors ligne

#6 11-12-2020 21:15:28

laguespa
Membre
Distrib. : Stretch
Noyau : 4.9.0-4-amd64
(G)UI : Mate
Inscription : 25-09-2009

Re : [Resolu] Conversion .mov en .mp4

vv222 a écrit :

Une proposition toute basique, avec find et ffmpeg :

find ~/mon/répertoire -type f -name \*.mov -exec \
    sh -c 'ffmpeg -i "$1" "${1%.mov}.mp4"' sh {} \;



À chaque fois le fichier mp4 est créé à côté du fichier mov original, seule son extension va changer.



Je pense que c'est ce que je veux, je fais le teste demain au réveil et je te dis.

A+


"Ce serait peut-être l’une des plus grandes opportunités manquées de notre époque si le logiciel libre ne libérait rien d’autre que du code."

Hors ligne

#7 11-12-2020 21:29:03

enicar
Membre
Lieu : ailleurs
Distrib. : sid
Noyau : 5.8.7
(G)UI : openbox
Inscription : 26-08-2010

Re : [Resolu] Conversion .mov en .mp4

@vv222, il y aurait pas un « sh » en trop (le dernier, devant {}) ?

Hors ligne

#8 11-12-2020 23:07:12

cyrille
Adhérent(e)
Distrib. : SID + FreeBSD. Stable sur serveurs.
(G)UI : Xfce/Openbox
Inscription : 21-06-2020
Site Web

Re : [Resolu] Conversion .mov en .mp4

Non, pas une fonction récursive. Juste un répertoire à traiter sans sous-répertoires et pas un script, juste une conmmande à lancer dans le répertoire dans lequel se trouvent mes .mov


ça passera même s'il n'y a qu'un niveau d'arborescence wink


"Ils ne me comprennent point, je ne suis pas la bouche qu’il faut à ces oreilles."
== Ainsi parlait Zarathoustra. ==
=== Nietzsche ===

Hors ligne

#9 11-12-2020 23:22:03

cyrille
Adhérent(e)
Distrib. : SID + FreeBSD. Stable sur serveurs.
(G)UI : Xfce/Openbox
Inscription : 21-06-2020
Site Web

Re : [Resolu] Conversion .mov en .mp4

Ok, mais dans ce cas je dois retaper tous les noms des fichiers .mov en sortie de commande pour les avoir à l'identique en .mp4


non tu adaptes le script et passes le nom de fichier en variable

Dernière modification par cyrille (11-12-2020 23:22:21)


"Ils ne me comprennent point, je ne suis pas la bouche qu’il faut à ces oreilles."
== Ainsi parlait Zarathoustra. ==
=== Nietzsche ===

Hors ligne

#10 12-12-2020 00:52:42

vv222
Administrateur
Lieu : Bretagne
Distrib. : GNU/Linux Debian « Sid »
Noyau : Linux ≥ 5.10 (amd64)
(G)UI : Openbox
Inscription : 18-11-2013
Site Web

Re : [Resolu] Conversion .mov en .mp4

enicar a écrit :

@vv222, il y aurait pas un « sh » en trop (le dernier, devant {}) ?



C’est vrai que c’est un peu étrange comme forme, mais c’est bien de cette manière qu’on passe des arguments à sh :

sh -c 'echo ffmpeg -i "$1" "${1%.mov}.mp4"' sh 'test.mov'

ffmpeg -i test.mov test.mp4



À comparer à la forme plus intuitive, mais incorrecte :

sh -c 'echo ffmpeg -i "$1" "${1%.mov}.mp4"' 'test.mov'

ffmpeg -i  .mp4


---

J’ai essayé de retrouver la raison de ce comportement, apparemment c’est parce qu’on passe les paramètres en incluant le $0 initial.
Donc :

sh -c 'echo ffmpeg -i "$1" "${1%.mov}.mp4"' sh 'test.mov'
                                             ↑      ↑
                                            $0     $1


Merci de m’avoir donné la curiosité de vérifier ce que j’appliquais sans le comprendre totalement wink

---

C’est confirmé par ce test affreux :

sh -c 'echo ffmpeg -i "$0" "${0%.mov}.mp4"' 'test.mov'

ffmpeg -i test.mov test.mp4


Jouer sous Debian ? Facile !

Hors ligne

#11 12-12-2020 11:31:36

enicar
Membre
Lieu : ailleurs
Distrib. : sid
Noyau : 5.8.7
(G)UI : openbox
Inscription : 26-08-2010

Re : [Resolu] Conversion .mov en .mp4

vv222 a écrit :

C’est confirmé par ce test affreux :


Pourquoi c'est affreux ? Rajouter un argument pour utiliser le second est très moche aussi !

Hors ligne

#12 12-12-2020 11:47:01

laguespa
Membre
Distrib. : Stretch
Noyau : 4.9.0-4-amd64
(G)UI : Mate
Inscription : 25-09-2009

Re : [Resolu] Conversion .mov en .mp4

Bonjour.

Cette commande fonctionne parfaitement.

ffmpeg -i test.mov test.mp4



Par contre je n'ai toujours pas trouvé comment convertir les fichiers .mov en fichiers .mp4 en conservant à chaque fois le nom du fichier et que ça se fasse dans tous les sous-répertoires qui sont dans /home/mon_home/Vidéos. Du coup la récursivité m'intéresse...
Pour mon cas j'ai des fichiers qui se nomment IMG_0074.MOV ; IMG_0075.MOV que j'aimerais convertir en IMG_0074.MP4 et IMG_0075.MP4 etc...

Je précise que j'ai essayé la commande

find /home/laguespa/Vidéos/ -type f -name \*.mov -exec \ sh -c 'ffmpeg -i "$1" "${1%.mov}.mp4"' sh {} \;
 


et que ça ne fait rien du tout.

A+

Dernière modification par laguespa (12-12-2020 11:49:26)


"Ce serait peut-être l’une des plus grandes opportunités manquées de notre époque si le logiciel libre ne libérait rien d’autre que du code."

Hors ligne

#13 12-12-2020 11:57:18

enicar
Membre
Lieu : ailleurs
Distrib. : sid
Noyau : 5.8.7
(G)UI : openbox
Inscription : 26-08-2010

Re : [Resolu] Conversion .mov en .mp4

laguespa a écrit :

Par contre je n'ai toujours pas trouvé comment convertir les fichiers .mov en fichiers .mp4 en conservant à chaque fois le nom du fichier et que ça se fasse dans tous les sous-répertoires qui sont dans /home/mon_home/Vidéos. Du coup la récursivité m'intéresse...



À part pour des raisons pédagogiques, il est inutile d'écrire une fonction récursive en shell pour faire ce genre de travail.
Find est l'outil qu'il faut utiliser. Il a été fait pour cela. Reste à savoir pourquoi le script de vv222 ne fonctionne pas…

Que répond la commande :


find /home/laguespa/Vidéos/ -type f -name \*.mov
 


Histoire de vérifier…

Le truc qui permet de conserver le nom dans la commande de vv222 est la substitution :


"${1%.mov}.mp4"
 


qui dit de supprimer la dernière occurrence « .mov » de la chaîne contenue dans le paramètre « $1 ». À ce résultat
on ajoute la chaîne « .mp4 »

Dernière modification par enicar (12-12-2020 12:02:42)

Hors ligne

#14 12-12-2020 12:01:18

enicar
Membre
Lieu : ailleurs
Distrib. : sid
Noyau : 5.8.7
(G)UI : openbox
Inscription : 26-08-2010

Re : [Resolu] Conversion .mov en .mp4

Message inutile supprimé smile

Dernière modification par enicar (12-12-2020 12:03:11)

Hors ligne

#15 12-12-2020 12:26:32

cyrille
Adhérent(e)
Distrib. : SID + FreeBSD. Stable sur serveurs.
(G)UI : Xfce/Openbox
Inscription : 21-06-2020
Site Web

Re : [Resolu] Conversion .mov en .mp4

Avec une boucle bash

for i in *.mov; do ffmpeg -i "$i" -c copy "${i%.*}.mp4"; done



Avec le paquet parallel

apt install parallel



puis

parallel ffmpeg -i {} -vcodec copy -acodec copy {.}.mp4 ::: *.mov

Dernière modification par cyrille (12-12-2020 12:27:16)


"Ils ne me comprennent point, je ne suis pas la bouche qu’il faut à ces oreilles."
== Ainsi parlait Zarathoustra. ==
=== Nietzsche ===

Hors ligne

#16 12-12-2020 13:15:48

vv222
Administrateur
Lieu : Bretagne
Distrib. : GNU/Linux Debian « Sid »
Noyau : Linux ≥ 5.10 (amd64)
(G)UI : Openbox
Inscription : 18-11-2013
Site Web

Re : [Resolu] Conversion .mov en .mp4

enicar a écrit :

Pourquoi c'est affreux ? Rajouter un argument pour utiliser le second est très moche aussi !



Ce que je trouve affreux dans mon exemple, mais c’est discutable, c’est d’utiliser $0 comme paramètre variable alors que son rôle habituel est de stocker le nom du processus en cours d’exécution.


Jouer sous Debian ? Facile !

Hors ligne

#17 12-12-2020 13:21:32

enicar
Membre
Lieu : ailleurs
Distrib. : sid
Noyau : 5.8.7
(G)UI : openbox
Inscription : 26-08-2010

Re : [Resolu] Conversion .mov en .mp4

vv222 a écrit :

Ce que je trouve affreux dans mon exemple, mais c’est discutable, c’est d’utiliser $0 comme paramètre variable alors que son rôle habituel est de stocker le nom du processus en cours d’exécution.


En effet. D'un autre côté, je trouve affreux de rajouter un paramètre pour ne pas utiliser $0 smile

Dernière modification par enicar (12-12-2020 13:22:00)

Hors ligne

#18 14-12-2020 09:20:03

laguespa
Membre
Distrib. : Stretch
Noyau : 4.9.0-4-amd64
(G)UI : Mate
Inscription : 25-09-2009

Re : [Resolu] Conversion .mov en .mp4

Bonjour.

En donnant la réponse à ce que sortait la commande j'ai trouvé la réponse. C'est de ma faute. Les fichiers ne sont pas des .mov mais des .MOV
La bonne commande est donc :

find /home/laguespa/Vidéos/ -type f -name \*.mov




Cependant la commande dans sa totalité renvoie :

find /home/laguespa/Vidéos/ -type f -name \*.MOV -exec \ sh -c 'ffmpeg -i "$1" "${1%.MOV}.mp4"' sh {}\;


find: ‘ sh’: Aucun fichier ou dossier de ce type
find: ‘ sh’: Aucun fichier ou dossier de ce type
find: ‘ sh’: Aucun fichier ou dossier de ce type
 



Merci et bonne journée.

Dernière modification par laguespa (14-12-2020 09:21:05)


"Ce serait peut-être l’une des plus grandes opportunités manquées de notre époque si le logiciel libre ne libérait rien d’autre que du code."

Hors ligne

#19 14-12-2020 14:47:37

vv222
Administrateur
Lieu : Bretagne
Distrib. : GNU/Linux Debian « Sid »
Noyau : Linux ≥ 5.10 (amd64)
(G)UI : Openbox
Inscription : 18-11-2013
Site Web

Re : [Resolu] Conversion .mov en .mp4

laguespa a écrit :

find: ‘ sh’: Aucun fichier ou dossier de ce type
find: ‘ sh’: Aucun fichier ou dossier de ce type
find: ‘ sh’: Aucun fichier ou dossier de ce type



Cette erreur est là parce que tu as retiré le saut de ligne de la commande que je propose wink

Les commandes correctes sont :

find /home/laguespa/Vidéos/ -type f -name \*.MOV -exec \
    sh -c 'ffmpeg -i "$1" "${1%.MOV}.mp4"' sh {} \;

(sur deux lignes, la première se terminant par un antislash)

et :

find /home/laguespa/Vidéos/ -type f -name \*.MOV -exec sh -c 'ffmpeg -i "$1" "${1%.MOV}.mp4"' sh {} \;

(sur une seule linge, sans antislash entre -exec et sh)


Jouer sous Debian ? Facile !

Hors ligne

#20 14-12-2020 17:57:08

laguespa
Membre
Distrib. : Stretch
Noyau : 4.9.0-4-amd64
(G)UI : Mate
Inscription : 25-09-2009

Re : [Resolu] Conversion .mov en .mp4

Ok, fallait le savoir smile

Merci, ça fonctionne, bonne journée.

"Ce serait peut-être l’une des plus grandes opportunités manquées de notre époque si le logiciel libre ne libérait rien d’autre que du code."

Hors ligne

Pied de page des forums