Cải thiện chất lượng của ffmpeg tạo jpgs


29

Tôi đang sử dụng ffmpeg để lấy nguồn cấp mjpeg từ camera IP và chuyển đổi nó thành một loạt các hình ảnh tĩnh. Đây là lệnh tôi đang sử dụng:

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

Có ai biết cách chỉ định mức độ nén jpg khi sử dụng ffmpeg để tạo ảnh tĩnh không?

Câu trả lời:


36

Đây là những gì đã làm cho tôi lừa:

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

Chiếc -q:v 1vé là Nó đặt chất lượng của bộ mã hóa video, trong đó -qchất lượng có nghĩa là chất lượng và :vphương tiện video. Giá trị nằm trong khoảng từ 1 đến 31, trong đó thấp hơn có nghĩa là tốt hơn.


2
Tôi không biết điều này đã có từ nhiều năm trước nhưng nếu bạn muốn hình ảnh JPEG nguồn không được sửa đổi từ MJPEG, câu trả lời là ở đây: ffmpeg.org/ffmpeg-bitstream-filters.html#mjpeg2jpeg ---- Tóm lại: -c:v copy -bsf:v mjpeg2jpegthay vì q:v 1.
juanitogan

1
Có ai biết nó sử dụng giá trị mặc định nào không?
Jay R. Wren

@ JayR. Khi tôi thực hiện một số thử nghiệm và trong trường hợp của tôi, nó dường như bắt đầu ở mức thấp (tốt) và sau vài giây tăng lên 24,8 (xấu). Tôi không biết tại sao. ffmpegs cho thấy chất lượng hiện tại như q. Đây là 24.8 chẳng hạnframe= 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
vấn đề

6

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

HOẶC LÀ

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

Tài liệu tham khảo:

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

Qscale có "cạnh tranh" với công cụ xác định bitrate không, tôi tự hỏi?
rogerdpack

1
Đây không phải là trái ngược với những gì đang được hỏi? Điều này trông giống như jpeg đến mjpeg. mjpeg đến jpeg là yêu cầu.
juanitogan

4

Bạn có thể thử xuất thành PPM và sử dụng một số công cụ khác để chuyển đổi thành JPEG.

Tôi đã xem xét ffmpeg / libavcodec / mjpeg.c. Tôi tin rằng chất lượng được đặt thành một giá trị cố định.

Ngoài ra, bạn dường như chuyển đổi video MJPEG thành khung hình tĩnh. Tôi nghĩ trong trường hợp này, mã trong ffmpeg / libavcodec / mjpeg2jpeg_bsf.c chạy và dữ liệu không được mã hóa lại. Vì vậy, chất lượng hình ảnh sẽ không cải thiện.

Đây là định nghĩa bảng lượng tử hóa, tôi không thấy bất kỳ tham chiếu nào đến * val_? C nơi các giá trị được thu nhỏ trước khi sử dụng.

/* 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,

Tôi không quen thuộc với PPM, đó là gì?
weotch

Ngoài ra, hình ảnh trông đẹp hơn khi tôi truy cập máy ảnh từ trình duyệt so với jpg tôi đang tạo. Đó là lý do tại sao tôi nghĩ rằng một số nén đã xảy ra.
weotch

PPM là định dạng hình ảnh màu đơn giản nhất mà người ta có thể tưởng tượng. Nó chỉ là một tiêu đề như "P6 640 480 255 \ n" và sau đó là dữ liệu thô. Tôi chỉ nhìn. Có lẽ nó thực sự không thể xuất định dạng này. Tùy chọn duy nhất khác sau đó sẽ là -vc rawvideo. Bạn đã thử chất lượng chưa?

1
-vcodec ppmlà cần thiết để xuất ppm
Ngừng làm hại Monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.