1
0
Fork 0
generated from libertin/web_app
ffmpeg 웹 프론트엔드 (Codex / GPT 5.6 Sol xhigh)
  • Python 34.1%
  • JavaScript 29.8%
  • HTML 19.3%
  • CSS 16.8%
Find a file
2026-07-21 17:48:21 +09:00
data/presets 0.2.0 2026-07-19 21:08:14 +09:00
engine 0.2.2 2026-07-21 17:48:21 +09:00
log 0.1 2026-07-19 16:05:43 +09:00
route 0.2.0 2026-07-19 21:08:14 +09:00
tool Initial commit 2026-07-19 14:13:52 +09:00
view 0.2.2 2026-07-21 17:48:21 +09:00
.gitignore 0.1 2026-07-19 16:05:43 +09:00
conf.py 0.2.2 2026-07-21 17:48:21 +09:00
LICENSE 0.2.1 2026-07-19 22:04:32 +09:00
README.md 0.2.1 2026-07-19 22:04:32 +09:00
requirements.txt Initial commit 2026-07-19 14:13:52 +09:00
server.py 0.2.1 2026-07-19 22:04:32 +09:00

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

사용 방법

  1. 파일 선택 또는 폴더 선택을 눌러 원본을 추가합니다. 폴더 브라우저의 해당 폴더 선택을 사용하면 현재 폴더의 지원 미디어 파일을 한 번에 불러옵니다.
  2. ffprobe 분석이 끝나면 왼쪽에서 파일과 스트림 정보를 확인합니다.
  3. 영상, 음성, 데이터 탭에서 코덱과 세부 옵션을 지정합니다. 코덱을 copy로 선택하면 해당 스트림의 재인코딩 옵션은 비활성화됩니다.
  4. 출력 컨테이너, 파일명 접미사 및 대상 디렉터리를 선택합니다.
  5. 인코딩 시작을 누른 뒤 대기열 탭에서 파일별/전체 진행률을 확인합니다.

처리는 대기열에 추가된 순서대로 시작합니다. 기본값은 한 번에 1개 파일이며, 우측 상단 설정에서 18개로 변경할 수 있습니다. 이 설정은 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_host0.0.0.0 등으로 변경해 다른 장치에 공개할 경우에는 방화벽, 접근 제어 및 인증을 별도로 구성해야 합니다.

라이선스

이 프로젝트의 자체 소스 코드는 MIT License에 따라 제공됩니다.

FFmpeg는 본 프로젝트에 포함되지 않으며 별도의 라이선스가 적용됩니다. 자세한 내용은 FFmpeg License and Legal Considerations를 참조하세요.