วิธีการดึงภาพจากไฟล์วิดีโอ?


คำตอบ:


20

ลองด้วย ffmpeg

ffmpeg -i inputfile.avi -r 1 -f image2 image-%3d.jpeg

คุณสามารถอ่านเอกสารได้ที่นี่

  • -i inputfile.avi ไฟล์อินพุตวิดีโอคือ inputfile.avi
  • -r 1แยก 1 ภาพต่อวินาทีของวิดีโอ แทนที่หมายเลขนั้นสำหรับจำนวนรูปภาพที่คุณต้องการรับต่อวินาที
  • -f image2 บังคับให้ใช้รูปแบบเอาต์พุตของภาพคุณอาจจะสามารถข้ามได้เนื่องจากโปรแกรมพยายามเลือกรูปแบบภาพที่ส่งออกจากนามสกุลไฟล์
  • image-%3d.jpeg ชื่อของภาพที่ส่งออก% 3d ระบุว่าภาพที่สร้างขึ้นจะมีหมายเลขลำดับที่ 3 ทศนิยมถ้าคุณต้องการจำนวนเต็มด้วยศูนย์คุณเพียงแค่ใช้% 03d

1
ดูเหมือนว่าลิงก์ของคุณจะใช้งานไม่ได้
Nolwennig

@Nolwennig แก้ไขไม่เฉพาะเจาะจงกับเอกสารก่อนหน้านี้ แต่อย่างน้อยก็เป็นเอกสารอย่างเป็นทางการและแทบจะไม่เสียหาย
YoMismo

3
-r 1ใช้สำหรับจำนวนภาพต่อวินาที ดังนั้นสำหรับ 60ips, หรือ 24 -r 24ก็ และการ จำกัด -ss [start] -t [duration]สารสกัดก็
Sandburg

ขอบคุณทำงานได้ดีกับ Xubuntu
Indacochea Wachín

3

ฉันเพิ่งดาวน์โหลด VLC เวอร์ชันล่าสุดสำหรับ Windows 32 - 2.1.2 Rincewind และใช้งานได้ดีในการทำเช่นนี้

ขั้นตอน:

1 - คลิกเครื่องมือ> การตั้งค่าและคลิกปุ่มตัวเลือกทั้งหมด

2 - เลื่อนลงและคลิกที่เครื่องหมาย + ถัดจากวิดีโอเพื่อขยาย

3 - เลื่อนลงแล้วคลิกที่ตัวกรองซีนและกรอกข้อมูลสำหรับคำนำหน้าเส้นทางไดเรกทอรี (ที่คุณต้องการบันทึกเฟรม) อย่าคลิกบันทึก

4 - เลื่อนขึ้นแล้วคลิกที่คำว่าวิดีโอใต้ตัวกรอง

5 - คลิกช่องทำเครื่องหมายสำหรับตัวกรองวิดีโอของฉากแล้วคลิกบันทึก

6 - เปิดและเรียกใช้วิดีโอและมันจะบันทึก. png ของ

7 - ในการหยุดบันทึกเฟรมกลับไปที่ขั้นตอนที่ 5 และยกเลิกการเลือกตัวกรองวิดีโอฉาก ง่ายจริงๆเมื่อคุณรู้ว่าจะหาการตั้งค่าได้ที่ไหน


0

หวังว่าความช่วยเหลือนี้

#!/bin/bash
source_dir="."
output_dir="."
input_file_types=(avi wmv flv mkv mpg mp4)
output_file_type="jpg"

convert() {
        echo "" | ffmpeg -ss $ss -y -i "$in_file" -an -f image2 -vframes 1 "$output_dir/$out_file"
}

for input_file_types in "${input_file_types[@]}"
do

        find "$source_dir" -name "*.$input_file_types" -print0 | while IFS= read -r -d $'\0' in_file
        do
                echo "Processing…"
                echo ">Input  "$in_file
                # Replace the file type
                out_file=$(echo $in_file|sed "s/\(.*\.\)$input_file_types/\1$output_file_type/g")
            echo ">Output "$out_file

# get video duration
#    fulltime=`ffmpeg -i "$in_file" 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//`;
#    hour=`echo $fulltime | cut -d ':' -f 1`;
#    minute=`echo $fulltime | cut -d ':' -f 2`;
#    second=`echo $fulltime | cut -d ':' -f 3 | cut -d '.' -f 1`;

#    seconds=`expr 3600 \* $hour + 60 \* $minute + $second`;
#    ss=`expr $seconds / 2`; # from the middle of video



    ss=`expr 10`; # from the 10sec of video



    # Convert the file
                convert "$in_file" "$out_file"

                if [ $? != 0 ]
                then
                    echo "$in_file had problems" >> ffmpeg-errors.log
                fi

                echo ">Finished "$out_file "\n\n"
        done
done

0

ใน VLC คุณสามารถคลิกขวาวิดีโอถ่ายภาพ


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