วิธีรับ FFMPEG เพื่อเข้าร่วมไฟล์ภาพที่ไม่ต่อเนื่อง (ข้าม 3 วินาที)


27

ฉันมีรูปภาพจำนวนมากซึ่งเป็นไปตามรูปแบบนี้

0001.png
0004.png
0007.png
0010.png
0013.png
0016.png
0019.png
...

พวกเขาอยู่ในลำดับที่ถูกต้อง แต่ FFMPEG 0002.pngไม่สนใจอะไรหลังจากไฟล์แรกเพราะมันไม่สามารถหา ฉันจะทำให้มันเข้าร่วมไฟล์เหล่านี้ได้อย่างไร?

ฉันเหนื่อย

ffmpeg -i %04d.png out.avi

2
แล้วเปลี่ยนชื่อเป็น AVI ชั่วคราวแล้วเปลี่ยนชื่อมันกลับเป็นรูปแบบ (3x-2) .png Bulk Rename Utility @ bulkrenameutility.co.uk/Main_Intro.phpเป็นระบบเปลี่ยนชื่อฟรีจำนวนมาก
Gyan

คำตอบ:


18

ด้วย ffmpeg 0.11.1 มันง่ายเหมือน:

ffmpeg -f image2 -i %*.png out.avi

จากmanหน้าดังกล่าวในตัวอย่างภายใต้ "การแปลงรูปแบบไฟล์วิดีโอและเสียง":

เมื่อนำเข้าลำดับภาพ-iยังสนับสนุนการขยายรูปแบบสัญลักษณ์แทนเชลล์ (กลม) ภายใน เพื่อลดโอกาสของการเข้าไปยุ่งกับชื่อไฟล์ที่แท้จริงของคุณและการขยายตัวของเปลือก glob ที่คุณจะต้องอักขระ glob เมตาเปิดใช้งานโดย prefixing พวกเขามีเพียงหนึ่งเดียว%ตัวละครเหมือนในfoo-%*.jpeg, หรือfoo-%?%?%?.jpegfoo-00%[234%]%*.jpeg

อัปเดตต่อความคิดเห็น: ในเวอร์ชันล่าสุดคุณควรใช้-i '*.png'ไวยากรณ์


3
สิ่งนี้ไม่ได้ทำงานสำหรับฉันโดยใช้ ffmpeg หรือ avconv ใน Ubuntu 13.04
hellocatfood

2
สิ่งนี้ดูเหมือนจะไม่เป็นตัวเลือกอีกต่อไป
Timmmm

2
glob_sequenceประเภทรูปแบบจะเลิก แต่globประเภทรูปแบบไม่ได้ คำตอบของ Mulvya และ Peter Cordes ใช้ได้ผล
ดร. Sybren

1
Pattern type 'glob_sequence' is deprecated: use pattern_type 'glob' instead
Serge Stroobandt

1
เช่นเดียวกับการชี้แจงเนื่องจากในปัจจุบันหน้านี้เป็นผลลัพธ์อันดับต้น ๆ ใน Google สำหรับข้อความเตือนนั้น ( Pattern type 'glob_sequence' is deprecated... ): คำสั่งที่ได้รับจาก rymo ด้านบน (โดยเฉพาะ-i %*.png) จะทำให้เกิดการเตือน หากต้องการกำจัดให้ใช้ไวยากรณ์ที่แตกต่างกันเล็กน้อยใน Peter Cordes answer ( -i '*.png')
James

19

นอกจากวิธีแก้ปัญหาในความคิดเห็นของฉันคุณควรจะสามารถใช้ไวยากรณ์นี้จากเอกสาร ffmpeg :

ffmpeg -f image2 -pattern_type glob -i '*.png' out.avi

คำพูดมีความสำคัญคุณต้อง ffmpeg เพื่อดู*ไม่มีเปลือกขยาย


ใช้งานไม่ได้สำหรับฉัน แต่อาจเป็นเพราะฉันมีรุ่นเก่ากว่า ฉันยอมรับสิ่งนี้เพราะส่วนใหญ่มีแนวโน้มที่จะช่วยเหลือผู้ใช้ในอนาคต
Brigand

ตามเอกสาร ffmpegคุณควรใช้ '* .png' แทน% 04d.png ด้วยประเภทรูปแบบ glob
เพื่อนของ George

จากนั้นจะเลือก pngs ทั้งหมดที่อยู่ในโฟลเดอร์นอกเหนือจาก 00xx.png ในขณะที่ OP ต้องการคิวเฉพาะ% 04d pngs โดยไม่ต้องกังวลเกี่ยวกับการกำหนดหมายเลขต่อเนื่อง
Gyan

2
ฉันค่อนข้างมั่นใจว่าคุณต้องใส่*.pngเครื่องหมายอัญประกาศเดี่ยว (ดังนั้น'*.png') เพื่อหลีกเลี่ยงการถูกขยายโดยเชลล์สไตล์ Unix (เช่น OSX และ linux เป็นต้น)
evilsoup

1
น่าเศร้าที่นักพัฒนา ffmpeg สร้างไฟล์ที่สนับสนุนตัวเลือก ! การสร้างหน้าต่างมาตรฐานไม่ได้รวมไว้
Timmmm

9

จากhttp://www.ffmpeg.org/faq.html : หากคุณมีรูปภาพจำนวนมากที่จะเปลี่ยนชื่อคุณสามารถใช้คำสั่งต่อไปนี้เพื่อลดภาระ คำสั่งที่ใช้ไวยากรณ์เปลือก bourne เชื่อมโยงไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันที่ตรงกับ * jpg ไปยังไดเรกทอรี '/ tmp' ในลำดับ 'img001.jpg', 'img002.jpg' และอื่น ๆ

x=1; for i in *jpg; do counter=$(printf %03d $x); ln -s "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done


ผมใช้วิธีนี้ในการรวมลำดับหลายseqA-[0001-n].png, seqB-[0001-n].pngฯลฯ มากขึ้นกว่า messing รอบด้วยภาพที่ 2 globbing และกรอง concat
z0r

สำหรับฉันมันไม่ทำงานจนกว่าฉันจะแทนที่for i in *jpgด้วยfor i in /full/path/*jpgเพราะ
symlink

4

ฉันอยากจะแนะนำสิ่งเดียวกันกับ Mulvya เมื่อใดก็ตามที่ฉันต้องการทำสิ่งนี้เมื่อจัดการกับการเรนเดอร์ภาพเคลื่อนไหว 3 มิติฉันได้เปลี่ยนชื่อไฟล์เพื่อให้เป็นลำดับ การทำงานกับวิธีนี้ทำได้ง่ายกว่าในซอฟต์แวร์ที่แตกต่างกันมากมายเว้นแต่คุณจะต้องเก็บชื่อไฟล์ไว้ด้วยเหตุผลบางประการ Total Commander ยังเป็นเครื่องมือที่ยอดเยี่ยมสำหรับการเปลี่ยนชื่อหลายแบบ


ฉันทำสิ่งที่คล้ายกัน (สคริปต์เปลี่ยนชื่อ Python)
Brigand

3

ส่วนที่ขาดหายไปฉันใช้ 2 ซับ

CONCAT=$(echo $(ls *.png | sort -n -t _ -k 2) | sed -e "s/ /|/g")
ffmpeg -framerate 25 -i "concat:$CONCAT" -c:v libx264 -profile:v high -pix_fmt yuv420p output.mp4

หวังว่าสิ่งนี้จะช่วยให้ใครบางคนในอนาคต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.