OS : Ubuntu Desktop 24.0.4 LTS
안드로이드 핸드폰으로 촬영한 동영상을 웹에 띄울 일이 생겼다.
바로 띄울 수는 없었고 핸드폰으로 촬영한 동영상은 HEVC 코덱이 입혀져 있기 때문에 H.264 코덱으로 인코딩 해주어야 띄울 수 있다고 한다.
(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 18 | baseline 프로파일을 지원하는 최고화질 |
-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 옵션
-crf
옵션은 -preset
옵션과 함께 사용해야 최적 효과 (예: -crf 18 -preset slow
)
* preset 옵션
* level 옵션
* profile:v 옵션
여러 파일 변환
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
|