ขณะนี้ฉันกำลังใช้คำสั่งนี้เพื่อแยกภาพ:
ffmpeg.exe -i 10fps.h264 -r 10 -f image2 10fps.h264_% 03d.jpeg
แต่ฉันจะปรับปรุงคุณภาพของภาพ JPEG ได้อย่างไร?
ขณะนี้ฉันกำลังใช้คำสั่งนี้เพื่อแยกภาพ:
ffmpeg.exe -i 10fps.h264 -r 10 -f image2 10fps.h264_% 03d.jpeg
แต่ฉันจะปรับปรุงคุณภาพของภาพ JPEG ได้อย่างไร?
คำตอบ:
-qscale:v
ใช้-qscale:v
(หรือนามแฝง-q:v
) เป็นตัวเลือกเอาต์พุต ช่วงที่มีประสิทธิภาพสำหรับ JPEG คือ 2-31 โดย 31 เป็นคุณภาพที่แย่ที่สุด ฉันแนะนำให้ลองใช้ค่า 2-5
ffmpeg -i input.mp4 -qscale:v 2 output_%03d.jpg
ffmpeg -ss 60 -i input.mp4 -qscale:v 4 -frames:v 1 output.jpg
สิ่งนี้จะใช้ได้กับอินพุตวิดีโอใด ๆ ดูด้านล่างว่าข้อมูลที่คุณป้อนคือ MJPEG หรือไม่
หากอินพุตของคุณเป็น MJPEG (Motion JPEG) คุณสามารถแยกภาพออกมาได้โดยไม่สูญเสียคุณภาพใด ๆ
ffmpeg
หรือffprobe
เอาท์พุทคอนโซลสามารถบอกคุณได้ถ้าใส่ของคุณเป็น MJPEG:
$ ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=nw=1 input.avi
codec_name=mjpeg
จากนั้นคุณสามารถแยกเฟรมโดยใช้mjpeg2jpeg
ตัวกรอง bitstream :
$ ffmpeg -i input.avi -codec:v copy -bsf:v mjpeg2jpeg output_%03d.jpg
-qmin 1 -qmax 1
นอกจากนี้เพื่อ-q:v 1
เพิ่มขนาดไฟล์เป็นสองเท่า และดูเหมือนว่าฉันจะเห็นการปรับปรุงเล็กน้อยเช่นกัน
-qmin 1 -qmax 1
ส่งผลให้ไฟล์มีขนาดใหญ่ขึ้น แต่ให้ภาพที่เหมือนกันทุกประการ ฉันตรวจสอบสิ่งนี้ผ่าน photoshop 2 ชั้นและฟิลเตอร์ความแตกต่าง พิกเซลเท่ากัน
-qmin 1 -q:v 1
คุณสามารถลอง
แสดงภาพในรูปแบบ lossless เช่น PNG:
ffmpeg.exe -i 10fps.h264 -r 10 -f image2 10fps.h264_%03d.png
จากนั้นใช้โปรแกรมอื่น (ซึ่งคุณสามารถระบุคุณภาพการสุ่มตัวอย่างและวิธี DCT ได้อย่างแม่นยำยิ่งขึ้นเช่น GIMP) เพื่อแปลง PNG ที่คุณต้องการเป็น JPEG
มันเป็นไปได้ที่จะได้รับภาพที่คมชัดขึ้นเล็กน้อยในรูปแบบ JPEG ด้วยวิธีนี้กว่าเป็นไปได้ด้วย-qmin 1 -q:v 1
และแสดงผลเป็น JPEG ffmpeg
โดยตรงจาก
ffmpeg
เอาต์พุตPNG8
ไฟล์ที่ใช้เพียง 256 สี (เช่นเดียวกับ GIF) ดังนั้นจึงเป็นการสูญเสียอย่างมาก
ffmpeg
คำสั่ง] ฉันได้รับของ PNG คุณภาพสูงที่มีคุณภาพเหมือนกันกับวิดีโอต้นฉบับ." คุณใช้เวอร์ชันใดในการffmpeg
ส่งออกPNG8
ไฟล์และรูปแบบการป้อนข้อมูลของคุณคืออะไร?
identify image.png
ให้ผลลัพธ์เป็น "8 บิต" เมื่อจริงๆแล้วมันไม่ใช่ 8 บิตแชนเนลเดียว แต่เป็น 8 บิตสำหรับ R, G และ B IDK ว่าidentify
ผู้ใช้ทั่วไปควรจะเข้าใจอย่างไร นั่น