Python에서 ffmpeg 를 사용할 때에는 여러 주의점이 있습니다.

본 글은 windows 환경에서의 ffmpeg 사용 tip입니다.

 

1. Python Code 실행 경로에 반드시 ffmpeg 파일 존재.

pip install ffmpeg

 위 명령어를 이용해 ffmpeg를 설치하고 Python Code를 실행하셔도 ffmpeg가 존재하지 않는 다는 식의 에러가 발생 할 것입니다. 이와 같은 문제를 해결하기 위해서는 현재 실행할 .py파일과 같은 경로상에 ffmpeg.exe 파일이 존재하여야 합니다.

 

2. Log level 조정.

ffmpeg -loglevel "error" -i (input) ...

    "quiet"
    "panic"
    "fatal"
    "error"
    "warning"
    "info"
    "verbose"
    "debug"

loglevel을 통해 ffmpeg 실행 중에 표시되는 로그의 자세한 정도를 조절 할 수 있습니다.

 

3. Command 창 실행 안되게 하기.

Python Code 상에서 ffmpeg를 사용하는 것은 나의 코드가 ffmpeg 프로그램을 실행시켜서 처리하는 작업입니다.

그렇기 때문에, 실행환경에 따라서 Command창이 자동으로 생성될 수 있습니다.

 특히, pyinstaller 등을 통해서 GUI가 포함된 exe파일을 생성하였는데, 불필요한 Command 창이 실행된다면 매우 난감한 상황이 벌어지게 됩니다.

 

ffmpeg -hide_banner

위 옵션을 통해 해결된다면 좋겠지만, 그렇지 않다면

pip 를 통해 설치한 ffmpeg 패키지 코드를 수정해야 합니다.

ffmpeg package 폴더로 이동 (eg, python_path/site_pakages/ffmpeg)

"_run.py" 열기

"def run_async" 찾기

run_async 함수의 return 부분에 creationflags 옵션 추가

return subprocess.Popen(
        args, stdin=stdin_stram, stout=stout_stream, stderr=stdderr_stream, creationflags=0x08000000
    )

위와 같은 작업을 통해서 command 창 생성을 막을수 있습니다.

'Python' 카테고리의 다른 글

Python 파일 실행 옵션 만들기  (0) 2020.08.18
Python FTP 활용하기  (0) 2020.08.08
Posted by EnergyCastle
,

01. 간단 예제

 

Python 코드를 작성하고, 실행할 때 각종 변수에 해당하는 값들을 바꿔가며 실행해야 될 경우가 있습니다.

 

혹은 외부 프로그램이 내 파이썬 코드를 실행한다고 하면, 상황에 맞게 마치 함수처럼 내 코드 전체를 실행하고 싶을 수 있습니다.

 

Python 에서는 이러한 상황에서  argparse를 이용해서 간편하게 실행할 때 입력해 줄 수 있는 옵션을 지정 할 수 있습니다.

argparse 예제 - 1

 

위와 같이 argparse를 통해 파이썬 실행시 입력되는 문자열을 파싱하여 그 값을 읽어오고 코드 내부에서 사용할 수 있습니다.

 

argparse 예제 - 1 실행결과

argparse를 이용하면 이렇게 쉽게 실행 옵션을 삽입 할 수 있습니다.

특히, 프로그램을 실행하는 과정에서 주고받는 데이터가 저장되는 경로나 출력이 저장될 경로는 수시로 바뀔 수 있기 때문에 옵션으로 처리해두면 추후에 변경사항에 대해서 유연하게 대처하기 쉬워집니다.

이 외에도, 중요 함수들의 입력값을 미리 옵션으로 처리해두면 코드를 변경하지 않고, 함수에 입력 값들을 변경하면서 사용 가능합니다.

 

02. 옵션으로  list 처리하기

'str', 'int', 'float' 등의 자료형 이외에 리스트를 입력으로 넣고 싶은 경우가 많습니다.

하지만 type에 list를 입력하고, 실제 실행할 때 리스트 형태의 입력을 던져주면 에러가 발생합니다.

argparse 예제 - 2
default 값에선 인식하는데 실제 옵션으로 사용하면 error 발생!?

 

list 를 입력으로 받기 위해서는 추가로 nargs='+'라는 옵션이 필요합니다.

 

argparse 예제 - 2 수정
옵션으로 list 사용하기

 

type을 그대로 list로 두고 nargs='+'를 넣으면, 연속된 숫자를 하나의 행으로 하는 리스트 타입이 만들어 지기도 합니다.

 

type=list, nargs='+'
띄어쓰기를 통해 행을 구분

 

알아두시고 상황에 따라 적절하게 사용하시면 좋을 것 같습니다.

 

마지막으로 list를 사용하는 부분에 관련하여 참고한 링크를 첨부합니다.

https://stackoverflow.com/questions/15753701/how-can-i-pass-a-list-as-a-command-line-argument-with-argparse

 

How can I pass a list as a command-line argument with argparse?

I am trying to pass a list as an argument to a command line program. Is there an argparse option to pass a list as option? parser.add_argument('-l', '--list', type=list, acti...

stackoverflow.com

 

감사합니다.

'Python' 카테고리의 다른 글

[Python] ffmpeg 커맨드창 실행 안되게 하는 방법  (0) 2020.10.26
Python FTP 활용하기  (0) 2020.08.08
Posted by EnergyCastle
,

Python FTP 활용하기

Python 2020. 8. 8. 09:27

Python에서는 간단한 방법으로 FTP에 접속해서 데이터를 다운로드 받고 혹은 업로드 할 수 있습니다.

 

바로,

ftplib 라는 라이브러리를 활용하는 방법 입니다.

 

ftplib 사용법

import ftplib

ftp = ftplib.FTP()
ftp.connect(host='ftp ip address', port=21)
ftp.login(user='user_id', passwd='user_pw')


# Download 받을 파일을 wb(write binary) mode 로 열어줍니다.
download_file = open('file.dat', 'wb')


# RETR은 FTP 명령어로 다운로드 받기 위한 명령어입니다.
ftp.retrbinary('RETR /file_path', download_file)


# Download가 완료되면 파일을 닫습니다.
download_file.close()


# Upload 받을 파일을 rb(read binary) mode 로 열어줍니다.
upload_file = open('file.dat', 'rb')


# STOR은 FTP 명령어로 업로드 하기 위한 명령어입니다.
ftp.storbinary('STOR /file_path', upload_file)


# Upload가 완료되면 파일을 닫습니다.
upload_file.close()

위와 같이 간단하게 FTP에 접속하여 파일을 다운로드 받거나 업로드 하는 기능을 구현할 수 있습니다!

 

 

FTP login 상황에서 id와 pw가 정확하지만 로그인이 안된다면,

FTP 서버 측에서 설정을 확인해 보시기 바랍니다.

 

ftp.retrbinary 혹은 ftp.storbinary가 550 fail error가 발생할 경우 FTP에 접속하는 계정이 경로를 접근하는데 문제가 있을 수 있습니다. FTP 서버에서 경로 접근 권한에 대한 부분을 확인해 주세요.

 

Python에서 FTP로 접속하고, 파일 다운로드 및 업로드하는 기능을 구현하는 건 매우 쉽습니다.

다소 어려운 문제는 사실 FTP 서버를 구축하는 일이라고 생각됩니다.

 

https://energycastle.tistory.com/4

 

Linux(Ubuntu) FTP server 구축하기

Ubuntu 18.04 버전을 중심으로 작성한 문서입니다. 처음으로 FTP 서버를 구축해보면서 몇가지 시행착오를 겪으며 최종 정리를 하겠습니다. 우선 vsftpd를 이용하면 간단하게 FTP 환경을 구성하고 설정

energycastle.tistory.com

Ubuntu에서 FTP 서버를 구축하는 법에 대해서는 제가 간단하게 정리해놓은 글이 있습니다.

해당 글을 보면서 차근차근 해보시면 어렵지 않게 FTP 서버를 만들고 Python으로 파일을 주고 받을 수 있을 것 입니다.

'Python' 카테고리의 다른 글

[Python] ffmpeg 커맨드창 실행 안되게 하는 방법  (0) 2020.10.26
Python 파일 실행 옵션 만들기  (0) 2020.08.18
Posted by EnergyCastle
,