안경잡이개발자

728x90
반응형

  장시간 공부 타임랩스 동영상을 찍은 뒤에 동영상의 길이를 압축하여 시간을 줄이고 싶다면 어떻게 하면 될까요? 예를 들어 동영상의 길이가 7시간인 상황에서 동영상을 정확히 3분의 시간으로 압축(빠르게 재생)하고자 하는 경우를 생각해 봅시다. 이는 간단히 생각해 보아도 동영상의 재생 속도가 100배 이상 빨라지는 것과 마찬가지의 효과를 낼 것입니다.

 

 필자는 7시간짜리 타임랩스 영상을 프리미어로 불러왔습니다. 참고로 시간을 압축한 동영상을 제작하고자 하는 경우 원래의 시간이 어느 정도인지 알기 어렵기 때문에 [시간 코드] 효과를 넣어주는 것이 좋습니다. 따라서 [효과] 탭에서 [시간 코드] 효과를 선택해 넣어주겠습니다. 이를 통해 전체 클립의 길이에서 어느 정도까지 재생되었는지 동영상 화면에 출력할 수 있습니다.

 

 

  [시간 코드] 효과를 넣은 뒤에는 화면 내 적절한 위치로 옮겨주시고, 필요하다면 오프셋(offset)을 설정하여 시간 코드의 시작 시각이 00시 00분 00초가 될 수 있도록 합니다.

 

 

  이어서 시간을 압축하고 싶다면 [속도/지속 시간] 란에 들어가서 전체 동영상 속도를 줄이면 됩니다. 프리미어 프로에서는 특정한 비율만큼 속도를 줄일 수도 있으며, 혹은 특정한 길이를 가지도록 알아서 빠르기가 조절되도록 만들 수도 있습니다.

 

 

  필자의 경우 원본 동영상의 길이가 7시간이 넘기 때문에 100배 빠르게 하여 4분가량의 길이로 압축했습니다. 필자가 사용하고 있는 프리미어 프로에서는 최대 100배까지만 빠르게 만들 수 있습니다. (최대 10000%의 속도)

 

 

  필자가 사용하고자 하는 음악 파일은 3분가량이기 때문에, 사실 4분의 길이보다 더 많이 줄여야 합니다. 그러므로 일단 100배까지만 빠르게 설정한 뒤에 동영상을 내보내기 하겠습니다. [내보내기] 창을 열어 다음과 같이 동영상을 만들어 주겠습니다. 필자의 경우 원본 동영상의 길이가 7시간이므로 [내보내기]를 수행하는 데에만 30분가량의 시간이 소요되었습니다.

 

 

  내보내기가 완료되면 빠르게 감기가 완료된 이미지를 다시 프리미어로 불러와, 다시 한번 속도를 빠르게 만들어 음악의 길이와 동일하게 맞추어 주면 됩니다.

 

 

  결과적으로 7시간짜리 동영상을 2분 45초짜리 영상으로 압축(빠르게 감기)한 영상을 제작할 수 있었습니다.

 

 

728x90
반응형

728x90
반응형

  원타임 패드(One-time Pad) 암호 시스템은 간단하면서도 강력한 암호 시스템이다. 메시지를 주고 받는 두 개체가 동일한 패드(pad)를 공유하고 있다면 중간에서 암호화된 메시지를 가로채도 복호화할 수 없다. 여기에서 중요한 점은 평문과 키의 길이는 같다는 것이다. 평문이 256 bits이라면, 키 또한 256 bits이다.

 

  암호화 및 복호화에 사용되는 공식은 다음과 같다.

 

(평문 XOR 키) XOR 키 = 평문

 

  파이썬으로 간단히 구현한 것은 다음과 같다. 아래 예시에 등장한 모든 키(key)와 평문(message)의 길이는 256 bits이다.

 

from binascii import hexlify
import random

letters = '0123456789ABCDEF'

def xor(a, b):
    length = len(a)
    result = []
    for i in range(length):
        now = int(a[i], 16) ^ int(b[i], 16) # letter -> hex -> xor
        result.append(letters[now])
    return result


print("---------- 데이터 생성 및 XOR 연산 테스트 ----------");
a = [random.choice(letters) for i in range(64)] # 256 bits
b = [random.choice(letters) for i in range(64)] # 256 bits

print(f"A = 0x{''.join(a)}") # A 출력
print(f"B = 0x{''.join(b)}") # B 출력
print(f"A xor B = 0x{''.join(xor(a, b))}") # A xor B 출력

# 암호화 함수
def encrypt(message, key):
    encrypted_message = xor(message, key)
    return encrypted_message

# 복호화 함수
def decrypt(encrypted_message, key):
    message = xor(encrypted_message, key)
    return message


print("---------- 사용 예시 1 ----------");
key = [random.choice(letters) for i in range(64)] # 256 bits
message = [random.choice(letters) for i in range(64)] # 256 bits
encrypted_message = encrypt(message, key)
decrypted_message = decrypt(encrypted_message, key)

print(f"Key = 0x{''.join(key)}") # Key 출력
print(f"Message = 0x{''.join(message)}") # Message 출력
print(f"Encrypted Message = 0x{''.join(encrypted_message)}") # 암호화 결과 출력
print(f"Decrypted Message = 0x{''.join(decrypted_message)}") # 복호화 결과 출력

print("---------- 사용 예시 2 ----------");
message = "HELLO APPLE BANANA CARROT DURIAN"
print("문자열 메시지:", message)

message = message.encode()
message = hexlify(message).decode().upper()
encrypted_message = encrypt(message, key)
decrypted_message = decrypt(encrypted_message, key)

print(f"Key = 0x{''.join(key)}") # Key 출력
print(f"Message = 0x{''.join(message)}") # Message 출력
print(f"Encrypted Message = 0x{''.join(encrypted_message)}") # 암호화 결과 출력
print(f"Decrypted Message = 0x{''.join(decrypted_message)}") # 복호화 결과 출력 

result = bytearray.fromhex(''.join(decrypted_message)).decode()
print("복호화된 문자열 메시지:", result)

 

  실행 결과는 다음과 같다.

 

 

  참고로 원타임 패드 암호 시스템은 두 개체가 서로 동일한 패드(pad)를 공유하고 있어야 한다는 점에서 현실적으로 적용하기에 어려운 점이 있다. 그리고 평문과 키의 길이가 동일해야 한다는 특징을 기억할 필요가 있다.

728x90
반응형