FFmpeg에서 배치 파일을 사용하면 여러 개의 파일을 한 번에 처리하거나, 반복적인 작업을 자동화할 수 있다. 이를 통해 복잡한 변환 작업이나 대량의 파일 처리를 손쉽게 할 수 있다. 이 섹션에서는 FFmpeg에서 배치 파일을 어떻게 작성하고, 사용하는지 설명한다.

배치 파일의 기본 개념

배치 파일(batch file)은 여러 명령을 순차적으로 실행할 수 있는 텍스트 파일이다. Windows의 .bat 파일 또는 Linux/Mac의 .sh 스크립트 파일 형태로 작성된다. 이 파일은 각 라인에 명령어를 입력해 여러 작업을 한 번에 처리할 수 있도록 구성된다.

FFmpeg는 명령어 기반 도구이므로, 배치 파일을 통해 다수의 파일을 일괄 처리하는 것이 가능한다. 예를 들어, 여러 개의 비디오 파일을 모두 같은 포맷으로 변환하거나, 특정 설정으로 인코딩하는 작업을 배치 파일로 자동화할 수 있다.

Windows에서 배치 파일 작성 및 실행

Windows에서 FFmpeg 배치 파일을 작성하는 방법은 다음과 같다:

  1. 메모장 또는 텍스트 편집기를 열고, 아래와 같은 명령을 입력한다. bat ffmpeg -i input1.mp4 -vcodec libx264 -acodec aac output1.mp4 ffmpeg -i input2.mp4 -vcodec libx264 -acodec aac output2.mp4 이 배치 파일은 input1.mp4input2.mp4를 각각 변환하여 output1.mp4, output2.mp4 파일로 출력하는 작업을 수행한다.

  2. 파일을 저장할 때, 확장자를 .bat로 지정하여 배치 파일로 저장한다. 예: convert_videos.bat

  3. 저장된 배치 파일을 실행하면, FFmpeg 명령어들이 순차적으로 실행된다.

Linux 및 Mac에서 배치 파일 작성 및 실행

Linux나 Mac에서는 배치 파일을 셸 스크립트(.sh)로 작성한다. 방법은 다음과 같다:

  1. 텍스트 편집기를 열고, 다음과 같은 명령을 입력한다. sh #!/bin/bash ffmpeg -i input1.mp4 -vcodec libx264 -acodec aac output1.mp4 ffmpeg -i input2.mp4 -vcodec libx264 -acodec aac output2.mp4 #!/bin/bash는 스크립트가 bash 셸에서 실행되도록 하는 명령이다.

  2. 파일을 저장할 때 확장자를 .sh로 지정하여 저장한다. 예: convert_videos.sh

  3. 저장한 스크립트 파일에 실행 권한을 부여한다: sh chmod +x convert_videos.sh

  4. 스크립트를 실행하면, FFmpeg 명령어들이 순차적으로 실행된다: sh ./convert_videos.sh

변수 및 인자를 사용한 배치 파일

배치 파일에서는 고정된 입력 파일 대신 변수와 인자를 사용하여 더 유연하게 동작하도록 할 수 있다. 이를 통해 특정 디렉터리 내의 모든 파일을 처리하거나, 사용자로부터 입력값을 받아 변환할 수 있다.

Windows에서 변수 사용

Windows의 배치 파일에서는 %1, %2 등의 변수를 사용해 실행 시 인자를 받을 수 있다. 예를 들어, 다음과 같은 배치 파일을 작성할 수 있다:

@echo off
ffmpeg -i %1 -vcodec libx264 -acodec aac %2

이 배치 파일은 첫 번째 인자를 입력 파일로, 두 번째 인자를 출력 파일로 받아들여 변환 작업을 수행한다. 실행할 때 다음과 같이 사용할 수 있다:

convert_videos.bat input.mp4 output.mp4

이 경우 input.mp4가 입력 파일로, output.mp4가 출력 파일로 사용된다.

Linux/Mac에서 변수 사용

Linux나 Mac에서는 $1, $2 등의 변수를 사용하여 동일한 작업을 수행할 수 있다:

#!/bin/bash
ffmpeg -i "$1" -vcodec libx264 -acodec aac "$2"

이 스크립트를 실행할 때, 아래와 같이 입력과 출력을 지정할 수 있다:

./convert_videos.sh input.mp4 output.mp4

파일 리스트 자동 처리

특정 디렉터리 내의 모든 파일을 처리하는 배치 파일을 작성할 수도 있다. Windows에서는 for 명령을 사용하고, Linux/Mac에서는 for 루프를 사용하여 이 작업을 수행할 수 있다.

Windows에서 파일 리스트 처리

Windows에서는 for 명령을 사용하여 디렉터리 내의 모든 파일을 순차적으로 처리할 수 있다:

@echo off
for %%f in (*.mp4) do ffmpeg -i "%%f" -vcodec libx264 -acodec aac "output_%%f"

이 배치 파일은 현재 디렉터리 내의 모든 .mp4 파일을 찾아 각각을 변환하여 output_ 접두사가 붙은 파일로 저장한다.

Linux/Mac에서 파일 리스트 처리

Linux나 Mac에서는 for 루프를 사용하여 동일한 작업을 수행할 수 있다:

#!/bin/bash
for file in *.mp4; do
   ffmpeg -i "$file" -vcodec libx264 -acodec aac "output_$file"
done

이 스크립트는 현재 디렉터리 내의 모든 .mp4 파일을 변환하여 output_ 접두사가 붙은 파일로 저장한다.

FFmpeg의 병렬 처리

여러 파일을 동시에 처리하는 방법으로 병렬 처리(parallel processing)를 사용할 수 있다. FFmpeg 자체는 병렬 처리를 기본적으로 지원하지 않으므로, 배치 파일에서 xargsparallel과 같은 외부 도구를 이용하여 병렬로 실행할 수 있다.

Linux/Mac에서 병렬 처리

Linux/Mac에서는 xargs를 사용하여 FFmpeg 작업을 병렬로 실행할 수 있다. 예를 들어, 아래와 같은 명령어를 사용할 수 있다:

ls *.mp4 | xargs -n 1 -P 4 -I {} ffmpeg -i {} -vcodec libx264 -acodec aac output_{}

이 명령어는 .mp4 파일 리스트를 받아, 한 번에 4개의 FFmpeg 작업을 병렬로 실행한다. -P 4는 병렬 작업 수를 4개로 설정한 것이다.

parallel 명령어를 사용할 수도 있다:

parallel ffmpeg -i {} -vcodec libx264 -acodec aac output_{} ::: *.mp4

이 명령어는 디렉터리 내의 모든 .mp4 파일을 병렬로 변환한다.

작업 중단 및 재시작

FFmpeg로 대량의 파일을 처리하는 동안 작업이 중단될 경우, 배치 파일을 통해 처리 상태를 기록하고 중단된 부분부터 다시 시작할 수 있다. 이를 위해 로그 파일을 생성하거나, 처리된 파일을 따로 관리하는 방식으로 배치 파일을 작성할 수 있다.

Windows에서 처리 상태 기록

Windows 배치 파일에서 작업이 완료된 파일을 기록하고, 중단 시 로그를 참조하여 중단된 파일부터 재개할 수 있다:

@echo off
for %%f in (*.mp4) do (
    if not exist "processed_%%f" (
        ffmpeg -i "%%f" -vcodec libx264 -acodec aac "output_%%f"
        echo %%f > "processed_%%f"
    )
)

이 배치 파일은 변환이 완료된 파일을 processed_%%f라는 빈 파일로 기록하고, 처리된 파일은 스킵한다.

Linux/Mac에서 처리 상태 기록

Linux나 Mac에서도 비슷한 방식으로 로그 파일을 사용할 수 있다:

#!/bin/bash
for file in *.mp4; do
    if [ ! -f "processed_$file" ]; then
        ffmpeg -i "$file" -vcodec libx264 -acodec aac "output_$file"
        touch "processed_$file"
    fi
done

이 스크립트는 이미 처리된 파일은 스킵하고, 새로운 파일만 변환한다.