빠른 설정에 있는 프레임 레이트 변경이랑 필터설정에 있는 fps, framerate는 뭐가 다른건가요?
빠른 설정에서 프레임 레이트 변경으로 60맞추고 인코딩 해봣는대 동영상을 재생해보니 24프레임으로 안바뀌어있고
또 따로 필터 설정에서 fps를 60으로 맞추니까 60프레임이 되더라구요, 그래서 이번엔 필터에서 fps를 없애고 framerate를 60으로 줘봤는대 이것도 60프레임으로 인코딩이 되더라구요.
필터 설정의 fps와 framerate는 뭐가 다른건가요? 또, 프레임 레이트 변경으로 프레임이 변경되지 않던대 이건 왜 그런건가요?
빠른 설정의 '프레임 레이트 변경'은 FFmpeg의 '-r' 옵션과 같은 겁니다. 그리고 '-r'은 필터 'fps'와 같습니다. 프레임들을 목표 프레임 레이트에 맞춰서 복사(duplicate)하거나 생략(drop)하는 거죠. FFmpeg의 해당 문서를 참고하시면 자세히 알 수 있습니다.
그리고 'framerate' 필터는 단순히 복사/생략하는 게 아니라 단순하긴 하지만 어느 정도 알고리듬이 들어갑니다. 그래서 'duplicate'이나 'drop'이 아닌 'interpolate(보간)'한다고 합니다. 목표 프레임 레이트가 원본보다 높을 경우 중간에 앞뒤 프레임들의 평균 프레임(잔상)을 끼워넣는 식이죠. 그래서 프레임 더블링에 이걸 사용하면 프레임 레이트는 늘어날지 몰라도 잔상은 필연적으로 남는 것입니다. 이건 해당 필터의 알고리듬이 단순하기 때문에 일어나는 당연한 현상입니다. 이것 역시 해당 문서를 참고하십시오.
(그래서 'framerate'의 알고리듬을 개선한 게 'minterpolate' 필터입니다. 이건 보간(interpolate)을 하되 움직임을 고려해 보정하는(motion compensated) 식이니까요.)
그럼 '-r'과 'fps' 필터가 같은데 왜 '-r'의 경우엔 프레임 레이트가 안 바뀌는 경우가 생기느냐?
FFmpeg에서는 명령어에 우선 순위를 두어서 적용합니다. 제가 알기론, input을 지칭하는 '-i' 옵션 이전의 옵션들이 가장 우선되고, 그 다음이 필터들, 그 다음이 코덱들 고유의 옵션들(private options,-x265-params 같은 고급 설정들), 그 다음이 일반 옵션들(generic options 또는 global options)입니다. 물론 필터들도 먼저 오는 쪽이 우선됩니다. 그리고 코덱 고유 옵션들도 나름 우선 순위가 각각 코덱들마다 있죠. 프로파일이 가장 우선되고, 레벨이 그 다음, 따로 추가한 고급 설정이 그 다음, 프리셋이 그 다음... 이런 식입니다. (이건 코덱들마다 달라서 각 코덱 매뉴얼을 참고해야 합니다.)
'-r' 같은 일반 인코딩 옵션의 경우 그 이전 우선 순위의 옵션들과 충돌하면 무시됩니다. (sphinx1님의 경우 그게 왜 무시됐는지 알 수는 없지만요.) 그래서 반드시 꼭 강제하고 싶은 옵션이 있다면 필터로 넣으시는 게 좋습니다.