본문 바로가기

동영상 지식/avisynth 스크립트

1080i 소스에서 24프레임 프로그래시브로 뽑아내는 법.


(원본크기로 보세요)


가끔가다 보면 이와같이 실제 24fps 뮤비가 1080i 인터레이스 영상에 들어있는 경우가 있습니다.

그런데 이와 같은 경우, 24프레임이 탑바텀 전부 손실 없이 영상안에 다 들어 있기 때문에 디인터레이스 필터를 써줄 필요가 없어요.

이런 영상을 탑바텀이 부족하다고 판단하여 그부분을 임의로 채워넣게 되는 디인터레이스 필터를 사용해서 디인터레이스를 해줄 경우

화질 손해에요. 이상한 아티팩트도 생기고요.


그래서, 인터레이스 영상에서 24프레임을 고스란히 뽑아내는법 두가지를 알려드릴게요.


1. 기본 필터로만 원리와 과정을 이해하는 정공법. 매우 빠른 속도. 연산이 없음.

2. 외부 필터만 간편하게 갖다 쓰는법. 비교적 빠른 속도. 연산이 좀 필요함


1번 따위 관심 없고 2번을 원하시는 분은 그냥 1번은 스킵하시면 됩니다.


1.

avs 스크립트를 주석을 달아 작성해보았습니다. 최대한 자세히 설명해놨어요.

스샷에 나온 소스를 예를 들어 설명하겠습니다.

Source("[MV] Girls' Generation - Beep Beep 1080i JPN AVC LPCM-JoSepHC.m2ts") AssumeTFF() #이건 탑필드 먼저 오는 인터레이스 파일임을 avs에게 알려줍니다. SeparateFields() #탑필드->바텀필드->탑필드->바텀필드 순으로 1920*540의 60fps으로 영상 변환.

Trim(*,last.framecount)

#새로운 프레임이 0프레임이 아닐경우 Trim하여 0프레임에 오게합니다. SelectEvery를 편하게 하기 위함입니다.

SelectEvery(10,0,1,3,4,5,6,7,8) #10프레임마다 위 프레임들을 뽑아줍니다. #[0,1 동일 장면] 0번 프레임이 탑, 1번 프레임이 바텀 #[2,3,4 동일 장면] 3탑, 4바텀 (2번 프레임은 바텀이고 4번과 동일해서 버렸습니다.) #[5,6] 5탑, 6바텀 #[7,8,9] 7탑, 8바텀 (9번 프레임은 탑이고 7번프레임과 동일해서 버렸습니다.) #이렇게 10프레임에서 2개 프레임을 버리고 탑바텀 짝을 짓는 8개 프레임만 보존합니다. #즉 60/10*8이 되서 48프레임이 되었습니다. Weave() #이제 탑과 바텀을 합쳐서 1920*1080으로 만들어줍니다. #탑과 바텀 두 프레임을 한 프레임으로 합치니 48/2해서 24fps가 되었습니다.

AssumeFrameBased()

#이것이 더 이상 인터레이스 파일이 아닌 프로그래시브 파일임을 avs에게 알려줍니다.

여기서 제일 중요한 부분은 SelectEvery를 영상에 맞춰 수동으로 작성해줘야 한다는 것인데

그부분에 대해 더 자세히 설명드릴게요.

일단 SelectEvery나오기 전까지 작성을 하신 뒤 아무곳이나 보기 좋은 *0 프레임으로 가세요.

1110프레임도 되고 9990도 됩니다. 만약 1110프레임을 골랐다면

1110~1119이렇게 10장의 프레임을 분석할건데요.

0부터 AVSP에서 프레임을 한장 한장 넘겨봅니다.

그러면 탑이랑 바텀 두장씩 같은 장면이 나오는데

0,1이같은장면 2,3이 같은 장면일경우 합격 통과.

2장씩 나오다가 갑자기 3장이 같은 장면이 나올때가 있을거에요

그러면 그 3장중에 탑바텀 짝을 짓고 남는 프레임이 있을거에요. 그럼 그 프레임을 기억합니다.

4,5,6이 한장면인데 4,6이 둘다 바텀이거나 둘다 탑일경우 6을 기억하세요.

그런식으로 두장의 프레임을 찾으셨으면 맞는겁니다.

그다음 0~9중에 그 기억한 숫자 두개를 빼서 써주시면 됩니다. 6과 8이었으면

SelectEvery(10,0,1,2,3,4,5,7,9) 이런식으로 해주시면 되겠습니다.


복잡해 보인다구요?

간단히 말하자면 그냥 10프레임중 중복되는 2개만 찾으면 된다는 거에요.



2.

TFM().TDecimate()

끝.

필터다운: http://avisynth.nl/index.php/TIVTC or TIVTCv105.zip




결과물

(원본크기로 보세요)