
고정된 프레임 수를 기준으로 비디오 video.avi
(예: N
총 프레임 수)를 연속적인 청크로 분할하려고 합니다 M = 100
. 구체적으로 이 프로세스는 다음을 생성해야 합니다.
video_0.avi
: 프레임 0~M-1
video_1.avi
:M
프레임2M-1
video_2.avi
:2M
프레임3M-1
- ...
중요한 것은 각 블록에 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
.-to
https://superuser.com/questions/459313/how-to-cut-at-exact-frames-using-ffmpeg