나는 개발자다/실전 파이썬

유튜브 자동화 #3. 이미지와 음성 파일로 동영상 만들기

걍교쥬 2021. 11. 7. 19:37

이번 강의는 유튜브 자동화 3편으로 "Still Image 파일과 MP3 파일을 결합하여 MP4 파일을 만드는 파이썬 프로그램"을 소개한다.

 

프로그램의 전체 기능은 아래와 같다.

 

Step #1. make jpeg image from pdf file

PDF의 각 페이지를 JPEG 이미지 파일로 저장

Step #2. make mp3 file form pdf file

PDF의 각 페이지에서 텍스트를 추출하고 음성으로 변환 후(Text to speech) MP3 파일로 저장

Step #3. make mp4 by combining jpeg image and mp3 audio one by one

각 페이지별 이미지와 MP3 파일을 결합하여 MP4 파일을 생성

Step #4. make final mp4 by combining all mp4 files

각 페이지에 해당하는 MP4 파일을 순서대로 결합하여 최종 MP4 파일 생성

 

오늘은 Step #3, #4 를 파이썬으로 프로그래밍한다.

 

 

Step #1 파이썬 프로그램은 아래 페이지에서 확인 가능하다.

2021.11.01 - [나는 개발자다/실전 파이썬] - 유튜브 자동화 #1. PDF 파일의 모든 페이지를 이미지 파일로 저장하기

 

Step #2 파이썬 프로그램은 아래 페이지에서 확인 가능하다.

2021.11.03 - [나는 개발자다/실전 파이썬] - 유튜브 자동화 #2. PDF 텍스트 추출, 음성 변환, MP3 파일로 저장

 

 

 

moviepy 라이브러리를 설치한다.

 

pip install moviepy

 

moviepy는 비디오 편집을 위한 기본 작업인 잘라내기, 연결, 제목 삽입, 그리고 비디오 합성, 효과 추가 등을 할 수 있다.

 

오늘 사용할 moviepy의 모듈과 함수는 다음과 같다.

  • AudioFileClip, 
  • ImageClip, 
  • VideoFileClip, 
  • concatenate_videoclips

 

 

Still 이미지와 MP3 파일을 이용하여 MP4 파일을 생성한다.

 

    def add_static_image_to_audio(image_path, audio_path, output_path):
        """Create and save a video file to `output_path` after 
        combining a static image that is located in `image_path` 
        with an audio file in `audio_path`"""
        # create the audio clip object
        audio_clip = AudioFileClip(audio_path)
        # create the image clip object
        image_clip = ImageClip(image_path)
        # use set_audio method from image clip to combine the audio with the image
        video_clip = image_clip.set_audio(audio_clip)
        # specify the duration of the new clip to be the duration of the audio clip
        video_clip.duration = audio_clip.duration
        # set the FPS to 1
        video_clip.fps = 1
        # write the resuling video clip
        video_clip.write_videofile(output_path)

 

add_static_image_to_audio(image_path, audio_path, output_path):

 

input

  • image_path: image 파일의 전체 경로
  • audio_path: 오디오 파일의 전체 경로
  • output_path: mp4 파일을 저장할 폴더

 

jpg 파일 3개와 mp3 파일 3개의 전체 경로로 입력하면 mp4 파일 3개가 생성된다.

 

각페이지별-MP4파일-생성

 

첫 번째 mp4 파일(audiobook_test-page-000.mp4)을 확인해 보았다. 정상적으로 실행된다.

 

PDF 첫 페이지를 MP4로 변환한 결과

 

 

PDF 파일의 각 페이지에 해당하는 MP4 파일을 모두 합쳐서 하나의 MP4 파일로 붙이기

    def combine_video_files(video_list):
        video_clips = []
        for video in video_list:
            video_clip = VideoFileClip(video)
            video_clips.append(video_clip)
        final_video_clip = concatenate_videoclips(video_clips)
        final_video_path = self.data_dir + self.video_file_name + self.MP4_EXT
        final_video_clip.write_videofile(final_video_path)

 

combine_video_files(video_list)

input 

  • video_list: 결합할 MP4 파일의 리스트

 

프로그램을 실행하면 최종 MP4 파일이 생성된다.

최종-MP4파일-생성

 

 

위의 단계에서 생성된 3개의 MP4 파일을 결합하여 최종적으로 생성된 MP4 파일(audiobook_test.mp4)이다.

 

 

이상으로 PDF 파일을 동영상 파일로 자동 변환하는 파이썬 프로그램 개발을 마친다.

 

다음 작업은 실제 콘텐츠로 구글 드라이브에서 PDF 파일을 작성하고 파이썬 프로그램으로 동영상 변환 후 유튜브에 업로드할 예정이다.