ffmpeg 스트림 복사 프레임 정확도

ffmpeg 스트림 복사 프레임 정확도

이것이 불가능할 수도 있다는 것을 알고 있지만 적어도 무슨 일이 일어나고 있는지 이해해 주시면 감사하겠습니다.

2초마다 강제 키프레임이 적용되는 동영상이 있습니다. 이상적으로는 다시 인코딩하지 않고도 프레임에 딱 맞는 조각을 얻을 수 있기를 바랐습니다. 예를 들어:

ffmpeg -ss 00:00:00 -i original.mp4 -t 2 -c copy slices_0.mp4
ffmpeg -ss 00:00:02 -i original.mp4 -t 2 -c copy slices_1.mp4
ffmpeg -ss 00:00:04 -i original.mp4 -t 2 -c copy slices_2.mp4
...

이것은 제대로 작동하지 않는 것 같습니다.

더 자세히 살펴보면 첫 번째 슬라이스가 프레임 단위로 정확한 것처럼 보이지만 그 이후의 모든 항목에는 약간의 오프셋이 있습니다(다른 문제가 있을 수 있지만 지금은 이것에만 집중하고 있습니다). 첫 번째 프레임은 괜찮아 보입니다.

# same output
ffmpeg -ss 00:00:03 -i original.mp4 -vframes 1 o.png && md5 o.png
ffmpeg -ss 00:00:00 -i slices_1.mp4 -vframes 1 1.png && md5 1.png

그러나 그 이후의 모든 것은 꺼져 있습니다.

# not the same output
ffmpeg -ss 00:00:04 -i original.mp4 -vframes 1 o.png && md5 o.png
ffmpeg -ss 00:00:01 -i slices_1.mp4 -vframes 1 1.png && md5 1.png

내가 무엇을 하든 같은 결과를 얻습니다. 프레임 60의 원본에 대한 PTS를 보면 (2 대신) 2.002000을 얻습니다. 그러나 이것을 슬라이스에 사용하더라도 동일한 오프셋을 얻습니다.

무슨 일이야?

(아마도 현실화되지는 않았지만 0_slices.mp4의 첫 번째 프레임에 원본이 없는데 왜 오프셋 PST/DST가 있는지 궁금합니다.)

답변1

정확한 프레임 검색을 원할 경우 -ss입력 파일 뒤에 플래그를 넣어보세요.

그래서 다음과 같습니다.

ffmpeg -i original.mp4 -ss 00:00:04 -vframes 1 -f image2 0.png.

입력 파일 앞에 플래그를 배치하는 것은 ssPTS 측면에서 '대략적인 추측'이 될 수 있지만 작동하려면 I-프레임에 맞춰야 합니다. 입력 파일 뒤에 플래그를 배치하는 것보다 훨씬 빠르게 발생 ss하지만 정확도가 떨어집니다.

입력 파일 뒤에 플래그를 넣으면 ssFFmpeg는 시간이 시작될 때까지 파일의 시작 부분부터 끝까지 디코딩합니다 -ss. 그런 다음 해당 시간 이전에 모든 정보를 덤프합니다 ss. 따라서 시간이 훨씬 오래 걸리지만 정확해야 합니다.

관련 정보