ปรับปรุงคุณภาพของ ffmpeg ที่สร้างขึ้น jpgs


29

ฉันใช้ ffmpeg เพื่อรับฟีด mjpeg จากกล้อง IP และแปลงเป็นภาพ jpeg ภาพนิ่ง นี่คือคำสั่งที่ฉันใช้:

ffmpeg -i http://xxx:xxx@xx.xx.xx.xx/vid.mjpg -f image2 -vcodec mjpeg %05d.jpg

ไม่มีใครรู้วิธีระบุระดับของการบีบอัด jpg เมื่อใช้ ffmpeg เพื่อสร้างภาพนิ่ง

คำตอบ:


36

ต่อไปนี้คือสิ่งที่ทำให้ฉันมีเล่ห์เหลี่ยม:

ffmpeg -i http://xx.xx/mjpg/video.mjpg -q:v 1 %05d.jpg

นั่น-q:v 1คือตั๋ว มันตั้งค่าคุณภาพของการเข้ารหัสวิดีโอที่-qมีคุณภาพหมายถึงและ:vวิธีการวิดีโอ ค่าตั้งแต่ 1 ถึง 31 โดยที่ต่ำกว่าหมายถึงดีกว่า


2
ฉันไม่รู้ว่านี่เป็นปีที่ผ่านมาหรือไม่ แต่ถ้าคุณต้องการภาพ JPEG ที่ไม่มีการแก้ไขจาก MJPEG คำตอบอยู่ที่นี่: ffmpeg.org/ffmpeg-bitstream-filters.html#mjpeg2jpeg ---- ในระยะสั้น: -c:v copy -bsf:v mjpeg2jpegแทนที่จะเป็นq:v 1.
juanitogan

1
ไม่มีใครรู้ว่ามันใช้ค่าเริ่มต้นหรือไม่
Jay R. Wren

@ JayR.Wren ฉันทำการทดสอบบางอย่างและในกรณีของฉันดูเหมือนว่าจะเริ่มต่ำ (ดี) และหลังจากนั้นไม่กี่วินาทีก็เพิ่มขึ้นเป็น 24.8 (ไม่ดี) ฉันไม่รู้ว่าทำไม ffmpegs qการแสดงที่มีคุณภาพในปัจจุบันเช่น นี่คือตัวอย่าง24.8frame= 64 fps=5.0 q=24.8 Lsize=N/A time=00:00:16.00 bitrate=N/A dup=10 drop=299 speed=1.25x
problemofficer

6

$ ffmpeg -r 1/4 -i %03d.jpg -b 5000 -vcodec mjpeg -qscale 1 5000.avi

หรือ

$ ffmpeg -r 1/4 -i %03d.jpg -vcodec copy -qscale 1 copy.avi

อ้างอิง:

r       delay between next jpg, results 4 second
b       bitrate
vcodec  use jpeg encode
qscale  quality ratio

Qscale "แข่งขัน" กับตัวระบุบิตเรตฉันสงสัยไหม?
rogerdpack

1
ไม่ตรงข้ามกับสิ่งที่ถูกถามใช่ไหม ดูเหมือนว่า jpeg ถึง mjpeg mjpeg ถึง jpeg คือการถาม
juanitogan

4

คุณสามารถลองส่งออกเป็น PPM และใช้เครื่องมืออื่นเพื่อแปลงเป็น JPEG

ฉันดูเป็น ffmpeg / libavcodec / mjpeg.c ฉันเชื่อว่าคุณภาพถูกกำหนดเป็นค่าคงที่

นอกจากนี้คุณดูเหมือนจะแปลงวิดีโอ MJPEG เป็นภาพนิ่ง JPEG ฉันคิดว่าในกรณีนี้รหัสใน ffmpeg / libavcodec / mjpeg2jpeg_bsf.c ทำงานและข้อมูลจะไม่ถูกบันทึก ดังนั้นคุณภาพของภาพจะไม่ดีขึ้น

นี่คือคำจำกัดความของตาราง quantization ฉันไม่เห็นการอ้างอิงใด ๆ กับ * val_? c ซึ่งมีการปรับค่าก่อนการใช้งาน

/* Set up the standard Huffman tables (cf. JPEG standard section K.3) */
/* IMPORTANT: these are only valid for 8-bit data precision! */
const uint8_t ff_mjpeg_bits_dc_luminance[17] =
{ /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 };
const uint8_t ff_mjpeg_val_dc[12] =
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };

const uint8_t ff_mjpeg_bits_dc_chrominance[17] =
{ /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 };

const uint8_t ff_mjpeg_bits_ac_luminance[17] =
{ /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d };
const uint8_t ff_mjpeg_val_ac_luminance[] =
{ 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,

ฉันไม่คุ้นเคยกับ PPM นั่นคืออะไร
weotch

ภาพดูดีขึ้นเมื่อฉันเข้าถึงกล้องจากเบราว์เซอร์เทียบกับ jpgs ที่ฉันสร้าง นั่นเป็นสาเหตุที่ฉันคิดว่ามีการบีบอัดเกิดขึ้น
weotch

PPM เป็นรูปแบบภาพสีที่ง่ายที่สุดที่ใคร ๆ ก็จินตนาการได้ มันเป็นเพียงส่วนหัวเช่น "P6 640 480 255 \ n" จากนั้นข้อมูลดิบ ฉันแค่มอง อาจจริงไม่สามารถส่งออกรูปแบบนี้ ตัวเลือกอื่นเท่านั้นแล้วจะเป็น -VC rawvideo คุณลอง -quality?

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