ffmpeg를 사용하여 H264 비디오 파일에서 양질의 JPEG 이미지를 추출하려면 어떻게해야합니까?


108

현재이 명령을 사용하여 이미지를 추출하고 있습니다.

ffmpeg.exe -i 10fps.h264 -r 10 -f image2 10fps.h264_ % 03d.jpeg

그러나 JPEG 이미지 품질을 어떻게 향상시킬 수 있습니까?


1
"좋지"않은 점을 제외하고 현재 품질에 어떤 문제가 있습니까?
bjoernz

답변:


215

사용하다 -qscale:v

사용 -qscale:v(또는 별칭 -q:v) 출력 옵션으로. JPEG의 유효 범위는 2-31이며 31이 가장 나쁜 품질입니다. 2-5의 값을 시도하는 것이 좋습니다.

일련의 이미지를 출력하려면 :

ffmpeg -i input.mp4 -qscale:v 2 output_%03d.jpg

최대 60 초 동안 단일 이미지를 출력하려면 :

ffmpeg -ss 60 -i input.mp4 -qscale:v 4 -frames:v 1 output.jpg

이것은 모든 비디오 입력에서 작동합니다. 입력이 MJPEG인지 아래를 참조하십시오.


MJPEG

입력이 MJPEG (Motion JPEG) 인 경우 품질 손실없이 이미지를 추출 할 수 있습니다.

ffmpeg또는 ffprobe귀하의 의견은 MJPEG 경우 콘솔 출력은 말할 수 있습니다 :

$ ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=nw=1 input.avi
codec_name=mjpeg

그런 다음 mjpeg2jpeg비트 스트림 필터를 사용하여 프레임을 추출 할 수 있습니다 .

$ ffmpeg -i input.avi -codec:v copy -bsf:v mjpeg2jpeg output_%03d.jpg

또한보십시오


이것은 나에게 영향을 미치지 않는 것 같습니다. qscale 1과 2는 모두 동일한 파일 크기를 제공하며 (육안으로는) qscale이없는 것과 동일하게 나타납니다.
felwithe

사용중인 전체 명령 줄을 게시 할 수 있습니까? 또한 명령 줄에 ffmpeg의 완전한 자르지 않은 출력을 게시하십시오. 참고 배치 V -i inputfile의 옵션 다음에 위치하는이 개 요구되지만 출력 파일 옵션 전에 어떤 영향을 미칠 그래서 -qscale, 옵션은 관련이있다.
Ronald S. Bultje 2015

1
나를 위해 파일 크기 -qmin 1 -qmax 1-q:v 1두 배로 늘리는 것 외에도 추가 했습니다 . 그리고 나는 또한 아주 약간의 개선을 볼 수 있습니다.
0:43에 complistic

1
@complistic : -qmin 1 -qmax 1결과적으로 더 큰 파일이 생성되었지만 정확히 동일한 이미지를 제공합니다. 포토샵, 2 개의 레이어 및 차이 필터를 통해이를 검증했습니다. 픽셀은 동일합니다.
cherouvim 2015

@Kostanos 시도해 볼 수 있습니다 -qmin 1 -q:v 1.
llogan

0

PNG와 같은 무손실 형식으로 이미지를 출력합니다.

ffmpeg.exe -i 10fps.h264 -r 10 -f image2 10fps.h264_%03d.png

그런 다음 다른 프로그램 (품질, 서브 샘플링 및 DCT 방법 (예 : 김프)을보다 정확하게 지정할 수 있음)을 사용하여 원하는 PNG를 JPEG로 변환합니다.

이렇게하면 -qmin 1 -q:v 1에서 직접 JPEG로 출력하는 것보다 약간 더 선명한 이미지를 JPEG 형식으로 얻을 수 있습니다 ffmpeg.


ffmpegPNG8256 색만 사용하는 파일을 출력 합니다 (GIF와 동일). 그래서 실제로는 매우 손실 이 많습니다 .
lapin

@lapin이 방법을 사용하여 추출한 PNG는 24 비트입니다 (256 색 미만의 프레임에서도 다른 프레임에는 더 많은 색상이 있음). 이것은 Windows에서 버전 4.2.1 x64를 사용하고있었습니다. 또한 여기 에 다음과 같이 쓰여 있습니다 . "이 [ ffmpeg] 명령 을 사용하여 mp4에서 png를 가져 오면 원본 비디오와 동일한 품질의 고품질 png를 얻습니다." 파일을 ffmpeg출력하는 버전은 PNG8무엇이며 입력 형식은 무엇입니까?
Jake

사실 저는 당신이 옳다고 생각합니다. 문제는 identify image.png실제로는 단일 채널 8 비트가 아니라 R, G 및 B에 대해 8 비트 일 때 "8 비트"결과 를 제공 한다는 것입니다 . IDK 일반 identify사용자가 이해해야하는 방식 그 tho.
lapin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.