उल्लिखित @dstob की तरह, आप I- ffprobe
फ्रेम और उनकी संबंधित जानकारी प्राप्त करने के लिए उपयोग कर सकते हैं । डाउनलोड पेज परffprobe
कुछ स्टैटिक बिल्ड के साथ आता है और इसे सोर्स से भी बनाया जा सकता है।
यह आप लिनक्स / यूनिक्स पर मान रहे हैं:
फ्रेम और फ्रेम प्रकार निकालें
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
। ध्यान दें कि आउटपुट इंडेक्स पर कोई जीरो-पेडिंग नहीं है। यदि आप इसे 5-अंकों के लिए शून्य-पैड करना चाहते हैं, तो उपयोग करें printf
:
newIndex=$(printf '%05d' $(echo $index - 1 | bc))
विंडोज पर, आप ठीक उसी के साथ करेंगे, ffprobe
लेकिन आउटपुट को अलग तरीके से पार्स करेंगे। हालांकि नाम बदलने का प्रदर्शन कैसे करना है, इसका कोई अंदाजा नहीं है।