Meningkatkan kualitas jpg ffmpeg yang dibuat

29

Saya menggunakan ffmpeg untuk mengambil umpan mjpeg dari kamera IP dan mengubahnya menjadi serangkaian gambar jpeg yang masih. Inilah perintah yang saya gunakan:

ffmpeg -i http://xxx:[email protected]/vid.mjpg -f image2 -vcodec mjpeg %05d.jpg

Apakah ada yang tahu cara untuk menentukan tingkat kompresi jpg saat menggunakan ffmpeg untuk membuat foto?

weotch
sumber

Jawaban:

36

Inilah yang akhirnya melakukan trik untuk saya:

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

Itu -q:v 1tiketnya. Ini menetapkan kualitas encoder video, di mana -qkualitas rata-rata dan :vvideo sarana. Nilai berkisar dari 1 hingga 31, di mana lebih rendah berarti lebih baik.

weotch
sumber
2
Saya tidak tahu apakah ini tersedia tahun yang lalu tetapi jika Anda ingin sumber gambar JPEG tidak dimodifikasi dari MJPEG, jawabannya ada di sini: ffmpeg.org/ffmpeg-bitstream-filters.html#mjpeg2jpeg ---- Singkatnya: -c:v copy -bsf:v mjpeg2jpegalih-alih daripada q:v 1.
juanitogan
1
Adakah yang tahu nilai default yang digunakannya?
Jay R. Wren
@ JayR. Ketika saya melakukan beberapa tes dan dalam kasus saya tampaknya mulai rendah (baik) dan setelah beberapa detik naik menjadi 24,8 (buruk). Saya tidak tahu kenapa. ffmpegs menunjukkan kualitas saat ini sebagai q. Ini dia 24,8 misalnyaframe= 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

ATAU

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

Referensi:

r       delay between next jpg, results 4 second
b       bitrate
vcodec  use jpeg encode
qscale  quality ratio
YumYumYum
sumber
apakah qscale "bersaing" dengan specifier bitrate, saya bertanya-tanya?
rogerdpack
1
Bukankah ini kebalikan dari apa yang ditanyakan? Ini terlihat seperti jpeg ke mjpeg. mjpeg ke jpeg adalah permintaannya.
juanitogan
4

Anda dapat mencoba untuk mengekspor ke PPM dan menggunakan beberapa alat lain untuk mengonversi menjadi JPEG.

Saya melihat ke ffmpeg / libavcodec / mjpeg.c. Saya percaya kualitasnya diatur ke nilai tetap.

Anda juga tampaknya mengkonversi video MJPEG menjadi bingkai foto JPEG. Saya pikir dalam hal ini kode dalam ffmpeg / libavcodec / mjpeg2jpeg_bsf.c berjalan dan data tidak dikodekan ulang. Jadi kualitas gambar tidak akan membaik.

Ini adalah definisi tabel kuantisasi, saya tidak melihat referensi ke * val_? C di mana nilai-nilai diskalakan sebelum digunakan.

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

sumber
Saya tidak terbiasa dengan PPM, apa itu?
weotch
Juga, gambar terlihat lebih baik ketika saya mengakses kamera dari browser dibandingkan dengan jpg yang saya buat. Itu sebabnya saya berpikir beberapa kompresi sedang terjadi.
weotch
PPM adalah format gambar warna paling sederhana yang bisa dibayangkan. Hanya sebuah header seperti "P6 640 480 255 \ n" dan kemudian data mentah. Saya baru saja melihat. Mungkin sebenarnya tidak bisa menampilkan format ini. Satu-satunya opsi lain adalah -vc rawvideo. Apakah Anda mencoba -kualitas?
1
-vcodec ppmdiperlukan untuk mengekspor ppm
Stop Harming Monica