포스트

Ubuntu - [FFmpeg] 동영상 인코딩 변환 HEVC(H.265) -> H.264

OS : Ubuntu Desktop 24.0.4 LTS


안드로이드 핸드폰으로 촬영한 동영상을 웹에 띄울 일이 생겼다.

바로 띄울 수는 없었고 핸드폰으로 촬영한 동영상은 HEVC 코덱이 입혀져 있기 때문에 H.264 코덱으로 인코딩 해주어야 띄울 수 있다고 한다.


image (HEVC 코덱을 시청자가 별도로 구매하거나 하면 볼 수 있는 브라우저도 있다고 한다.)


리눅스에선 FFmpeg를 사용하면 무료로 변환 할 수 있다.


FFmpeg 설치

1
2
3
4
5
sudo apt update
sudo apt install ffmpeg

# 설치 확인
ffmpeg -version


H.264 인코딩

1
2
3
4
5
6
7
8
9
ffmpeg -i video.mp4 \
    -c:v libx264 \
    -profile:v high \
    -level 4.1 \
    -pix_fmt yuv420p \
    -crf 18 -preset slow \
    -c:a aac -b:a 192k \
    -movflags +faststart \
    converted_video.mp4
옵션설명
-i input.mp4원본 파일 지정
-c:v libx264비디오 코덱을 H.264로 설정
-crf 23품질 조절 (0~~51, 낮을수록 고화질, 일반적으로 18~~28 추천)
-pix_fmt yuv420p모바일 호환 필수 픽셀 포맷
-preset slow인코딩 속도와 압축 효율 조절 (ultrafast, superfast, fast, medium, slow 등)
-c:a aac오디오 코덱을 AAC로 설정«br»(ios는 MP4 + H.264 + AAC 조합만을 정확히 지원 함)
-b:a 192k오디오 비트레이트 설정. (192k: 고음질)
-profile:v baseline모바일 재생 호환성 을 위한 프로파일 설정«br»
-level 3.0저사양 기기에서도 재생 가능
-crf 18baseline 프로파일을 지원하는 최고화질
-movflags +faststart스트리밍 지원, 브라우저 재생 필수


사용 환경에 따른 옵션 값 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 저사양 핸드폰 지원
ffmpeg -i video.mp4 \
    -c:v libx264 \
    -profile:v baseline \
    -level 3.0 \
    -crf 18 -preset medium \
    -c:a aac -b:a 192k \
    -movflags +faststart \
    converted_video.mp4

# 일반 웹 브라우저 및 스마트폰 지원
ffmpeg -i video.mp4 \
    -c:v libx264 \
    -profile:v high \
    -level 4.1 \
    -pix_fmt yuv420p \
    -crf 18 -preset slow \
    -c:a aac -b:a 192k \
    -movflags +faststart \
    converted_video.mp4

# 고화질 보관용 (무손실에 가까운 최고 품질, 느린 인코딩)
ffmpeg -i video.mp4 \
    -c:v libx264 \
    -profile:v high \
    -crf 0 -preset veryslow \
    -c:a aac -b:a 192k \
    -movflags +faststart \
    converted_video.mp4

# 유튜브 업로드용 (고화질 손실 압축, 속도와 품질 균형)
ffmpeg -i video.mp4 \
    -c:v libx264 \
    -profile:v high \
    -crf 18 -preset slow \
    -c:a aac -b:a 192k \
    -movflags +faststart \
    converted_video.mp4

# 색보정, 방송용 (10bit 색상 지원, 고화질, 빠른 처리)
ffmpeg -i video.mp4 \
    -c:v libx264 \
    -profile:v high10 \
    -crf 18 -preset medium \
    -pix_fmt yuv420p10le \
    -c:a aac -b:a 192k \
    -movflags \
    +faststart converted_video.mp4


옵션 정보

* crf 옵션

image image -crf 옵션은 -preset 옵션과 함께 사용해야 최적 효과 (예: -crf 18 -preset slow)


* preset 옵션

image image


* level 옵션

image image


* profile:v 옵션

image image


여러 파일 변환

sh 파일 생성, 편집 모드로 실행

1
vi video_converter.sh

코드 작성

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

# 현재 폴더의 모든 .mp4 파일을 변환
for f in *.mp4; do
  echo "변환 중: $f"
  ffmpeg -i "$f" -c:v libx264 -profile:v baseline -level 3.0 -crf 18 -preset slow -c:a aac -b:a 192k -movflags +faststart "converted_$f"

done

echo "모든 파일 변환 완료!"

파일 실행

1
2
# 실행 권한 추가
chmod +x converted_video.sh
1
2
# 실행
./converted_video.sh


변환 된 동영상의 코덱 확인

1
ffmpeg -i converted_video.mp4
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.