비디오 영상처리와 인코딩은 온갖 삽질의 끝없는 반복으로 이루어진다.
그리고 그 중엔 모르는 사람이 보면 도저히 이해를 할 수 없는 작업들이 넘쳐난다.
VirtualDub2[각주:1]를 이용하면 무압축 RGB 포맷의 AVI 동영상을 만들 수 있다.
YUV 변환 따윈 전혀 하지 않은 그야말로 무식한 RGB raw 데이터가 저장된 비디오 파일을 손쉽게 만들 수 있는 것이다.
물론 이런 파일은 대부분의 사용자들에겐 파일 크기만 무식하게 크지 아무 쓸모도 없다.
하지만, 이 바닥에서 일을 하다보면 반드시 이런 파일을 만들어야 할 때가 틀림 없이 나타난다.
각설하고, VirtualDub로 이 작업을 하면 문제가 하나 있는데, 많은 입력 파일을 배치 처리하기가 어렵다는 것이다.
물론 배치 처리 기능이 있긴 한데, 결국 일일이 하나씩 배치 작업을 걸어야 한다.
작업 대상이 몇 개 안 된다면 대단히 훌륭한 기능이지만, 파일이 한 100개 쯤 된다면 뭐...
이럴 때는 ffmpeg을 활용하는 편이 더 낫다.
하지만, ffmpeg의 경우는 기능이 너무 많아 정확한 포맷을 지정하는 게 쉽지가 않다는 문제가 있다.
입력 파일은 데이터 내용을 보기 위해 그라데이션 형태의 영상을 만들기로 했다.
1920x1080의 FHD 크기의 단순한 그라데이션 이미지를 하나 만든 뒤에...
AVISynth 스크립트를 한줄 써서 읽으면 된다.
1 | Imagesource ( "test.jpg" , 1, 25, 25) |
이렇게 만들면 제일 좋은 점은 생성된 AVI 파일을 열어보면 top-down인지 bottom-up인지 쉽게 볼 수 있다는 점이다.
별 거 없다.
그냥 출력 포맷(Compression)을 RGB로 설정한 뒤 저장하면 끝.
기본적으로 raw 포맷으로 저장하는 것은 전혀 어렵지 않다.
출력 코덱으로 rawvideo를 지정하고, 적절한 픽셀 포맷(pix_fmt)만 지정하면 된다.
하지만 문제는 ffmpeg이 지원하는 픽셀 포맷이 무지무지하게 많다는 것.
RGB, YUV 각각 8비트, 10비트 다 지원하고 YUV로 저장할 때는 444, 422, 420 등등 지원할만한 건 다 지원한다.
이러다보니 일반적으로 raw 포맷으로 저장하려고 할 때는 아무거나 쓰면 되지만...
VirtualDub과 동일하게 저장하려면 잘 찾아야 한다.
답은 의외로 간단하다. pix_fmt로 rgb24를 사용하면 된다.
1 | ffmpeg -i test.avs -vcodec rawvideo -pix_fmt rgb24 test1.avi |
그런데 이것만으로는 완벽하게 VirtualDub과 동일하게 저장할 수 없다.
VirtualDub는 위부터 아래로(top-down) 저장하는데 반해, ffmpeg는 아래에서 위로(bottom-up) 저장한다.
물론, 프로그램이 잘 알아서 읽으면 되지만, 어쨌거나 완벽하게 동일하지는 않다는 뜻.
VirtualDub과 동일하게 top-down으로 저장하려면 옵션을 하나 더 써야 한다.
1 | ffmpeg -i test.avs -vcodec rawvideo -pix_fmt rgb24 -vf vflip -flipped_raw_rgb 1 test2.avi |
이렇게 변환하면 VirtualDub의 무압축 RGB와 완벽하게 동일한 포맷으로 저장할 수 있다.
덧1. 이렇게 하면 디스크 용량 낭비가 많이 크므로 각 프레임을 각각의 PNG 파일로 저장하는 게 쪼금은 더 효율적일 듯
덧2. AVI용 lossless 코덱 중에 성능과 압축률 두 마리 토끼를 다 잡은 것으로 Lagarith가 있는데, 이 쪽도 꽤 괜찮음
인텔이 공개한 SVT-AV1의 성능 테스트 결과 (1) | 2022.04.27 |
---|---|
아마 영원히 어려울 Exif, ICC Profile 처리... (3) | 2022.01.09 |
MainConcept HEVC 인코더가 2.0으로 업데이트됨 (0) | 2021.10.18 |
JPEG artifacts 제거 방법들에 대한 간단한 고찰 (0) | 2021.10.16 |
FFmpeg을 제대로 직접 컴파일 해보자 (3) | 2021.09.12 |
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.