- Python 34.1%
- JavaScript 29.8%
- HTML 19.3%
- CSS 16.8%
| data/presets | ||
| engine | ||
| log | ||
| route | ||
| tool | ||
| view | ||
| .gitignore | ||
| conf.py | ||
| LICENSE | ||
| README.md | ||
| requirements.txt | ||
| server.py | ||
FFmpeg Studio
FFmpeg Studio는 로컬 미디어 파일을 분석하고 인코딩할 수 있는 FFmpeg 웹 UI입니다. 서버가 실행되는 컴퓨터의 파일 시스템을 탐색하고, FFmpeg/ffprobe에서 확인한 코덱과 스트림 정보를 바탕으로 여러 파일의 인코딩 설정과 진행 상태를 한 화면에서 관리합니다.
주요 기능
- Linux/macOS의 홈 디렉터리와 Windows 드라이브를 지원하는 서버 측 파일 브라우저
- 파일 단일 선택, 폴더 전체 선택 및 하위 폴더 재귀 탐색
- ffprobe를 이용한 컨테이너, 영상, 음성, 자막 및 데이터 스트림 정보 표시
- 설치된 FFmpeg의
ffmpeg -codecs결과를 이용한 코덱 목록 제공 h264,msvideo1같은 코덱 코드와 설명을 검색할 수 있는 입력 메뉴- 영상, 음성, 데이터 설정 탭과 원본 스트림 유무에 따른 탭 자동 비활성화
- 영상 CRF/CBR/VBR, 해상도, 종횡비, 프레임레이트, 색공간, 스케일 알고리즘 및 추가 필터 설정
- 지원 인코더의 Preset과 Tune 옵션 자동 확인
- 음성 채널, 비트 수, 비트레이트, 샘플 레이트 및 추가 필터 설정
- 원본 자막/데이터 제거와 외부 자막 또는 데이터 업로드
- 원본 폴더 또는 별도 출력 폴더 선택, 출력 컨테이너와 파일명 접미사 설정
- Video CD와 DVD Video 기본 프리셋 및 사용자 프리셋 저장
- 파일별/전체 진행률, 처리 속도, 오류 정보 및 개별/전체 취소
- 인코딩 설정과 대기열을 분리한 화면, 새로고침 후 진행 작업 복원
- 시스템 설정/라이트/다크 테마
- 사용자 지정 FFmpeg 경로와 동시 처리 파일 수 설정
요구 사항
- Python 3.10 이상
- FFmpeg와 ffprobe
- 최신 데스크톱 웹 브라우저
FFmpeg와 ffprobe가 시스템 PATH에 등록되어 있는지 먼저 확인합니다.
ffmpeg -version
ffprobe -version
FFmpeg를 별도 위치에 설치했다면 앱 실행 후 우측 상단의 설정에서 FFmpeg 실행 파일을 선택할 수 있습니다. 사용자 지정 FFmpeg와 같은 디렉터리에 있는 ffprobe를 우선 사용하며, 없으면 시스템 PATH에서 찾습니다.
설치
Linux/macOS
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
Windows PowerShell
py -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
실행
프로젝트 루트에서 다음 명령을 실행합니다.
python server.py
기본 설정에서는 서버가 http://127.0.0.1:10000/에서 시작되고 약 1초 후 기본 브라우저가 자동으로 열립니다. 브라우저가 열리지 않으면 해당 주소로 직접 접속합니다.
Linux/macOS에서 python 명령이 제공되지 않는 경우 python3 server.py를 사용합니다. 서버는 Ctrl+C로 종료할 수 있습니다.
서버 설정
서버 시작 옵션은 conf.py에서 변경합니다.
| 옵션 | 기본값 | 설명 |
|---|---|---|
listen_host |
"127.0.0.1" |
Waitress가 수신할 주소 |
listen_port |
10000 |
웹 서버 포트 |
OPEN_BROWSER |
True |
서버 시작 시 기본 브라우저 자동 실행 |
BROWSER_OPEN_DELAY |
1.0 |
브라우저를 열기 전 대기 시간(초) |
예를 들어 브라우저 자동 실행을 끄려면 다음과 같이 설정합니다.
OPEN_BROWSER = False
사용 방법
- 파일 선택 또는 폴더 선택을 눌러 원본을 추가합니다. 폴더 브라우저의 해당 폴더 선택을 사용하면 현재 폴더의 지원 미디어 파일을 한 번에 불러옵니다.
- ffprobe 분석이 끝나면 왼쪽에서 파일과 스트림 정보를 확인합니다.
- 영상, 음성, 데이터 탭에서 코덱과 세부 옵션을 지정합니다. 코덱을
copy로 선택하면 해당 스트림의 재인코딩 옵션은 비활성화됩니다. - 출력 컨테이너, 파일명 접미사 및 대상 디렉터리를 선택합니다.
- 인코딩 시작을 누른 뒤 대기열 탭에서 파일별/전체 진행률을 확인합니다.
처리는 대기열에 추가된 순서대로 시작합니다. 기본값은 한 번에 1개 파일이며, 우측 상단 설정에서 1–8개로 변경할 수 있습니다. 이 설정은 data/config.json에 저장됩니다.
페이지를 새로고침하면 서버 메모리에 남아 있는 진행 작업을 다시 불러오고 폴링을 재개합니다. 작업 이력은 파일에 영구 저장되지 않으므로 서버 프로세스를 종료하거나 재시작하면 복원되지 않습니다.
출력 파일 주의사항
- 원본 폴더에 출력할 때는 원본 덮어쓰기를 방지하기 위해 파일명 접미사를 비워 둘 수 없습니다.
- 접미사 없이 출력하려면 원본과 다른 대상 디렉터리를 선택해야 합니다.
- 같은 이름의 출력 파일이 이미 있으면
_2,_3과 같은 번호를 자동으로 붙입니다. - 사용할 수 있는 컨테이너와 코덱의 조합은 설치된 FFmpeg 빌드에 따라 달라집니다.
Preset과 Tune
영상 코덱을 선택하면 ffmpeg -h encoder=<인코더>를 이용해 Preset과 Tune 지원 여부를 확인합니다. 지원하는 인코더에서만 값을 지정할 수 있으며, H.264/H.265 계열에서는 ultrafast부터 placebo까지의 프리셋과 film, animation 등의 Tune을 검색할 수 있습니다.
기본 제공 프리셋은 다음과 같습니다.
- Video CD (NTSC)
- DVD Video (NTSC)
현재 설정은 UI에서 사용자 프리셋으로 저장할 수 있습니다. 기본 프리셋은 삭제할 수 없습니다.
데이터 디렉터리
| 경로 | 내용 |
|---|---|
data/config.json |
FFmpeg 실행 경로와 동시 처리 파일 수 |
data/presets/*.json |
기본 및 사용자 인코딩 프리셋 |
data/uploads/ |
인코딩에 추가하기 위해 업로드한 자막/데이터 파일 |
외부 자막과 데이터 업로드는 파일당 최대 200MB입니다.
프로젝트 구조
.
├── conf.py # 버전 및 웹 서버 시작 설정
├── server.py # Waitress 실행 진입점과 라우트 로딩
├── engine/
│ ├── config_store.py # data/config.json 관리
│ ├── media.py # ffprobe, FFmpeg 명령 및 작업 대기열
│ └── server.py # Flask 애플리케이션
├── route/ # 화면과 JSON API 라우트
├── view/
│ ├── html/index.html # 메인 화면
│ ├── css/base.css # 테마와 레이아웃
│ └── js/app.js # UI 상태 및 API 연동
└── data/presets/ # 인코딩 프리셋
보안
이 애플리케이션은 서버가 실행되는 컴퓨터의 파일 시스템을 탐색하고 FFmpeg 프로세스를 실행합니다. 인증 기능이 없으므로 기본값인 127.0.0.1 바인딩으로 개인 컴퓨터에서 사용하는 것을 권장합니다. listen_host를 0.0.0.0 등으로 변경해 다른 장치에 공개할 경우에는 방화벽, 접근 제어 및 인증을 별도로 구성해야 합니다.
라이선스
이 프로젝트의 자체 소스 코드는 MIT License에 따라 제공됩니다.
FFmpeg는 본 프로젝트에 포함되지 않으며 별도의 라이선스가 적용됩니다. 자세한 내용은 FFmpeg License and Legal Considerations를 참조하세요.