2026 Mac Mini 대여 7×24: HandBrake CLI vs FFmpeg VideoToolbox — 병렬 트랜스코드 의사결정 매트릭스, 열 스로틀 임계, 디스크 워터마크

읽는 시간: 약 8분

장기 대여 Mac Mini에서 7×24·야간 배치 트랜스코드가 깨질 때 흔한 원인은 NVMe 병렬 과다·열 스로틀에 가려진 벽시간 증가·디스크 워터마크 초과 후에도 큐가 받는 것입니다. HandBrakeCLIFFmpeg VideoToolbox 비교, 매트릭스·병렬 표·체크리스트, GNU parallel·백오프·caffeinate·pmset을 묶습니다. 심화: 야간 ffmpeg·전원·워터라인·SSH·VNC.

하드웨어 전제

전용 계약이라도 전력·대역·재부팅은 공유됩니다. 장기 배치는 피크가 아니라 매일 도는 보수 레인으로 크기를 잡고, SSH·tmux로 드레인·재기동을 런북화합니다.

  • SSD·경로: APFS 스크래치 우선; 읽기/쓰기 분리 시 썬더볼트. USB 허브 외장은 병렬에 불리.
  • 코어·열: VT도 디먹스·필터·오디오가 CPU를 씁니다. 기준 클립 벽시간·팬을 주간 재측정.

도구 비교

HandBrakeCLI는 프리셋·QC 고정에, FFmpeg는 필터·세그먼트·패키징에 강합니다. 둘 다 VideoToolbox를 쓰며 차이는 운영 방식입니다.

레인 이렇게 고를 때 리스크
HandBrakeCLI + VT 프리셋 라이브러리 규모 재인코딩, 동결 프리셋, 작업당 플래그 수를 줄이고 싶을 때 HandBrake 버전별 프리셋 드리프트—컨테이너·바이너리 핀을 런북에 명시
FFmpeg + h264_videotoolbox / hevc_videotoolbox 스케일·오디오 매핑·세그먼트 재시도·패키징이 필요할 때 플래그 폭주—검토된 템플릿만 프로덕션 레인에 허용
하이브리드 본 영상은 HandBrake, 먹싱·후처리는 FFmpeg 임시 파일 이중—TMPDIRFFMPEG_TMPDIR를 같은 빠른 스크래치로 맞춤

예시 원라이너(프리셋·비트레이트는 환경에 맞게 조정)

# 인코더 목록: HandBrakeCLI --encoder-list
HandBrakeCLI -i "in.mov" -o "out.mkv" --preset "Fast 1080p30" -e vt_h264 -B 160

ffmpeg -hide_banner -nostdin -y -hwaccel videotoolbox -i "in.mov" \
  -c:v hevc_videotoolbox -b:v 12M -tag:v hvc1 -c:a copy "out.mov"

병렬 임계 표

병렬 세션은 공통 예산입니다. 골든 클립 벽시간이 평탄할 때만 동시성을 올립니다.

호스트 프로필 기본 VT 동시 인코딩 황색 열 게이트 적색(큐잉 중단)
M4급, 단일 내부 NVMe 1개 활성 VT; 읽기·쓰기를 디바이스로 분리했을 때만 2 검토 기준 클립 벽시간이 연속 두 번 기준의 110% 초과 125% 초과 또는 패키지 전력·팬 정책이 지속 이상
M2 Pro / M3 Pro, 단일 스크래치 가벼운 필터 기준 1–2; 오디오 리먹스·강한 스케일 병행 시 1 구동 중앙값 대비 임의 작업 15% 이상 벽시간 악화 커널 thermal 로그 또는 관리 SSH 세션의 체감 끊김
M1 / M2 베이스, 공유 레인 1 VT; CPU 필터 배치는 뮤텍스가 있는 별도 큐 NVMe 이용률 고정·지연 이상치 디스크 워터마크 위반(다음 절)

수동 병렬도와 큐 백오프

감독 스크립트가 큐를 소유하고, GNU parallel로 표의 --jobs와 APFS 완충용 --delay를 맞춥니다.

export TMPDIR="$HOME/Library/Caches/transcode-scratch"
export FFMPEG_TMPDIR="$TMPDIR"
parallel --jobs 1 --delay 8 --retries 3 --joblog vt.log --resume-failed \
  ./encode-one.sh ::: ./queue/*.mov

실패 후 지수 백오프+지터 예시입니다.

base=60; cap=600; attempt=1; max_attempt=5; delay=$base
until ./encode-one.sh; do
  jitter=$(( delay / 4 ))
  sleep $(( delay + RANDOM % (jitter + 1) ))
  delay=$(( delay * 2 ))
  [ "$delay" -gt "$cap" ] && delay=$cap
  attempt=$(( attempt + 1 ))
  [ "$attempt" -gt "$max_attempt" ] && exit 1
done

caffeinate와 pmset 주의

  • caffeinate -dimsu -- ./batch-driver.sh: 신뢰할 수 있는 셸에서 드라이버 전체를 감쌀 때.
  • caffeinate -dimsu -w <worker-pid>: 부모 PID 수명에 어서션을 묶을 때.

pmset제공자 승인 후에만; pmset -g custom·assertions 스냅샷을 남기고 이상 시 롤백. 기준은 전원 매트릭스.

디스크와 로그

임시·스테이징이 최종보다 큽니다. APFS 게이트로그 로테이션을 함께 두세요.

파라미터 체크리스트

  • 스크래치: TMPDIR·FFMPEG_TMPDIR를 최고속 볼륨에 고정.
  • 황/적 디스크: 신규 일시정지 <20% 또는 <80GB; 하드스톱 <15% 또는 <50GB 후 드레인·부분물 검증.
  • 아이노드·로그: df -ih 동시 탐침; 로그는 요약 위주·launchd ThrottleInterval ≥120s.

게이트는 코드 if로 두 경로(HandBrake·FFmpeg)에 동일 적용.

FAQ

한 큐에 HandBrakeCLI와 FFmpeg VideoToolbox를 섞어도 되나요?
단일 감독·동일 디스크 게이트·VT 세션 총량 캡이면 됩니다.
VideoToolbox이면 CPU 튜닝이 필요 없나요?
아님. 종단 벽시계를 봅니다.
렌탈 맥에서 pmset을 바꿔도 되나요?
승인 시만; 일상은 caffeinate 우선, 이상 시 원복.
스토리지 순간 오류 후 어떤 백오프가 안전한가요?
60초→2배·상한600초·지터~30%·3~5회 후 에스컬레이션.

HandBrake·FFmpeg 배치용 Mac Mini 대여

요금제 보기·로그인 없이 지금 대여·고객센터·블로그에서 전원·디스크·스케줄 매트릭스를 이어 읽으세요.

배치 트랜스코드 레인 — 요금제·공개 구매(로그인 불필요)·고객센터·블로그.

로그인 없이 Mac Mini 대여