예토전생

Yt-dlp를 이용한 라즈베리파이 프로젝트 -1-

yongsa0221 2024. 9. 2. 16:27

본 프로젝트는 라즈베리파이와 java, python을 사용하여 진행한 프로젝트이다

 

 

프로젝트의 목표는

라즈베리 파이를 사용하여 선인장 장난감을 제어하고 음악 재생하기

이다.

 

음악재생하기

 음악을 재생하기 위해서는 먼저 음원이 필요하다. 여러가지 저작권 문제가 있을수도 있겠지만 프로젝트 내에서는 유튜브에 올라와있는 영상의 음원을 추출해서 사용하기로 한다.

https://tamerlan.dev/how-to-create-a-youtube-mp3-player-using-python/

 

 현재 pafy 및 youtube-dl 이 제대로 동작하지 않는듯 보인다.

youtube-dl은 업데이트를 종료하였고 pafy는 youtube-dl에 의존성이 너무 강하여 사실상 이것도 사용이 불가능하다.

yt-dlp 라이브러리를 사용하였다.

https://github.com/yt-dlp/yt-dlp

 

yt-dlp가 python라이브러리이기 때문에 프로젝트 초기에는 python을 사용하여 진행하였다.

 

 

FFmpeg

ytdlp 라이브러리에서 오디오를 추출하기 위해선 ffmpeg을 필요로 한다.

Postprocessing: ffprobe and ffmpeg not found. Please install or provide the path using --ffmpeg-location

pip 로 ffmpeg을 설치해도, ffmpeg for windwos 를 다운받아 윈도우 환경변수에 추가해도 오류가 계속 난다.

 

ydl_opts = {
        'format': 'm4a/bestaudio/best',
        # ℹ️ See help(yt_dlp.postprocessor) for a list of available Postprocessors and their arguments
        'postprocessors': [{  # Extract audio using ffmpeg
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'm4a',
        }],
        'outtmpl': OUTPUT_DIRECTORY + '%(title)s.%(ext)s',
        '--ffmpeg-location': 'C:/Users/yongs/ffmpeg-2023-11-20-git-e56d91f8a8-full_build/bin'
    }

 

옵션에서‘—ffmpeg-location’ : <ffmpeg bin dir> 으로 넣어주어도 같은 오류가 반복됨

yt_dlp.postprocessor.FFmpegPostProcessor._ffmpeg_location.set(R'C:/Users/yongs/ffmpeg-2023-11-20-git-e56d91f8a8-full_build/bin')

아예 직접 set함수를 통해 설정했더니 잘 된다. 원인은 잘 모르겠음

 

 

VLC를 사용할 필요가 있을까?

이제 오디오 추출까지 완료했다

어차피 오디오 파일만 재생할건데 리소스를 많이 먹는 비디오 플레이어를 통해 재생할 필요가 있을까?

 

pygame 라이브러리를 사용해보자

m4a 지원이 안됨 → wav로 저장하였다

 

 

문제점

플레이어가 동작 하는 동안에도 음성을 인식 할 수 있어야 한다.

즉 두가지의 프로세스를 만들어야 하는 것인가?

IPC를 통하여 구현해야 하나? python으로?

IPC를 사용하면 오버헤드가 너무 클 것같다. python이기도 하고 IPC를 할 자신도 없다.

 

순수 python프로젝트에서 java + python 환경으로 개발 방향을 바꾸도록 해야겠다.

더이상 python 못쓸 것 같다. 잘 모르기도 하고...

 

결론

python → nltk를 사용한 음성인식 및 status 추출, ytdlp를 사용하여 음성 추출

java → 그 외 모든 것

java로 멀티 프로세싱을 하면 실력도 늘려나…