본문 바로가기

IT/개발

파이썬에서 ffmpeg 사용하기(ffmpeg-python, 각종 예제)

반응형

ffmpeg-python은 FFmpeg을 Python에서 사용할 수 있게 하는 파이썬 래퍼(Wrapper) 라이브러리입니다. FFmpeg은 다양한 멀티미디어 작업을 수행할 수 있는 강력한 오픈 소스 멀티미디어 프레임워크로, 오디오 및 비디오 파일의 변환, 편집, 스트리밍 등 다양한 작업을 지원합니다.

 

ffmpeg-python은 FFmpeg의 기능을 파이썬 코드로 쉽게 사용할 수 있도록 도와줍니다. 이 라이브러리를 사용하면 명령 줄 인터페이스를 직접 사용하지 않고도 Python 코드를 통해 간단하게 멀티미디어 작업을 자동화할 수 있습니다.

 

 

https://github.com/kkroening/ffmpeg-python

 

GitHub - kkroening/ffmpeg-python: Python bindings for FFmpeg - with complex filtering support

Python bindings for FFmpeg - with complex filtering support - kkroening/ffmpeg-python

github.com

 

 

ffmpeg 설치되어 있어야 합니다.

 

https://yongeekd01.tistory.com/29

 

Rocky Linux ffmpeg 설치 하기(repo 설정 포함)

Rocky Linux를 설치하면 ffmpeg Repo가 없어서 설치가 불가능합니다. 현재 시스템 정보를 확인해 보겠습니다. 기본 repo에 ffmpeg 이 있는지 확인해 봅니다. 역시 없네요. yum install ffmpeg yum search ffmpeg 1. ffmp

yongeekd01.tistory.com

 

 

Python 패키지 관리자 도구인 pip를 사용하여 ffmpeg-python 패키지를 설치합니다.


> pip3 installffmpeg-python

 

 

 

ffmpeg으로 할 수 있는일 은 수도 없이 많지만 여기서는 몇가지 사용 예제만 테스트 해보겠습니다. 

물론 filter 들은 동시에 여러개를 사용해도 상관 없습니다. 

 

import ffmpeg

#중앙 크롭
def crop_video(input, output) :
    ffmpeg.input(input).output(output, vf='crop=320:240').run()

#확장자로 자동 변경
def format_video(input, output) :
    (
        ffmpeg
        .input(input)
        .output(output)
        .run()
    )

#시작위치 및 시간으로 잘라내기    
def trim_video(input, output, start, duration):    
    (
        ffmpeg
        .input(input, ss=start, t=duration)
        .output(output)
        .run()
    )

#동일한 이름의 파일이 있으면 엎어쓰기    
def overwrite_video(video_path, output, start, duration):        
    (
     ffmpeg
     .input(video_path, ss=start, t=duration)
     .output(output, y='-y')
     .run(overwrite_output=True)
    )

#프레임 모두 저장
def extract_frame(input, output_folder):
    (
        ffmpeg
        .input(input)
        .output(output_folder + 'frame_%04d.png')
        .run()        
    )

# 새로운 resolution으로 사이즈 변경
def rescale_video(video_path, output, width, height) :        
    (
        ffmpeg
        .input(video_path)            
        .filter('scale', width, height)            
        .output(output, format='mp4', pix_fmt='rgb24')
        .run()
    )    

# 비디오 1초당 프레임 수 변경
def fps_video(video_path, output, newfps) :      
    (
        ffmpeg
        .input(video_path)
        .filter('fps', fps=newfps)                                    
        .output(output, format='mp4', pix_fmt='rgb24')
        .run()
    )    

#비디오 정보 가져오기    
def get_size_info(input)     :
   
    probe = ffmpeg.probe(input)  # 입력 파일의 정보를 가져옴
    video_stream = next((stream for stream in probe['streams']
                            if stream['codec_type'] == 'video'), None)  # 비디오 스트림 정보를 가져옴
    width = int(video_stream['width'])  # 비디오의 가로 크기를 가져옴
    height = int(video_stream['height'])  # 비디오의 세로 크기를 가져옴
    print(f"video resolution : {width} x {height}")
    return height, width


#테스트
if __name__ == '__main__':    
    crop_video('myVideo.TS', 'myVideo.crop.TS')
    format_video('myVideo.TS', 'myVideo.crop.mp4')
    trim_video('myVideo.TS', 'myVideo.cut.ts', "00:00:05", "00:00:03")
    overwrite_video('myVideo.TS', 'myVideo.cut.ts', "00:00:05", "00:00:03")
    extract_frame('myVideo.TS','frames')
    get_size_info('myVideo.TS')
    rescale_video('myVideo.TS', 'myVideo_rescale.mp4', 1280, 720 )
    fps_video('myVideo.TS', 'myVideo_fps10.mp4', 10)    
   
   
   

 

유용하게 사용할 수 있습니다. ^^

반응형