ffmpeg로 생성 된 jpg의 품질 향상


29

ffmpeg를 사용하여 IP 카메라에서 mjpeg 피드를 가져 와서 일련의 스틸 jpeg 이미지로 변환합니다. 내가 사용하는 명령은 다음과 같습니다.

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

ffmpeg를 사용하여 스틸을 만들 때 jpg 압축 수준을 지정하는 방법을 아는 사람이 있습니까?

답변:


36

나를 위해 속임수를 쓴 결과는 다음과 같습니다.

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

-q:v 1티켓이었다. 이는 비디오 인코더의 품질이 상기 설정 -q수단은 품질 및 :v수단은 비디오. 값의 범위는 1-31이며, 낮을수록 좋습니다.


2
이것이 몇 년 전에 사용 가능한지 모르겠지만 MJPEG에서 소스 JPEG 이미지를 수정하지 않으려면 대답은 다음과 같습니다. 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.8 예를 들어frame= 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로 보입니다. jpeg에 mjpeg가 묻습니다.
juanitogan 님은

4

PPM으로 내보내고 다른 도구를 사용하여 JPEG로 변환 할 수 있습니다.

ffmpeg / libavcodec / mjpeg.c를 살펴 보았습니다. 품질이 고정 된 값으로 설정되어 있다고 생각합니다.

또한 MJPEG 비디오를 JPEG 스틸 프레임으로 변환하는 것 같습니다. 이 경우 ffmpeg / libavcodec / mjpeg2jpeg_bsf.c의 코드가 실행되고 데이터가 코딩되지 않는다고 생각합니다. 따라서 이미지 품질은 향상되지 않습니다.

이것은 양자화 테이블 정의입니다. 사용하기 전에 값이 조정 된 * 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

또한 내가 만드는 jpg와 비교하여 브라우저에서 카메라에 액세스하면 이미지가 더 좋아 보입니다. 그래서 압축이 일어나고 있다고 생각했습니다.
weotch

PPM은 상상할 수있는 가장 간단한 컬러 이미지 형식입니다. "P6 640 480 255 \ n"과 같은 헤더와 원시 데이터입니다. 방금 봤어 실제로이 형식을 출력 할 수 없습니다. 다른 유일한 옵션은 -vc rawvideo입니다. 당신은 품질을 시도 했습니까?

1
-vcodec ppmppm을 내보내는 데 필요
Harming Monica 중지
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.