VIDEO :détection video et fichier soutitre dans une variable

Bonjour

Désolé si mon titre est pas claire mais j’ai une question technique

je voudrais muxer une vidéo + sou titre en script ce coté a été réussi grâce a c’est ligne

ffmpeg -i "$name".mp4 -vcodec copy -acodec copy mkvtemp.mkv mkvmerge -v -o "$name".mkv --default-track 0 --language 0:fre "$name".ass mkvtemp.mkv

moi ce que je cherche a faire c’est créer une variable d’un fichier dans le dossier et le mux avec sons sou titre du même nom sans intervention utilisateur et la je sèche le but est de mux tout les flv ass du même nom du dossier

voila

merci d’avance

ffmpeg -i "${name}.mp4" -vcodec copy -acodec copy mkvtemp.mkv mkvmerge -v -o "${name}.mkv" --default-track 0 --language 0:fre "${name}.ass" mkvtemp.mkv

c’est aussi simple que cela ???

bien merci !!

edit petit erreur
Error: The source file ‘.ass’ could not be opened successfully, or retrieving its size by seeking to the end did not work.

J’avais envoyé mon précédent message en ayant juste modifié quelque peu la syntaxe de tes lignes de commandes
de façon à ce que la variable “name” puisse y être acceptée,
mais je n’avais pas très bien compris ta question.

Dans ton dernier message, Je crois comprendre que tu voudrais pouvoir créer un script qui, s’il trouvait dans un répertoire ciblé
deux fichiers du même nom de base correspondants à un fichier de sous-titres (.ass) et sa vidéo (.mp4)
les utiliseraient avec ces deux lignes de commandes.

Par exemple : si le répertoire ciblé est [mono]~/Vidéos/a assembler/[/mono]

et que les fichiers vidéo et sous-titres sont :

[code]~/Vidéos/a assembler/vidéo numéro 1.ass
~/Vidéos/a assembler/vidéo numéro 2.ass
~/Vidéos/a assembler/vidéo numéro 1.mp4
~/Vidéos/a assembler/vidéo numéro 2.mp4
~/Vidéos/a assembler/vidéo numéro x.ass
~/Vidéos/a assembler/vidéo numéro x.mp4
~/Vidéos/a assembler/vidéo numéro zz.mp4
~/Vidéos/a assembler/vidéo numéro xy.ass

[/code]Le script permettrait de créer les fichiers :

~/Vidéos/a assembler/vidéo numéro 1.mkv ~/Vidéos/a assembler/vidéo numéro 2.mkv ~/Vidéos/a assembler/vidéo numéro x.mkv

Le “sans intervention de l’utilisateur” se résumant quand même à fournir en paramètre d’entrée au script
le nom du répertoire ([mono]~/Vidéos/a assembler/[/mono]) contenant ces fichiers

par exemple, si le script avait pour nom [mono]assembleLesVideosDe.sh[/mono],

la ligne de commande serait :

Est-ce bien cela ?

yes oui bien cela ^^ la seul différence c’est que les vidéo serons a la racine du dossier ou est situer le script

Regarde ce que tu peu faire déjà par toi même, et fais des essais avec des commandes qui ne détruisent rien :
par exemple, au lieu des deux commandes :

ffmpeg -i "${name}.mp4" -vcodec copy -acodec copy mkvtemp.mkv mkvmerge -v -o "${name}.mkv" --default-track 0 --language 0:fre "${name}.ass" mkvtemp.mkv

Tu peux faire des tests en utilisant la variable [mono]name[/mono] avec juste la commande :

Ce qui compte c’est que ton script de test fasse afficher (avec [mono]echo[/mono]) correctement tous les noms des fichiers que tu veux traiter,
ensuite, tu pourra remplacer la commande [mono]echo[/mono] par les commandes [mono]ffmpeg[/mono] et [mono]mkvmerge[/mono] + les options que tu veux.

Je te laisse un peu de lecture en attendant.

A+

[code]find . -name “*.flv” | while read line
do
name=basename "$line" .flv

echo $name
ffmpeg -i “${name}”.flv -vcodec copy -acodec copy mkvtemp.mkv
mkvmerge -v -o “${name}”.mkv --default-track 0 --language 0:fre “${name}”.ass mkvtemp.mkv
done

[/code]

voila sa a réussi !!! mais il en fait que 1 a la fois

[quote=“gaaara”]…mais il en fait que 1 a la fois…[/quote]Il vaut mieux en fait, sinon, il écraserait à chaque fois le fichier temporaire qui a toujours le même nom ([mono]mkvtemp.mkv[/mono]).
Et puis, s’il y avait une saturation de l’espace disque, il y aurait un paquet de conversions non terminées à supprimer.
Il reste aussi que ton PC et ton disque restera utilisable pour autre chose pendant ce temps.

J’aurai bien rajouté un test pour vérifier si le deuxième fichier était bien là (.ass) avant de lancer le travail, mais tu connais mieux que moi le contexte.

Il y aurait aussi un autre test de contrôle pour savoir si le fichier de sortie n’existe pas déjà, au cas où tu doive stopper et relancer plus tard le script.

======
remplace [mono]name=basename "$line" .flv[/mono] par [mono]name="$(basename “${line}” .flv)"[/mono]

Comme ça, s’il y a des espaces dans le nom du fichier, ça passera mieux.

======
NOTE : [mono]basename "${line}" .flv[/mono] <=> [mono]$(basename “${line}” .flv)[/mono]

C’est juste une question de préférence :slightly_smiling:

======

find . -name "*.flv" | while read line
do
   name="$(basename "${line}" .flv)"
   echo "${name}"
   ffmpeg -i "${name}.flv" -vcodec copy -acodec copy mkvtemp.mkv
   mkvmerge -v -o "${name}.mkv" --default-track 0 --language 0:fre "${name}.ass" mkvtemp.mkv
done

======
Mais il y en a ici (et ailleurs) de beaucoup plus compétents que moi.

Peut-être qu’ils viendront faire des suggestions :slightly_smiling:

merci de ta réponce j’ai pencer a faire une boucle

exemple il lance le script fait la job déplace dans un dossier en suite fait le ménage recommence juste a ce que il est plu rien

je vais devoir googler un peut pour trouver comment créer la boucle

mais la j’ai un problème ma commande mv de fonctionne pas …

root@vps99184:~/Downloader# mv '*.mkv' /export mv: cannot stat `*.mkv': No such file or directory

le fichier temp est inutile quand les 2 ligne sons passer :slightly_smiling:

Si le répertoire [mono]/export/[/mono] existe et que tu as le droit d’y accéder en écriture,
essaie plutôt avec :

Mais s’il s’agit du répertoire [mono]~/Downloader/export/[/mono], alors renomme la cible en [mono]./export/[/mono] ou [mono]~/Downloader/export/[/mono]
donc :

NOTES :

Si tu fais [mono]ls ‘*.mkv’[/mono], la réponse sera la même => [mono]ls: impossible d’accéder à *.mkv: Aucun fichier ou dossier de ce type[/mono]

Si tu fais [mono]ls .mkv[/mono] ou [mono]ls ".mkv"[/mono], là tu aura la liste des fichiers dont le nom se termine par [mono].mkv[/mono]

La différence, c’est que l’interpréteur de commande [mono]bash[/mono] ne va pas interpréter les caractères qui sont entourés d’un simple apostrophe,
donc, [mono]ls[/mono] va essayer de lister le fichier dont le nom est [mono]*.mkv[/mono], mais il ne le trouve pas.

======
Le [mono].[/mono] représente le répertoire d’où sera lancé la commande.

j’ai vu que tu avais testé ta commande depuis le sous-répertoire nommé [mono]Downloader[/mono] qui est dans ton répertoire personnel : [mono]~[/mono]

ba merci :slightly_smiling:

reste la boucle a créer !!!

c’est cette commande qui a fonctionner ^^

Ta boucle est déjà faite : Si le fichier de sortie de [mono]mkmerge[/mono] est directement enregistré dans répertoire export,

il ne te restera qu’à remplacer [mono]commande_pour_faire_le_menage[/mono] par la commande que tu veux.

[code]repExport="./export/"

find . -name “*.flv” | while read line
do
name="$(basename “${line}” .flv)"
echo "${name}"
ffmpeg -i “${name}.flv” -vcodec copy -acodec copy mkvtemp.mkv
mkvmerge -v -o “${repExport}${name}.mkv” --default-track 0 --language 0:fre “${name}.ass” mkvtemp.mkv &&
commande_pour_faire_le_menage

done
[/code]

Notes :

[mono]commande_précédente && commande_suivante[/mono] => exécuter [mono]commande_suivante[/mono] seulement si [mono]commande_précédente[/mono] s’est terminée sans problème.

======
Au sujet de [mono] [/mono] (il y a un espace avant le [mono][/mono])

la ligne de commande : commande_1 && commande_1[/Mono]
est équivalente à :

commande_1 && \ commande_2 (en fait, [mono] [/mono], c’est juste pour mettre sur plusieurs lignes ce qui serait trop long sur une.)

EDIT : L’option [mono]-v[/mono] (verbose <=> bavard) n’est peut-être pas indispensable dans ton script,
mais tu as peut-être envie de visualiser dans ton terminal les messages retournés par la commande concernée ([mono]mkvmerge[/mono]).

====
J’avais pas fait attention, mais le nom de la variable [mono]name[/mono] est “mal” choisi, étant donné qu’il est aussi le nom de l’option utilisé par la commande [mono]find[/mono] (et d’autres commandes aussi), ça pourrait prêter à confusion en lisant le script.
il faudrait lui donner un autre nom : comme [mono]baseNomFich[/mono] ou [mono]hypopotamentutu[/mono] par exemple.

je crois que mon cerveaux de débutent va exploser lolll mais c’est vrais qui je n’avais pas penser a cela ! une expérience de plus !!!

je test et je te donne du feedback

réussi

il rest a ajouter d’autre fonction a ma boucle :slightly_smiling:

edit :

bon voila ma nouvelle fonction

while read url
do
echo $url
## do whatever with $url
done < textfile

je vais l’intégrer en double boucle mais je suis confronter a 1 problème

dans mon script je veut offrire 2 possibilité sois entrer le liens manuellement ou avec le fichier text dans le même code

exemple

www.website.me/348744jnm www.website.me/43545ljkjjk www.website.me/554erer5cf

j’ai 3 liens dans mon fichier text et le script va télécharger mux ensuite passer a l’autre liens télécharger mux etc

et manuellement une question est pauser ah début

regarde mon script :slightly_smiling:

code.stypi.com/msii22lh

voila merci d’avance