Comment puis-je renommer une séquence de fichiers sans remplissage à zéro avant afin qu'ils puissent avoir un remplissage à zéro avant?

1

J'ai une séquence de fichiers:

file0.png, file1.png, ..., file10.png,... file100.png, ..., file1000.png, file1001.png, ..., file10000.png

Je veux faire une vidéo avec ffmpeg,

ffmpeg -framerate 30 -pattern_type glob -i '*.png' -c:v libx264 out.mp4

La convention de nom conduit à un ordre incorrect des fichiers lus en entrée. Comment puis-je résoudre ça?

la soi-disant solution "Comment renommer un groupe de fichiers dans l'invite de commande?" ne fonctionne pas!

toto
la source
Quelques idées dans cette question et le fil de réponse sur Stack Overflow . Notez que la question principale ne traite pas des extensions de fichier, mais quelques-unes des réponses traitent de telles situations.
JakeGould
Vos références de ligne de commande ffmpeg sont les suivantes: <BLOCKQUOTE> -pattern_type glob -i '* .png' </ BLOCKQUOTE> Cela pourrait permettre à ffmpeg d'utiliser l'ordre de son choix (probablement même aléatoire). Voyez si, au lieu de cela, vous pouvez spécifier chaque fichier sur la ligne de commande, ou si vous pouvez spécifier une liste de fichiers envoyés via une entrée standard, ou si vous pouvez spécifier un fichier texte contenant une liste de noms de fichiers. (Le @ est utilisé par de nombreux programmes pour cette dernière approche.) N'importe laquelle de ces approches conduira à une solution utilisant les références mentionnées dans d'autres commentaires. Peut-être utile: echo $ (pour x dans $ (seq -w 1 10); echo file $ {x}; terminé)
TOOGAM
En réalité, cet exemple précédent peut fonctionner sous Linux, pas sous Windows ni même sous BSD. Vous avez spécifié "ligne de commande", mais vous n'avez pas précisé le système d'exploitation sur lequel vous vous interrogez. (Je pense que ffmmpeg est multi-plateforme.) Si vous souhaitez obtenir de l'aide, spécifiez le système d'exploitation que vous utilisez (et les questions qui vous restent).
TOOGAM
Im @TOOGAM utilisant linux, je pensais que pour linux était super - utilisateur
toto
Cela le rend beaucoup plus facile à faire. Essayez ceci: renommer des centaines de fichiers à la fois pour un tri correct . Je vous suggère de commencer avec la réponse acceptée.
Karel

Réponses:

1

Comme archlinux a quelques problèmes avec l’utilitaire de changement de nom, j’ai démarré sur une Ubuntu en direct et l’ai renommé.

rename 's/\d+/sprintf("%05d", $&)/e' *.png  

C’est ce que l’on a fait pour renommer la séquence de fichiers.

Karel
la source
0

Au départ, j’ai examiné ffmpegla documentation pour voir si les noms de fichiers en entrée peuvent être spécifiés dans un fichier distinct, où vous pouvez les trier à votre guise. Mais la documentation n'avait clairement pas une telle option. Je peux me tromper et ce serait ma recommandation si vous remarquiez une telle option.

Au lieu de cela, vous devriez renommer vos fichiers pour les entrer dans l'ordre de votre choix. Je suppose que vous utilisez le shell bash, les fichiers sont dans le même répertoire, tous nommés file1.pngà file10000.pngvous préféreriez les ont appelé file00001.pngà file10000.png.

#!/bin/bash
for f in file*.png
do
  printf -v n "file%05d.png" "${f:4:-4}"
  mv "$f" "$n"
done

Sur une ligne comme:
for f in file*.png; do printf -v n "file%05d.png" "${f:4:-4}"; mv "$f" "$n"; done

ou peut-être juste:

#!/bin/bash
for (( i=0; i<10000; i++ ))
do
  printf -v n "%05d" $i
  mv "file$i.png" "file$n.png"
done

Sur une ligne comme:
for (( i=0; i<10000; i++ )); do printf -v n "%05d" $i; mv "file$i.png" "file$n.png"; done;

Je ne sais pas ce qui est le plus rapide, mais je suppose que le second le serait.

Dlamblin
la source