เช่นเดียวกับ @dstob ที่กล่าวถึงคุณสามารถใช้ffprobe
เพื่อรับ I-frames และข้อมูลที่เกี่ยวข้อง ffprobe
มาพร้อมกับบิลด์สแตติกบางส่วนในหน้าดาวน์โหลดและสามารถสร้างได้จากซอร์สเช่นกัน
นี่สมมติว่าคุณใช้ Linux / Unix:
แยกเฟรมและประเภทเฟรม
ffprobe -select_streams v -show_frames \
-show_entries frame=pict_type \
-of csv bbb480.avi \
| grep -n I | cut -d ':' -f 1
grep
คำสั่งกรองเส้นที่มีI
ในพวกเขาและพวกเขานับดัชนี (โดยใช้-n
ตัวเลือก) cut
คำสั่งเลือกคอลัมน์แรกของการส่งออกเท่านั้น (ดัชนี) โปรดทราบว่าดัชนีนี้ใช้แบบ 1 ไม่ใช่ไม่ใช่แบบ 0
เปลี่ยนชื่อไฟล์เอาต์พุตตามดัชนี
จริง ๆ แล้วคุณสามารถไพพ์ดัชนีเหล่านี้ไปยังรายการ:
ffprobe -select_streams v -show_frames \
-show_entries frame=pict_type \
-of csv bbb480.avi \
| grep -n I | cut -d ':' -f 1 > frame_indices.txt
จากนั้นทำรายการภาพขนาดย่อทั้งหมดด้วย:
ls -1 thumbnails*.jpeg > thumbnails.txt
จากนั้นวางทั้งสองเข้าด้วยกัน:
paste thumbnails.txt frame_indices.txt > combined.txt
รายการตอนนี้มีชื่อของภาพขนาดย่อและดัชนี ดำเนินการเปลี่ยนชื่อตาม:
while read -r thumbnail index; do
newIndex=$(echo $index - 1 | bc) # subtract 1 from the index
mv -- "$thumbnail" "thumbnail-$newIndex.jpeg" # rename file
done < combined.txt
ข้างต้นจะเปลี่ยนชื่อไปthumbnail-01.jpeg
thumbnail-0.jpeg
โปรดทราบว่าไม่มีการเติมเต็มศูนย์ในดัชนีผลลัพธ์ หากคุณต้องการ zero-pad ให้พูดถึง 5 หลักให้ใช้printf
:
newIndex=$(printf '%05d' $(echo $index - 1 | bc))
ใน Windows คุณต้องทำสิ่งเดียวกันด้วยffprobe
แต่แยกวิเคราะห์ผลลัพธ์ต่างกัน ไม่รู้ว่าจะทำการเปลี่ยนชื่อที่นั่นได้อย่างไร