TS to MP4
TS 파일들을 하나의 MP4 파일로 병합하기
회사에서 동영상 게시물을 업로드 해야 할 일이 있었는데, 영상을 다운받아서 보니 TS 여서 움짤을 만들고 싶어서 간단하게 만들어봤습니다. Go 가 자체적으로 해준다기 보다, 반복적인 작업을 손쉽게 처리 하기 위해서 만들었습니다. 이점 참고 하시기 바랍니다.
TS (Transport Stream) 파일은 일반적으로 비디오 스트림을 저장하는 데 사용되며, 여러 개의 TS 파일을 하나의 MP4 파일로 병합해야 하는 경우가 종종 발생합니다. 이를 자동화하기 위해 Go 언어를 사용하여 간단한 프로그램을 작성할 수 있습니다. 이 글에서는 TS 파일들을 FFmpeg를 이용해 병합하는 프로그램을 만드는 방법을 설명합니다.
사전 준비
이 프로그램을 실행하기 위해서는 시스템에 FFmpeg가 설치되어 있어야 합니다. FFmpeg는 다양한 멀티미디어 파일 포맷을 처리할 수 있는 강력한 툴입니다. FFmpeg 설치 방법은 각 운영체제에 따라 다르므로, 공식 문서를 참고하여 설치하시기 바랍니다. <아래 코드는 Mac 에서 진행을 하였습니다>
코드 설명
아래는 TS 파일들을 하나의 MP4 파일로 병합하는 Go 프로그램입니다.
package main
import (
"fmt"
"os"
"os/exec"
"path/filepath"
"strings"
)
func main() {
dirPath := "./ts_files" // TS 파일이 저장된 디렉터리를 지정합니다.
tsFiles, err := getTSFiles(dirPath)
if err != nil {
fmt.Println("Failed to get TS files:", err)
return
}
// ffmpeg의 concat demuxer를 사용하여 TS 파일들을 MP4 파일로 병합
args := []string{"-i", "concat:" + joinFiles(tsFiles), "-c", "copy", "output.mp4"}
cmd := exec.Command("ffmpeg", args...)
err = cmd.Run()
if (err != nil) {
fmt.Println("Failed to merge TS files:", err)
}
}
// getTSFiles 함수는 지정된 디렉터리에서 TS 파일 목록을 반환합니다.
func getTSFiles(dirPath string) ([]string, error) {
var tsFiles []string
err := filepath.Walk(dirPath, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if !info.IsDir() && strings.HasSuffix(info.Name(), ".ts") {
tsFiles = append(tsFiles, path)
}
return nil
})
return tsFiles, err
}
// joinFiles 함수는 TS 파일 리스트를 문자열로 변환
func joinFiles(files []string) string {
return strings.Join(files, "|")
}
코드 상세 설명
디렉터리 경로 설정 (
dirPath
):dirPath
변수에 TS 파일들이 저장된 디렉터리 경로를 지정합니다. 예제에서는./ts_files
디렉터리를 사용합니다. <원하시는 디렉토리로 하셔도 됩니다.>
TS 파일 목록 가져오기 (
getTSFiles
함수):getTSFiles
함수는 지정된 디렉터리에서.ts
확장자를 가진 파일들을 찾아 리스트로 반환합니다.이 함수는
filepath.Walk
를 사용하여 디렉터리를 탐색하고,.ts
파일을 찾으면 이를 리스트에 추가합니다.
TS 파일들을 하나의 문자열로 연결 (
joinFiles
함수):joinFiles
함수는 TS 파일 리스트를|
로 구분된 문자열로 변환합니다. 이 문자열은 FFmpeg의 concat demuxer에서 사용됩니다.
FFmpeg를 사용하여 병합:
FFmpeg를 실행하기 위해
exec.Command
를 사용하여 명령어를 생성합니다.concat:
옵션을 사용하여 TS 파일들을 연결하고,-c copy
옵션으로 스트림을 그대로 복사하여 빠르게 병합합니다.병합된 결과는
output.mp
4
파일로 저장됩니다.
실행 방법
이 프로그램을 실행하기 위해서는 Go 환경이 필요합니다. 프로그램을 컴파일하고 실행하려면 아래의 명령어를 사용합니다:
go run main.go
프로그램이 실행되면, ./ts_files
디렉터리에 있는 모든 TS 파일이 output.mp
4
파일로 병합됩니다. 이 프로그램을 통해 비디오 파일의 병합 작업을 간편하게 처리할 수 있습니다.
Subscribe to my newsletter
Read articles from webisme directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by