컴퓨터와 잡동사니 자료

ffmpeg으로 동영상을 자를 때 가장 짧게 자를 수 있는 시간은 얼마일까?

K66Google 2020. 11. 27. 13:09

예를 들어, 30 fps이면서 h264 / mp3 코덱의 동영상이 있다고 가정해보자. 그럼 이 동영상의 일부를 ffmpeg으로 자르려고 할때 가장 짧게 자를 수 있는 시간은 얼마일까?


정답은 1프레임이다. 30 fps 기준으로 약 0.033초다. 

fps별 프레임 계산식은 (1 ÷ 30 = 0.033333... = 0.033) 이 되겠다.


ffmpeg으로 동영상을 자를때는 -ss-to의 시간차가 반드시 1프레임을 초과해야 한다. 1프레임과 같거나 미만이면 동영상의 비디오 파트가 누락되게 인코딩된다. 아래의 스샷을 보도록 하자.


-ss값의 밀리초가 0.267이고, -to값의 밀리초가 0.300이다. 두 값의 차이는 0.033이다. 1프레임(0.033)과 동일한데, 이렇게 인코딩을 하고 ffprobe로 동영상을 조회해보면 오디오 파트만 인코딩되고 비디오 파트는 인코딩되지 않았다는 걸 확인할 수 있다.


반면에 나머지는 모두 똑같은 옵션을 주고 -to값의 밀리초만 0.301로 바꿔주면 어떻게 될까? 이러면 -ss값과 -to값의 차이는 0.034가 되어 1프레임(0.033)을 초과한다. 이렇게 인코딩을 하고 ffprobe로 동영상을 조회해보면, 오디오 파트와 비디오 파트 둘 다 인코딩이 이루어졌다는 걸 확인할 수 있다.


1프레임 수준의 짧은 동영상이 필요한 일은 거의 없을 것이다. 그런데도 내가 이런 부분에 관심을 가지는 이유는... 

바로 Smart Cutter와 VideoRedo의 정확한 프레임 자르기(Frame accurate cutting) 기술을 조악하게나마 따라해보는 프로그램을 만들기 위해서다. (관련 게시물을 보려면 여기를 클릭)


그럼 이만...