ทำรูปย่อจากวิดีโอ


11

ฉันจะสร้างการจับภาพง่ายๆจากวิดีโอได้อย่างไร โดยเฉพาะอย่างยิ่งจากบรรทัดคำสั่งหรือไม่

แนวคิด: ใช้ 9 สแนปชอตเป็นเวลา 9 ครั้งที่จัดวางไว้ (บนไทม์ไลน์) และบันทึกเป็น JPG

ตัวอย่าง:

Movie length = 10 min
T1= snapshot of 1 min
T2= snapshot of 2 min
......
T9= snapshot of 9 min
   |   |
 T1| T2| T3
---+---+---
 T4| T5| T6
---+---+---
 T7| T8| T9
   |   |

โปรแกรมที่ดีที่สุดในการทำเช่นนี้คืออะไร? มีโปรแกรม opensource หรือไม่?

คำตอบ:


5

ffmpegเป็นเครื่องมือโอเพ่นซอร์สที่ยอดเยี่ยมสำหรับจัดการวิดีโอรวมถึงการแยกเฟรม

เพื่อแยกเฟรมเดียวจากการประทับเวลาที่เฉพาะเจาะจงคุณสามารถใช้คำสั่งเช่น

ffmpeg -i video.avi -r 1  -t 00:01:00 -f image2 image%05d.png

-r เป็นอัตราเฟรม คุณยังสามารถใช้คำสั่งเช่น

ffmpeg -i video.avi -r 1/1440 -f image2 image%05d.png

เพื่อรับหนึ่งเฟรมทุกหนึ่งนาที (สมมติว่าวิดีโอ 24FPS) % 05d หมายถึงหมายเลขตามลำดับของรูปภาพขนาดย่อแต่ละภาพควรจัดรูปแบบโดยใช้ 5 หลัก

หากคุณต้องการที่จะรวมภาพเป็นภาพตัดต่อ (ตารางของคุณ) คุณสามารถใช้ imagemagick หลังจากแยกเฟรมโดยใช้ ffmpeg


2

มันไม่ได้เป็นโปรแกรมบรรทัดคำสั่ง แต่คุณยังอาจจะใช้qframecatcher

สำหรับ Ubuntu / debian ข้อกำหนดคือ: sudo apt-get install libqt4-dev libxine-dev build-essential

wget http://download.berlios.de/qframecatcher/qframecatcher-0.4.1.tar.gz
tar xzf qframecatcher-0.4.1.tar.gz
cd qframecatcher/src
qmake
make
./qframecatcher

ที่มา: http://blog.radevic.com/2008/06/how-to-create-movie-or-video-frame.html


1

vcsiเป็นเครื่องมือบรรทัดคำสั่งที่เขียนใน Python ที่สามารถใช้ในการสร้าง snapshots ขนาด 3 คูณ 3 ด้วยคำสั่งต่อไปนี้:

vcsi -g 3x3 video.mkv -o output.jpg

0

เคสของฉันเป็นภาพขนาดย่อเพียงหนึ่งภาพจากวิดีโอเพียงไฟล์เดียวที่ใช้เป็น<video>โปสเตอร์แท็ก ดังนั้นวิธีที่รวดเร็วในการทำสิ่งนี้คืออะไร?

ด้วยffmpegคุณสามารถทำสิ่งนี้:

ffmpeg -ss 123 -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg

ที่จะให้กรอบที่อยู่ใกล้ที่สอง123ของการบันทึกเป็นvideo.mp4poster.jpg

ปัญหาอย่างที่คุณเห็นคือเราต้องรู้ว่าตัวที่สองนั้นถูกต้อง

เพื่อให้การอ้างอิงของเราอยู่ในระดับต่ำเราจะใช้ ffmpeg สำหรับสิ่งนี้:

# Get the time as h:m:s (non-padded)
l=$(ffmpeg -i video.mp4 2>&1 | grep Duration: | sed -r 's/\..*//;s/.*: //;s/0([0-9])/\1/g')
# Convert that into seconds
s=$((($(cut -f1 -d: <<< $l) * 60 + $(cut -f2 -d: <<< $l)) * 60 + $(cut -f3 -d: <<< $l)))
# Get frame at 25% as the thumbnail
ffmpeg -ss $((s / 4)) -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg

ดูเหมือนว่าวิดีโอ 25% เป็นตัวเลือกที่ใช้กันทั่วไป แต่คุณสามารถสร้างได้ 33% หรือ 50% เช่นกัน

นี่คือสคริปต์ที่ไม่นี้

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