ปัญหาสั้น : ฉันต้องการถ่ายภาพหน้าจอบางภาพจาก URL วิดีโอในบางช่วงเวลา แต่ฉันไม่ต้องการอ่านวิดีโอทั้งหมด
สมมติว่าฉันมีวิดีโอที่เก็บไว้ใน URL บางรายการ (เช่นhttps://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_30mb.mp4 ) ขนาดของวิดีโอมีขนาดใหญ่ แต่เราสามารถค้นหาวิดีโอได้
ตอนนี้ฉันต้องการถ่ายภาพหน้าจอ / ภาพขนาดย่อ 4 ภาพของวิดีโอ เช่นถ้าวิดีโอมีขนาด 100s ฉันต้องการถ่ายภาพหน้าจอที่ 20s, 40s, 60s และ 80s
การใช้บทช่วยสอนจากวิกิ: สร้างภาพขนาดย่อทุกๆ X วินาทีของวิดีโอที่ฉันทำได้
ffmpeg -i 'https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_30mb.mp4' -vf fps=1/20 img%03d.jpg
แต่ปัญหาของวิธีนี้คืออ่านอินพุตทั้งหมดก่อนส่งคืนสกรีนช็อต แต่ในขณะที่การป้อนข้อมูลสามารถค้นหาได้นี้ดูเหมือนว่าจะเสีย วิธีที่ดีกว่าคือการค้นหาตำแหน่งและรับ ตอนนี้เรากำลังใช้สิ่งที่ชอบ
for i in 20 to 80 step 20
ffmpeg -noaccurate_seek -ss {i} -i 'https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_30mb.mp4' -vframes 1 out-{i}.png
ดูเหมือนว่าจะทำงานได้ แต่ยังคงเรียกใช้ ffmpeg แต่ละรายการใช้เวลาสักครู่และแต่ละ ffmpeg ถอดรหัสส่วนหัวของ URL วิดีโอเดียวกันซึ่งดูเหมือนซ้ำซ้อน มีวิธีการใดในการโทร ffmpeg ครั้งเดียวจึงสามารถลบงานที่ซ้ำกันนี้ได้หรือไม่?
PS ไม่จำเป็นต้องมีคำตอบสำหรับการใช้ ffmpeg เท่านั้น นอกจากนี้เรายังสามารถใช้ mpv / mplayer หรือ vlc หรือเครื่องเล่น / ตัวแปลงอื่น ๆ ที่มีใน Linux