FFMPEG와 정확한 프레임 수를 사용하여 비디오 파일을 청크로 분할합니다.

FFMPEG와 정확한 프레임 수를 사용하여 비디오 파일을 청크로 분할합니다.

고정된 프레임 수를 기준으로 비디오 video.avi(예: N총 프레임 수)를 연속적인 청크로 분할하려고 합니다 M = 100. 구체적으로 이 프로세스는 다음을 생성해야 합니다.

  1. video_0.avi: 프레임 0~M-1
  2. video_1.avi: M프레임2M-1
  3. video_2.avi: 2M프레임3M-1
  4. ...

중요한 것은 각 블록에 video_*.avi정확한 M프레임이 있다는 것입니다. 따라서 N나눌 수 없는 경우 마지막 청크는 폐기될 수 있습니다 M.

관련 질문을 찾았습니다(예:ffmpeg를 사용하여 비디오 파일을 여러 세그먼트로 분할) 그러나 표준을 대체하기 위해 고군분투하고 있음을 발견했습니다.두번째그리고프레임.

답변1

첫 번째 블록의 경우 사용할 수 있고 괜찮을 것입니다( 기억 -vframes M-1하더라도 ).-c copy

다른 블록은 더 까다롭고 성공하지 못했습니다. -vf 'select=gte(n\,M)'- 어쨌든 다시 인코딩해야 하지만 다른 코덱을 사용하면 이상한 일이 발생합니다. 예를 들어 이전 기간을 스틸 프레임으로 남겨두고 사운드를 재생하는 등의 문제가 발생합니다. ..

$fps예를 들어 FPS가이고 M이 다음과 같은 경우 프레임 수를 FPS로 나누어 시간을 초 단위로 얻을 수 있습니다 $M.

ffmpeg -i video.avi -ss `echo "scale=6; $M / $fps" | bc` -to `echo "scale=6; (2 * $M) / $fps" | bc` video_01.avi

등. 이러한 시간을 계산하는 스크립트 언어가 있으면 더 쉽습니다. 또한 다시 인코딩할 때(예: 없이 -c copy) 정확할 것이라는 점에 유의하세요. 다음도 참조하세요 -ss.-tohttps://superuser.com/questions/459313/how-to-cut-at-exact-frames-using-ffmpeg

관련 정보