Windows OS 바탕화면에 두고 영상 파일들이 있는 "폴더"를 드래그 앤 드롭(Drag & Drop) 하거나, 더블 클릭 시 폴더 경로를 직접 입력받아 안전하게 작업할 수 있는 Windows OS 전용 배치 파일(.bat) 제작.

비디오 인코딩 도중 중단되어 파일이 손상되는 것을 방지하기 위해 임시 파일(_temp.mp4)로 먼저 100% 정상 변환된 후 원본을 교체(Overwrite)하도록 설계되었음.

배치 파일 생성법

  1. 바탕화면 빈 곳 우클릭 → 새로 만들기 → 텍스트 문서 선택
  2. 아래 스크립트 내용을 전체 복사하여 붙여넣기
  3. 메뉴에서 파일 → 다른 이름으로 저장 클릭
  4. 파일 이름을 VideoCompress_GPU.bat 로 입력하고, 파일 형식은 모든 파일 (.), 인코딩은 ANSI 또는 UTF-8로 저장

VideoCompress_GPU.bat 코드

plain text
@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul
title FFmpeg NVIDIA GPU H.265 일괄 압축기

:: 1. 폴더 경로 확인 (드래그 앤 드롭 또는 수동 입력)
set "TARGET_DIR=%~1"
if "%TARGET_DIR%"=="" (
    echo ========================================================
    echo  압축할 영상들이 들어있는 폴더 경로를 입력하세요.
    echo  (탐색기에서 폴더를 이 창으로 끌어다 놓아도 됩니다)
    echo ========================================================
    set /p "TARGET_DIR=폴더 경로 입력: "
)

:: 따옴표 제거
set "TARGET_DIR=%TARGET_DIR:"=%"

if not exist "%TARGET_DIR%" (
    echo [오류] 입력한 폴더가 존재하지 않습니다: "%TARGET_DIR%"
    pause
    exit /b
)

echo.
echo ========================================================
echo  작업 대상 디렉터리: %TARGET_DIR%
echo  인코더: NVIDIA NVENC (H.265 / HEVC)
echo  품질 설정: CQ 24 / Preset p6
echo ========================================================
echo.

cd /d "%TARGET_DIR%"

:: 2. 지원하는 동영상 확장자 목록 순회
for %%E in (mp4 mkv avi mov flv wmv webm ts) do (
    for %%F in (*.%%E) do (
        set "FILENAME=%%~nxF"
        set "BASENAME=%%~nF"
        set "EXT=%%~xF"

        :: 임시 파일명 정의
        set "TEMP_FILE=!BASENAME!_temp.mp4"
        set "FINAL_FILE=!BASENAME!.mp4"

        :: 임시 파일 패턴(_temp.mp4)은 처리 대상에서 건너뛰기
        echo "!FILENAME!" | findstr /i "_temp.mp4" >nul
        if errorlevel 1 (
            echo ----------------------------------------------------
            echo [변환 시작] !FILENAME!
            echo ----------------------------------------------------

            :: FFmpeg 하드웨어 가속 인코딩 실행
            ffmpeg -hide_banner -v error -stats -hwaccel cuda -i "%%F" ^
                -c:v hevc_nvenc -cq 24 -preset p6 -pix_fmt yuv420p ^
                -c:a aac -b:a 192k ^
                -movflags +faststart ^
                "!TEMP_FILE!"

            :: 변환 성공 여부 체크 (에러코드 0 및 임시 파일 존재 확인)
            if !errorlevel! equ 0 if exist "!TEMP_FILE!" (
                rem 원본 삭제 후 임시 파일 이름 변경 (Overwrite)
                del /f /q "%%F"
                ren "!TEMP_FILE!" "!FINAL_FILE!"
                echo.
                echo [성공] 원본 교체 완료 -^> !FINAL_FILE!
            ) else (
                echo.
                echo [실패] !FILENAME! 변환 중 에러가 발생했습니다. 원본을 보존합니다.
                if exist "!TEMP_FILE!" del /f /q "!TEMP_FILE!"
            )
            echo.
        )
    )
)

echo ========================================================
echo  모든 영상 압축 및 교체 작업이 완료되었습니다.
echo ========================================================
pause

사용법

  • 방법 1 (가장 편리함): 영상을 모아둔 폴더를 마우스로 잡고 바탕화면의 VideoCompress_GPU.bat 아이콘 위로 끌어다 놓습니다(Drag & Drop).
  • 방법 2: 배치 파일을 더블 클릭하여 실행한 뒤, 프롬프트 창에 폴더 경로를 붙여넣고 Enter를 누릅니다.

설정법

  • 화질 조정: 화질을 더 올리고 싶다면 스크립트 중간의 cq 24를 cq 22 정도로 낮추고, 용량을 더 줄이고 싶다면 cq 26 정도로 올리시면 됩니다.
  • 오디오 원본 유지: 음성 재인코딩 없이 원본 음향을 그대로 쓰고 싶다면 c:a aac -b:a 192k 부분을 c:a copy로 변경하면 처리 속도가 한층 더 빨라집니다.