Bagaimana saya bisa mengganti nama urutan file tanpa front zero padding sehingga mereka dapat memiliki front zero padding?

1

Saya memiliki urutan file:

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

Saya ingin membuat video dengan ffmpeg,

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

Konvensi nama mengarah ke urutan yang salah dari file yang dibaca dalam input. Bagaimana saya bisa memecahkan masalah ini?

solusi yang disebut "Bagaimana cara saya mengubah nama banyak file di Command Prompt?" tidak bekerja!

toto
sumber
Beberapa ide dalam pertanyaan dan jawaban ini berurutan di Stack Overflow . Perhatikan bahwa pertanyaan intinya tidak berhubungan dengan ekstensi file, tetapi beberapa jawaban menjawab situasi seperti itu.
JakeGould
Referensi baris perintah ffmpeg Anda: <BLOCKQUOTE> -pattern_type glob -i '* .png' </BLOCKQUOTE> Itu bisa memiliki ffmpeg menggunakan urutan apa pun yang diinginkan (mungkin bahkan secara acak). Sebaliknya, lihat apakah Anda dapat menentukan setiap file pada baris perintah, atau jika Anda dapat menentukan daftar file yang dikirim melalui input standar, atau jika Anda dapat menentukan file teks yang berisi daftar nama file. (@ Digunakan oleh banyak program untuk pendekatan yang terakhir.) Setiap pendekatan itu akan mengarah ke solusi menggunakan referensi yang disebutkan dalam komentar lain. Mungkin membantu: echo $ (untuk x dalam $ (seq -w 1 10); lakukan file echo $ {x}; selesai)
TOOGAM
Sebenarnya, contoh sebelumnya dapat bekerja di Linux, bukan Windows atau bahkan BSD. Anda menentukan "command-line", tetapi tidak menentukan OS apa yang Anda tanyakan. (Saya percaya ffmmpeg adalah multi-platform.) Jika Anda mencari bantuan lebih lanjut, tentukan OS apa yang Anda gunakan (dan pertanyaan apa yang masih tersisa).
TOOGAM
@TOOGAM saya menggunakan linux, saya pikir superuser untuk linux
toto
Itu membuatnya lebih mudah untuk dilakukan. Coba ini: Mengganti nama ratusan file sekaligus untuk pengurutan yang tepat . Saya sarankan Anda mulai dengan jawaban yang diterima.
karel

Jawaban:

1

Karena archlinux memiliki beberapa masalah dengan util rename, saya boot pada Ubuntu langsung, dan melakukan rename.

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

Inilah yang dilakukan toto untuk mengubah nama urutan file.

karel
sumber
0

Awalnya saya melihat ffmpegdokumen untuk melihat apakah nama file input dapat ditentukan dalam file sendiri, di mana Anda bisa mengurutkannya sesuka Anda. Tetapi dokumentasi tidak jelas memiliki opsi seperti itu. Saya bisa saja salah, dan itu akan menjadi rekomendasi saya jika Anda memperhatikan opsi seperti itu.

Jadi alih-alih, Anda harus mengganti nama file Anda untuk input sesuai urutan yang Anda inginkan. Aku akan menganggap Anda menggunakan shell bash, file-file tersebut di direktori yang sama, semua bernama file1.pnguntuk file10000.pngdan Anda lebih memilih untuk memiliki mereka bernama file00001.pngke file10000.png.

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

Pada satu baris sebagai:
for f in file*.png; do printf -v n "file%05d.png" "${f:4:-4}"; mv "$f" "$n"; done

atau mungkin hanya:

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

Pada satu baris sebagai:
for (( i=0; i<10000; i++ )); do printf -v n "%05d" $i; mv "file$i.png" "file$n.png"; done;

Saya tidak yakin mana yang lebih cepat, tetapi saya kira yang kedua adalah.

dlamblin
sumber