ffmpeg 사용법
- 작성자
- 고친과정
2022년 12월 30일 : 처음씀
1.1. 개요
![[https]](/moniwiki/imgs/https.png)
![[]](/moniwiki/imgs/moni2/external.png)
Video/Audio Codec, Subtitle, Encapsulation/Container Format, Meta data, Color format/space, Display/Pixel/Input Aspect ratio, I(Intra)/P(Predictive)/B(Bidirectionally predictive) frame, Progressive(순차)/Interlaced(격행) scanning(주사방식) 등을 이해하시고 차이를 알고 계신다고 가정하고 설명합니다. (우리가 일반적으로 부르는 명칭과 표준 명칭 그리고 관습적인 명칭등이 달라서 각각의 구분이 모호한 경우를 이해할 수 있을 필요가 있다고 생각됩니다.)
- Video Codec
- MPEG1 video (ISO/IEC 11172-2)
- MPEG2 video (ISO/IEC 13818-2, H.262)
- MPEG4 video (ISO/IEC 14496-2, ASP)
- H.264 video (ISO/IEC 14496-10, AVC)
- WMV1 (Windows Media Video v7), WMV2 (Windows Media Video v8), WMV3 (Windows Media Video v9), WVC1 (Windows Media Video v9), ...
- ...
- Audio Codec
- MP3 audio (MPEG 1/2 layer I/II/III)
- MPEG1 Audio / MPEG2 Audio 라고도 하지만 일반적으로 그냥 MPEG Audio 또는 MP3 라고 부릅니다.
- AAC (MPEG2 AAC)
- MPEG2 Audio 라고도 하지만 일반적으로 AAC 라고 부릅니다.
- HE AAC (MPEG4 AAC)
- MPEG4 Audio 라고도 하지만 일반적으로 AAC 또는 HE AAC 라고 부릅니다.
- AC3
- DTS
- ...
- MP3 audio (MPEG 1/2 layer I/II/III)
- Subtitle
- DVB subtitle
- Teletext
- Subrip, '.srt'
- SAMI(Synchronized Accessible Media Interchange), '.smi'
- ...
- Encapsulation/Container Format (저장용과 스트림용으로 목적이 거의 대부분 명확히 구분되어 각 Codec을 묶어 동기 정보 및 메타 정보등을 담고 있습니다.)
- MPEG1 system ('.mpg', '.mpeg', '.mp1')
- MPEG1 에서 기술하는 저장용 포맷입니다.
- MPEG2 Program stream (MPEG2 PS) ('.mpg', '.mpeg', '.mp2', '.ps')
- MPEG2 에서 기술하는 저장용 포맷입니다.
- ES (Elementary stream) ('.es')
- 개별적인 Video/Audio codec 에 시간동기정보 및 부가적인 Codec을 기술하는 MPEG하위 포맷입니다. MPEG1, MPEG2, MPEG4 등에서 Video및 Audio 에 대한 ES 를 동기정보와 함께 묶어서 Encapsulation됩니다.
- MPEG Transport Stream (MPEG2 TS, ISO/IEC 13818-1) ('.ts', '.m2t')
- MPEG2 에서 기술하는 스트림용 포맷입니다. 전송 구간에서 일부 손실이 있어도 어느정도 내성을 가지고 복구 또는 손실처리를 할 수 있지만 빠른 탐색등에 필요한 Indexing 정보가 없어 탐색에는 불리합니다.
- 일정 간격마다 반복되는 기술정보가 포함됩니다.
- 일반 케이블 및 IPTV 실시간 스트림 방송에 사용합니다.
- MP4 ('.mp4')
- Atom header 등을 이용해서 구조화된 저장용 포맷입니다.
- MKV ('.mkv')
- 공개용 저장포맷 중에 하나입니다.
- RIFF AVI (DivX), OpenDML AVI File Extensions, ... ('.avi', '.divx')
- 저장용 포맷입니다.
- ADIF (Audio Data Interchange Format) ('.adif')
- 저장용 Audio 포맷입니다.
- ADTS (Audio Data Transport Stream) ('.adts')
- 스트림용 Audio 포맷입니다.
- ...
- MPEG1 system ('.mpg', '.mpeg', '.mp1')
- Color format/space
- RGB (Red/Green/Blue)
- 빨강, 초록, 파랑 3가지 색상 정보로 나타내는 색 표현방식입니다.
- 부가적으로 Alpha (투명도) 와 ChromaKey (색 분리 필터) 를 포함하여 사용하기도 합니다.
- 각 색상의 단계(bits)를 세분화 할 수록 색 표현력이 증가합니다. (예: 그라데이션 특성을 갖는 하늘색에서 색 단계의 변화에 경계가 이러한 단계 세분화에 따라서 품질 차이가 있습니다.)
- Yuv (Y/Cb/Cr)
- 빛의 세기와 색차신호 정보로 나타내는 색 표현방식입니다.
- 보통 Cb/Cr 은 그 값의 변화 차이가 사람의 시각적인 인지에는 차이를 못느끼는 특성이 있어서 영상 압축에 많이 사용되는 표현방식입니다.
- 색차 신호 단계를 bits로 표현시 그 bits단계를 낮추면 그만큼 압축 효과를 보인다는 것
- Audio channel
- mono (1 channel)
- 오디오를 하나의 채널로 표현
- stereo (2 channels)
- 오디오 좌/우를 나누어 각각 저장하는 채널 표현 방식
- joint stereo (2 channels)
- 좌/우의 차이를 저장하는 채널 표현 방식
- 5 channels
- 전/후/좌/우/센터를 나누어 각각 저장하는 채널 표현 방식
- mono (1 channel)
- ...
- RGB (Red/Green/Blue)
1.2. ffmpeg 옵션 별 설명 및 예시
1.3. 사용법
- TODO
- 기본적인 ffmpeg 의 옵션 순서
$ ffmpeg [<기타옵션>] [<입력 옵션>] [<코덱 옵션>] [<출력 옵션>]
- Transcoding - Format:MP4, Video:H.264 (by NVENC), Audio:AAC, Subtitle:mov_text
$ ffmpeg -hide_banner -loglevel warning -stats -hwaccel auto -i "<변환하고자 하는 입력 파일>" -threads "0" -vsync "vfr" -c:v "h264_nvenc" -preset p7 -tune hq -rc:v vbr -rc-lookahead 8 -cq:v 26 -b:v 0 -bufsize:v 240M -maxrate:v 128M -profile:v high -level:v auto -pix_fmt yuv420p -c:a "aac" -ab "192k" -ac "2" -c:s "mov_text" -f "mp4" -max_muxing_queue_size 1024 "<변환하여 저장할 파일명>.mp4"
- 배포판마다 다를 수 있으나 보통은 render group 퍼미션이 주어진 계정에서 HW 가속을 사용할 수 있습니다. (예: Quick Sync Video)
1.4. 참고자료
https://ffmpeg.org/
https://www.gyan.dev/ffmpeg/builds/
(ffmpeg 빌드하여 배포하는 곳)
- 방송
- DemuxMPEG
- MPEG Transport Stream
- CAS (Conditional Access System)
- ADIF (Audio Data Interchange Format)
- ADTS (Audio Data Transport Stream)
- DSM-CC (Digital Storage Media Command and Control)
- ASF GUID 간략정리
- MPEG Audio Frame Header 간략정리
- NSC value Decode
- MP3의 총 재생시간을 추출해주는 예제
- RGB와 YUV간의 색상변환
- Ofcom (Office of Communications: 영국의 방송 통합 규제기구)
- DTG (Digital TV Group)
- 자막 파일 변환(Convert subtitles format)