Comment grouper par multiplexage des fichiers de pistes audio et vidéo avec ffmpeg

0

Je pense que tout le monde connaît le problème du téléchargement de vidéos 480p et 1080p depuis Youtube et que le seul moyen disponible pour de nombreux programmes de téléchargement est de télécharger séparément les pistes audio et vidéo, puis de les regrouper dans un conteneur.

Il existe un code ffmpeg pour multiplexer (un par un) les pistes .m4a et .m4v dans un conteneur .mp4

Voici le code:

ffmpeg -i "file name.m4v" -i "file name.m4a" -acodec copy -vcodec copy "file name.mp4"

Mais comment BATCH multiplexer de nombreux fichiers .m4a & .m4v?

Merci d'avance...

KorkOoO
la source

Réponses:

2

Utilisez une boucle for. Cet exemple concerne bashet utilise bashune manipulation de variable, mais il peut être adapté à d’autres shells de type unix / linux.

Remarque : cela suppose que vous êtes dans le répertoire contenant les fichiers et que les fichiers vidéo et audio portent le même nom et ne diffèrent que par leur extension (.m4v - vidéo, .m4a - audio).

for v in *.m4v; do ffmpeg -i "${v}" -i "${v//.m4v/.m4a}" -acodec copy -vcodec copy "${v//.m4v/.mp4}"; done

Explication

for v in *.m4vEffectuez les actions suivantes sur chaque fichier se terminant par '.m4v'. vest un nom de variable qui sera attribué à chaque fichier vidéo du répertoire actuel, un par un, par bash. bashconvertira automatiquement le *.m4vdans une liste de fichiers .m4v du répertoire en cours et les alimentera dans la boucle for. Vous n'avez pas besoin de saisir les noms de fichiers manuellement.

Variable vcontient un nom de fichier vidéo différent à chaque itération de la boucle, par exemple "video_file_1.m4v", puis "video_file_2.m4v", etc. Il est ${v//pattern/replacement}indiqué bashde rechercher les occurrences patternet de les remplacer replacement. Par exemple, ${v//.m4v/.mp4}convertira le nom du fichier "video_file_1.m4v"en "video_file_1.mp4".

Savanto
la source
Merci savanto pour votre réponse, malheureusement, votre code n'a pas fonctionné pour moi .. en fait, j'utilise ffmpeg depuis seulement 4 jours, je ne suis donc pas un utilisateur expérimenté et honnêtement, je ne comprenais pas à peu près la moitié de votre réponse. ! (Pardonnez mon ignorance). Pourriez-vous s'il vous plaît me dire des étapes plus spécifiques pour faire ce travail? J'apprécie vraiment votre aide
..
@ ENG.KARIM J'ai ajouté une explication plus détaillée à la réponse, jetez-y un coup d'œil. La réponse suppose que vous êtes sur un système unix / linux, que vous utilisez bash(en cas de doute, tapez bash), que vous accédez cdau répertoire contenant les fichiers vidéo ( cd /path/to/video/files) et que chaque fichier vidéo a un fichier audio correspondant ( video_file_1.m4v, video_file_1.m4a). Si ceux-ci sont maintenus, il vous suffit de coller la commande de la réponse dans votre terminal - aucune modification nécessaire! Les noms de fichiers seront lus automatiquement et ffmpegexécutés sur chacun d'eux.
Savanto
@ ENG.KARIM Si vous continuez à avoir des erreurs, merci de les poster pour que je puisse savoir ce qui se passe.
Savanto
merci beaucoup pour votre préoccupation savanto .. Je pense que vous devriez savoir qu'en fait 1.Je suis sur un système Windows 2.tous les fichiers audio et vidéo sont dans un seul dossier (D: \ Tubes), et je peux entrer dans son Chemin en utilisant un menu contextuel RegKey Appelé "open command pormot here" au lieu de "cd FolderName", je vous assure donc que je suis dans le bon chemin de dossier et que tous les fichiers nécessaires pour moi sont inclus. Le problème est Lorsque j'essaie d'utiliser votre code, je reçois ceci: "v était inattendu à ce moment-là." alors, est-ce que j'ai fait quelque chose de mal?
KorkOoO
Le code ci-dessus concerne les shells de type Unix ou Linux, donc il ne fonctionnera pas sous Windows. Vous aurez besoin de Cygwin pour exécuter le code ci-dessus ou d’utiliser une syntaxe appropriée pour un shell Windows. Pour lesquels, malheureusement, je ne peux pas vous aider. Veuillez republier votre question - la balise "youtube" est totalement inutile, alors qu'une balise "windows" donnera à votre question davantage de visibilité pour les personnes qui peuvent vous aider.
Savanto