| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- null오류
- EKS
- LLM
- 파이썬
- moviepy
- 노드그룹
- moviepy2
- vivecoding
- EC2
- 도커컨테이너
- VPC
- Python
- 생성형AI
- ffmpeg
- efs
- agentic
- AWS
- 영상자동화
- 파이썬영상
- 옵셔널체이닝
- ffprobe
- docker
- truncate비교
- mysql성능
- delete비교
- 파이썬영상편집
- subprocess
- 파이썬이미지
- lambda
- 파이참
- Today
- Total
씩씩한 개발자
FFmpeg python사용 예제 모음집 (subprocess) 본문

안녕하세요. 씩씩한 개발자입니다🔥
최근 python에서 ffmpeg 을 사용하는 일이 많아졌어요 ㅎㅎ
특히 Lambda 에서 GUI 없이 영상이나 오디오를 처리할 때 ffmpeg는 사실상 거의 유일한 방법이더라구요.
이 글에서는 제가 실제로 사용 중인 방식인 subprocess + ffmpeg 직접 호출 방식을 설명하고,
그 외에도 다양한 멀티미디어 처리 실전 예제를 Python 코드로 공유하고자 해요.
1. 기본 구조: ffmpeg subprocess 직접 호출
아래는 제가 실제로 python 에서 사용하고 있는 오디오 속도 조절 함수입니다.
AWS Lambda 환경에서 /mnt/efs/lambda/ffmpeg 경로에 ffmpeg 바이너리를 두고 subprocess 로 직접 호출하는 구조입니다.
제가 ffmpeg를 사용하는 방식은 subprocess를 이용한 직접 호출입니다.
def speed_up_audio(input_path, output_path, speed=1.4):
ffmpeg_path = "/mnt/efs/lambda/ffmpeg"
command = [
ffmpeg_path,
"-i", input_path,
"-filter:a", f"atempo={speed}",
"-vn",
output_path
]
subprocess.run(
command,
check=True,
executable=ffmpeg_path,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL
)
-filter:a atempo=1.4: 오디오 속도를 1.4배로 조절-vn: 비디오 트랙은 제거. (오디오만 남김)stdout/stderr: 콘솔 출력 없이 조용히 실행되도록 DEVNULL 처리executable=ffmpeg_path: 명시적으로 실행파일 경로 지정 (권한 필요)
* subprocess 방식을 쓰는 이유
Python용 래퍼 라이브러리인 ffmpeg-python도 있지만, 실제 서버나 Lambda 환경에서는 직접 명령어를 구성해서 실행하는 방식이 훨씬 간단하고 안정적입니다. 그래서 subprocess 라이브러리를 사용하는거죠!
- 직접 명령어를 쓸 수 있음: 공식 문서나 Stack Overflow 예제를 그대로 가져와 사용할 수 있음.
- 복잡한 필터도 자유롭게 조합: drawtext, crop, scale, atempo 같은 필터도 그대로 조립 가능.
- 오류 추적이 쉬움: stderr를 바로 확인해서 어떤 문제가 발생했는지 로그를 통해 알 수 있음.
- 배포가 쉬움: ffmpeg 실행파일 하나만 있으면 되니 pip 설치 없이 Lambda에서도 사용 가능.
subprocess를 쓰면 특히 AWS Lambda 또는 권한 제한이 있는 서버 환경에서 효과적으로 사용할 수 있고, ffmpeg를 패키지화하지 않고 바이너리 파일을 업로드한 상태에서도 처리 가능합니다.
2. ffmpeg + Python 실전 예제 모음
2.1 오디오 자르기
def cut_audio(input_path, output_path, start="00:00:10", duration="00:00:05"):
command = [
"ffmpeg", "-ss", start, "-t", duration,
"-i", input_path, output_path
]
subprocess.run(command, check=True)
2.2 영상에서 오디오 제거
def remove_audio(input_path, output_path):
command = [
"ffmpeg", "-i", input_path,
"-c", "copy", "-an", output_path
]
subprocess.run(command, check=True)
2.3 영상 배속 조절
def speed_up_video(input_path, output_path, speed=2.0):
pts_factor = 1 / speed
command = [
"ffmpeg", "-i", input_path,
"-filter:v", f"setpts={pts_factor}*PTS",
output_path
]
subprocess.run(command, check=True)
2.4 텍스트 오버레이
def overlay_text(input_path, output_path, text):
command = [
"ffmpeg", "-i", input_path,
"-vf", f"drawtext=text='{text}':x=10:y=10:fontsize=24:fontcolor=white",
output_path
]
subprocess.run(command, check=True)
2.5 자막 삽입 (SRT)
def burn_subtitles(input_path, subtitle_path, output_path):
command = [
"ffmpeg", "-i", input_path,
"-vf", f"subtitles={subtitle_path}",
output_path
]
subprocess.run(command, check=True)
3. 마무리
2년 전 쯤... 처음 ffmpeg을 접했을 땐 진짜 무슨 말인지 하나도 모르겠었어요....
다 영상, 음성 등 멀티미디어 관련 전문적인 용어인 것 같고..
사실 지금도 모르는 게 많지만, 쓰다 보니 조금은 감이 오더라고요..(?아마도)
처음엔 다른 더 쉬운 방법 없나.. 했지만
영상, 오디오, 자막 같은 미디어 파일을 자동으로 처리해야 할 때는 ffmpeg이 거의 유일한.. 툴이에요...ㅎㅎㅎ
ffmpeg으로 mp3 음성 속도 조절, 자막 Burn-in, 해상도 조절, mp4 인코딩 등 다양한 곳에 아주 유용하게 사용하고 있습니다.
거의 AWS Lambda에서 쓰는데요,
/mnt/efs에 ffmpeg 바이너리 실행파일만 올려두고 subprocess로 실행하면 별도 설치 없이도 잘동작합니다.
이 바이너리 파일 올리는 방법 찾는데도 꽤나 애를 먹었어요. 자세한 방법은 아래 포스팅 참고해 주세요~
https://strongdev.tistory.com/8
Lambda에서 대용량 실행파일 사용하는 방법: FFmpeg 예제 (EFS,EC2)
안녕하세요. 씩씩한 개발자입니다🔥 오늘은 AWS Lambda에서 ffmpeg을 사용하려고 하다가 Layer로 올리는데 실패한 후..EFS를 이용해서 ffmpeg을 사용한 방법에 대해서 공유해 드리려고 해요! Lambda 용량
strongdev.tistory.com
'Python' 카테고리의 다른 글
| MoviePy 2.x 버전 업그레이드 내용 | 영상 생성 프로젝트 적용 사례 (3) | 2025.06.02 |
|---|---|
| 파이썬에서 FFmpeg 실행 시 Timeout 오류 해결 방법 (0) | 2025.05.31 |
| FFmpeg, FFprobe 설치하기 (0) | 2025.04.27 |
| Pycharm 파이참 콘솔 실행 단축키 설정하기 (0) | 2025.04.04 |
| window/ moviepy, imageMagick 설치 (1) | 2025.01.19 |