답변:
나를 위해 속임수를 쓴 결과는 다음과 같습니다.
ffmpeg -i http://xx.xx/mjpg/video.mjpg -q:v 1 %05d.jpg
은 -q:v 1
티켓이었다. 이는 비디오 인코더의 품질이 상기 설정 -q
수단은 품질 및 :v
수단은 비디오. 값의 범위는 1-31이며, 낮을수록 좋습니다.
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
$ 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
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,
-vcodec ppm
ppm을 내보내는 데 필요
-c:v copy -bsf:v mjpeg2jpeg
대신q:v 1
.