Popraw jakość plików jpg utworzonych przez ffmpeg

29

Używam ffmpeg, aby pobrać kanał mjpeg z kamery IP i przekonwertować go na serię nieruchomych obrazów JPEG. Oto polecenie, którego używam:

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

Czy ktoś zna sposób na określenie poziomu kompresji jpg podczas używania ffmpeg do tworzenia zdjęć?

weotch
źródło

Odpowiedzi:

36

Oto, co skończyło się dla mnie trikiem:

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

To -q:v 1był bilet. Ustawia jakość kodera wideo, w którym średnia -qoznacza jakość i :vśrednie wideo. Wartości mieszczą się w zakresie od 1 do 31, gdzie niższa oznacza lepszą.

weotch
źródło
2
Nie wiem, czy było to dostępne lata temu, ale jeśli chcesz, aby źródłowe obrazy JPEG były niezmodyfikowane z MJPEG, odpowiedź jest tutaj: ffmpeg.org/ffmpeg-bitstream-filters.html#mjpeg2jpeg ---- W skrócie: -c:v copy -bsf:v mjpeg2jpegzamiast q:v 1.
juanitogan
1
Czy ktoś wie, jakiej używa wartości domyślnej?
Jay R. Wren,
@ JayR.Wren Zrobiłem kilka testów i w moim przypadku wydaje się, że zaczyna się od niskiego (dobry), a po kilku sekundach wzrasta do 24,8 (zły). Nie wiem dlaczego. ffmpegs pokazuje aktualną jakość jako q. Tutaj jest to 24,8 na przykładframe= 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

LUB

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

Odniesienie:

r       delay between next jpg, results 4 second
b       bitrate
vcodec  use jpeg encode
qscale  quality ratio
Mniam mniam mniam
źródło
zastanawiam się, czy qscale „konkuruje” ze specyfikatorem szybkości transmisji?
rogerdpack,
1
Czy to nie jest przeciwieństwo pytania? To wygląda jak jpeg na mjpeg. mjpeg to jpeg jest pytaniem.
juanitogan
4

Możesz spróbować wyeksportować do PPM i użyć innego narzędzia do konwersji na JPEG.

Zajrzałem do ffmpeg / libavcodec / mjpeg.c. Uważam, że jakość jest ustawiona na stałą wartość.

Wydaje się również, że konwertujesz wideo MJPEG w nieruchome ramki JPEG. Myślę, że w tym przypadku kod w ffmpeg / libavcodec / mjpeg2jpeg_bsf.c działa i dane nie są ponownie kodowane. Tak więc jakość obrazu i tak by się nie poprawiła.

To jest definicja tabeli kwantyzacji, nie widziałem żadnego odniesienia do * val_? C, gdzie wartości były skalowane przed użyciem.

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

źródło
Nie znam PPM, co to jest?
weotch
Ponadto obrazy wyglądają lepiej, gdy uzyskuję dostęp do kamery z przeglądarki w porównaniu do plików jpg, które tworzę. Właśnie dlatego myślałem, że dochodzi do kompresji.
weotch
PPM to najprostszy kolorowy format obrazu, jaki można sobie wyobrazić. To tylko nagłówek jak „P6 640 480 255 \ n”, a następnie nieprzetworzone dane. Właśnie spojrzałem. Może tak naprawdę nie może wydrukować tego formatu. Jedyną inną opcją byłoby -vc rawvideo. Czy próbowałeś-jakość?
1
-vcodec ppmjest potrzebny do eksportowania ppm
Stop Harming Monica