-r 옵션을 사용하여 비디오에서 프레임 ffmpeg 추출과 관련된 타임 스탬프를 추출하려면 어떻게합니까?


12
ffmpeg -i myvid.mp4  -r  25  -t  100  image-%d.jpeg 

프레임을 추출하는 데 사용하는 명령이며 예상대로 작동합니다. 그러나 나는 또한 프레임의 타임 스탬프를보고 싶습니다. 아무리 정밀해도 100 밀리 초이면 충분합니다. ffmpeg가 이것을 할 수 있습니까?

추가 정보 제공

위의 명령을 실행하면 약 100 개의 JPEG가 표시되며 이러한 JPEGS와 비디오 프레임 사이에 1 대 1 (또는 다 대 1) 대응 관계가 있다고 생각합니다. JPEG 이미지 'i'로 출력 된 프레임의 타임 스탬프를 알고 싶습니다.

또한 ffprobe를 사용해 보았지만 비디오 길이조차도 부정확하게보고합니다.


무엇으로? AFAIK jpeg에는 이러한 메타 데이터가 없습니다. EXIF 타임 스탬프는 capture시간입니다.
Rajib

JPEG에 메타 데이터가 없지만 mp4가있을 수 있습니다. ffmpeg가 나중에 JPEGS로 인코딩 한 프레임과 함께 가져 와서 타임 스탬프를 파일로 덤프하도록 지시 할 수 있습니까?
Srini

ffmpeg명령 의 전체 콘솔 출력을 포함하십시오.
llogan

ffprobe는 mp4 비디오 스트림의 타임 스탬프 정보를 제공합니다. 프레임을 복제하거나 떨어 뜨릴 수 있는지 묻고 원래 mp4 타임 스탬프에 해당하는 것은 무엇입니까? 이 경우 자세한 설정을 높이면서 실행 중에 프레임별로 프레임을 가져올 수 있는지 확인합니다. "프레임과 관련된 타임 스탬프"의 의미를 확장 할 수 있습니까?
dstob

@dstob 프레임과 관련된 타임 스탬프는 입력 비디오의 프리젠 테이션 타임 스탬프입니다. 즉, 비디오 시작과 관련하여 각 프레임이 표시되어야 할 때입니다.
slhck

답변:


13

fps필터 로 필터링 한 다음 ffprobe생성 된 프레임의 타임 스탬프를 표시 하여 이미지 쓰기 프로세스를 "시뮬레이션"할 수 있습니다 . 즉, 25fps에서 50 번째 프레임 (예 : 50 번째 이미지)의 PTS는 2.00 초입니다.

당신은 이것을 이렇게합니다 :

ffprobe -f lavfi -i "movie=input.mp4,fps=fps=25[out0]" -show_frames -show_entries frame=pkt_pts_time -of csv=p=0

출력합니다 :

0
0.04
0.08
0.12
0.16
...

각 출력 이미지의 타임 스탬프입니다. 실제로 프레임 목록과 타임 스탬프를 결합 할 수 있습니다.

LS-1 이미지-*. jpeg> images.txt
ffprobe -f lavfi -i "movie = input.mp4, fps = fps = 25 [out0]"-show_frames -show_entries frame = pkt_pts_time -of csv = p = 0> frames.txt
붙여 넣기 images.txt frames.txt> Combined.txt

다음을 사용하여 파일을 만듭니다.

image-0001.jpeg 0
image-0002.jpeg 0.04
image-0003.jpeg 0.08
image-0004.jpeg 0.12

프레임이 너무 많거나 정보 출력 라인이 너무 많으면 외부 라인이 발생할 수 있습니다. 약간 부정확 한 것 같습니다.


이것은 출력에 배치 된 일정한 프레임 속도 또는 출력 된 jpeg와 임의의 프레임 속도 일 수 있고 타임 스탬프 값을 가질 수있는 원래 mp4 타임 스탬프에 대응하는 타임 스탬프입니까?
dstob

이 타임 스탬프는 요청 된 출력 프레임 속도를 기반으로합니다. 이것은 출력 영상뿐만 아니라 그 영상이 나온 원래의 입력 비디오 프레임과도 관련이 있습니다. 단 하나의 타임베이스 만 있습니다. 이것은 프레임 속도를 변경할 때 ffmpeg가 비디오를 더 빨리 재생하지 않지만 각 프레임의 프레젠테이션 시간을 "스트레치"하고 불필요한 프레임을 삭제하기 때문에 작동합니다.
slhck

출력 시간축을 수동으로 생성 할 때 시간축이 하나만 필요한 이유는 무엇입니까? 항상 그런 것은 아니지만 처음 60fps 비디오에서 ffmpeg는 입력 타임 스탬프를 무시하고 자체 타임베이스를 만들었습니다.
dstob

정확히 무엇을 받고 있는지 이해하지 못합니다. ffmpeg는 첫 번째 입력 파일의 타임베이스로 구문 분석하는 모든 것을 입력 타임베이스로 선택 합니다 . 물론 ffmpeg에게 입력 타임 스탬프를 버리도록 지시 할 수 -vsync drop있지만, IIRC 필터링 후에 발생합니다.
slhck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.