Because archlinux has some problem with the rename util, I booted on a live Ubuntu, and did the rename.
rename 's/\d+/sprintf("%05d", $&)/e' *.png
Isso foi feito para renomear a sequência de arquivos.
Eu tenho uma sequência de arquivos:
file0.png, file1.png, ..., file10.png,... file100.png, ..., file1000.png, file1001.png, ..., file10000.png
Eu quero fazer um vídeo com o ffmpeg,
ffmpeg -framerate 30 -pattern_type glob -i '*.png' -c:v libx264 out.mp4
A convenção de nomes leva a uma ordem errada dos arquivos lidos na entrada. Como posso resolver isso?
a chamada solução "Como renomeio um monte de arquivos no prompt de comando?" não funciona!
Because archlinux has some problem with the rename util, I booted on a live Ubuntu, and did the rename.
rename 's/\d+/sprintf("%05d", $&)/e' *.png
Isso foi feito para renomear a sequência de arquivos.
Inicialmente, olhei os documentos de ffmpeg
para ver se os nomes dos arquivos de entrada podem ser especificados em um arquivo próprio, onde você poderia classificá-los como quiser. Mas a documentação não tinha claramente uma opção como essa. Eu posso estar errado, e essa seria minha recomendação se você perceber tal opção.
Então, você deve renomear seus arquivos para entrada na ordem desejada. Suponho que você esteja usando o shell bash, os arquivos estão no mesmo diretório, todos denominados file1.png
to file10000.png
e você preferiria que eles fossem denominados file00001.png
to file10000.png
.
#!/bin/bash
for f in file*.png
do
printf -v n "file%05d.png" "${f:4:-4}"
mv "$f" "$n"
done
Em uma linha como: for f in file*.png; do printf -v n "file%05d.png" "${f:4:-4}"; mv "$f" "$n"; done
ou talvez apenas:
#!/bin/bash
for (( i=0; i<10000; i++ ))
do
printf -v n "%05d" $i
mv "file$i.png" "file$n.png"
done
Em uma linha como: for (( i=0; i<10000; i++ )); do printf -v n "%05d" $i; mv "file$i.png" "file$n.png"; done;
Não tenho certeza do que é mais rápido, mas suspeito que o segundo seria.
Tags command-line linux