데이터를 압축하고 해제하는 기술
이 과정을 통해 인터넷 등을 통해 비디오를 보다 빠르고 효율적으로 전송할 수 있음
주로 초당 전송되는 비트 수
비트레이트가 높을수록 초당 전송되는 데이터 양이 많아지며, 일반적으로 화질이나 음질이 더 좋아집니다.
비트레이트와 해상도는 서로 밀접하게 연관되어 있습니다. 해상도가 높은 비디오는 각 프레임에 더 많은 픽셀 정보를 포함하고 있기 때문에, 이를 효과적으로 처리하려면 충분히 높은 비트레이트가 필요합니다.
만약 해상도는 높지만 비트레이트가 낮다면, 비디오는 충분한 데이터를 받지 못해 픽셀화되거나, 압축 아티팩트(예: 블록 노이즈)가 발생할 수 있습니다.
반대로, 낮은 해상도에서 불필요하게 높은 비트레이트를 사용하면 데이터 사용이 비효율적일 수 있으며, 이는 파일 크기를 쓸데없이 늘리게 됩니다.
따라서, 해상도에 적합한 비트레이트를 선택하는 것이 중요합니다.
예를 들어, 1080p
해상도의 경우 일반적으로 3,000~6,000 kbps의 비트레이트가 적절하다고 여겨집니다.
이를 통해 균형 잡힌 화질과 파일 크기를 유지할 수 있습니다.
결론적으로, 비트레이트와 해상도는 서로 보완적인 관계에 있으며, 비디오의 최종 화질은 이 두 요소가 어떻게 조화를 이루는지에 크게 의존합니다.
import moviepy.editor as mp
video = mp.VideoFileClip(video_dir)
video2 = mp.VideoFileClip(video_dir2)
clips = [video, video2]
edited = mp.CompositeVideoClip(clips)
edited.write_videofile(out_fpath, codec="libx264", audio_codec="aac")
codec="libx264"
와 audio_codec="aac"
를 사용하면서 기본 설정에 따라 압축이 진행되므로 화질이 다소 저하될 수 있습니다. VideoFileClip
이나 write_videofile
함수의 기본 설정에 따라 처리됩니다. 초당 전송되는 비트 수
) 원본 비디오의 비트레이트를 유지하거나 적절히 설정하여 출력 비디오의 품질을 높일 수 있습니다.
원본 비디오의 비트레이트를 확인한 후, 이를 write_videofile
함수에 명시적으로 지정합니다.
예를 들어, 원본 비트레이트가 높은 경우, 출력 파일도 높은 비트레이트로 설정해야 합니다.
edited.write_videofile(out_fpath, codec="libx264", audio_codec="aac", bitrate="5000k")
원본 비디오의 프레임 속도를 확인하고 이를 출력 파일에도 동일하게 설정할 수 있습니다.
프레임 속도가 변경되지 않도록 주의합니다.
edited.write_videofile(out_fpath, codec="libx264", audio_codec="aac", fps=video.fps)
x264 코덱에는 화질을 향상시키기 위한 여러 고급 설정이 있습니다.
예를 들어, preset
과 tune
옵션을 사용하여 인코딩의 속도와 품질을 조절할 수 있습니다.
edited.write_videofile(out_fpath, codec="libx264", preset="slow", tune="animation", audio_codec="aac")
preset
과 tune
옵션을 통해 비디오의 인코딩 과정에서 화질과 인코딩 속도를 조절할 수 있습니다. preset
옵션은 인코딩 시간 대비 압축 효율성의 균형
을 조절합니다.
이 설정은 인코더가 비디오를 압축하는 데 사용하는 시간과 자원을 결정
합니다. preset
은 다음과 같은 값들로 설정할 수 있습니다:
ultrafast
superfast
veryfast
faster
fast
medium
(기본값)
slow
slower
veryslow
placebo
ultrafast
는 인코딩 속도가 가장 빠르지만 압축률이 낮아 파일 크기가 크고 화질이 상대적으로 낮아질 수 있습니다. veryslow
는 인코딩에 많은 시간이 소요되지만 더 나은 압축률과 화질을 제공합니다. placebo
는 거의 사용되지 않으며, 이론상 최상의 화질을 제공하지만 그에 따른 시간 증가는 실질적인 이득에 비해 크지 않습니다.tune
옵션은 특정 유형의 입력 비디오에 최적화되도록 인코더를 조정tune
설정이 가능합니다:film
- 영화 또는 다른 고화질 소스용. 약간의 노이즈나 곡물을 자연스럽게 보이게 처리합니다.
animation
- 애니메이션 비디오에 적합하게 최적화. 일반적으로 더 깨끗한 배경과 선명한 경계를 유지하도록 조정됩니다.
grain
- 곡물 효과를 유지하는 데 중점을 둡니다.
stillimage
- 정지 이미지의 긴 장면에 최적화.
fastdecode
- 빠른 디코딩이 필요한 환경(예: 스트리밍)에 유리합니다.
zerolatency
- 방송과 같이 지연 시간을 최소화해야 할 때 사용됩니다.
psnr
, ssim
- 화질 측정 기준에 따라 최적화됩니다.
예를 들어, preset
을 slow
로 설정하고, tune
을 animation
으로 설정하면, 영화나 고품질의 비디오 소스 인코딩에 최적화하여 더 나은 화질을 얻을 수 있습니다.
이 설정은 인코딩 시간이 길어지지만, 압축 효율과 화질이 향상됩니다.