본문 바로가기

개발

(34)
[FFMPEG] 트랜스코딩, 필터, 필터 체이닝 기본 문법 📄 목차 ffmpeg의 기능 - 트랜스코딩과 필터링 1. 트랜스코딩 (Transcoding) 인풋을 다른 포멧으로 변경하는 것 input -> Demux(Unpack) -> Decode(Uncompress) -> Encode(Compress) -> Mux(Pack) -> output 2. 필터링 (Filtering) 미디어의 오디오와 비디오에 일부 변화를 주는 것 input -> Demux(Unpack) -> Decode(Uncompress) -> filter1 -> filter2 -> filter2 -> ... -> Encode(Compress) -> Mux(Pack) -> output ffmpeg의 기본 문법 ffmpeg -f // 따로 명시하지 않을 경우 ffmpeg가 알아서 추정함 -i : .. ..
[FFMPEG] 오디오의 기본, 오디오 샘플, 컨테이너, 인코딩, 트랜스코딩 오디오 샘플(Audio Sample) - 음성의 디지털 표현 단위 - 오디오를 구성하는 블록 - 8/16/24/32 비트로 저장될 수 있음(bit depth) - 비트수가 클 수록 고퀄리티 오디오 Audio Frequency - 1초당 얼마나 많은 샘플이 있는지 - 44.1kHz, 48kHz - frequency 가 클수록 고퀄리티 오디오 Audio = 같이 재생되는 오디오 샘플의 연속 Audio Channels Audio Track 같은 타임라인 위의 다른 사운드 Codec이란? coder + decoder 인코딩, 디코딩 스펙 또는 인코딩, 디코딩에 사용되는 라이브러리 인코딩 = 압축해서 더 작은 파일로 만드는 과정 디코딩 = 사용할 때는 다시 원래 형태로 복원 비디오 코덱의 종류 H.264 = 인터..
[AWS] NodeJS Lambda에서 ffmpeg 사용하기 사이드 프로젝트를 람다로 구현하는 중에 하나의 허들이 있었으니 바로 ffmpeg기능을 활용하는 부분이었습니다. 람다 용량 제한이 25MB정도인데 ffmpeg 패키지 사이즈만 30 MB정도 됩니다. 번들링은 할 수 없다는 의미.. 람다 자체를 dockernize해서 올리려고도 해봤으나 AWS에서 제공하는 기본 도커 이미지에 ffmpeg 를 추가하는게 쉽지 않았습니다. 반나절 정도 이걸로 삽질하다가 다른 방법을 찾아 나섰죠. 결국 최종적으로 선택한 방법은 Layers로 ffmpeg를 따로 구성하고 람다에 추가하여 활용하는 방식입니다. 이걸로 시도한지 두어시간만에 성공해서 하루동안의 삽질이 아름답고 허무하게 끝났네요.. 1. FFMPEG 빌드 파일을 .zip으로 압축 우분투 EC2 인스턴스를 하나 띄워서, ..
Docker로 Lambda 이미지 만들어 배포하기 📄 목차 1. 프로젝트 준비 빈 프로젝트에 package.json, app.js, Dockefile을 만들어줍니다. 일단 빈 람다를 Dockerize해서 올려보겠습니다. Dockerfile FROM public.ecr.aws/lambda/nodejs:18 # Assumes your function is named "app.js", and there is a package.json file in the app directory COPY app.js package.json ${LAMBDA_TASK_ROOT}/ # Install NPM dependencies for function RUN npm install # Set the CMD to your handler (could also be done as a p..
[AWS] S3 정적 호스팅을 CloudFront에 연결하기, https 설정, 가비아 도메인 연결 1. 가비아에서 구매한 도메인을 AWS Route53에 연결 AWS Route53에 구매한 도메인과 동일한 public hosting 영역을 생성 ex) exmple.kr NS 레코드 4개를 가비아에 등록 가비아 > 도메인 > 네임서버 1~4차 2. AWS Certificate Manager AWS ACM 콘솔에 들어가서 등록한 도메인 (example.kr, *.expamle.kr)에 대한 인증서 발급 이 때 리전은 꼭 us-east-1(버지니아 북부)로 해야 함!! 그래야 cloudfront에 인증서 적용 가능 DNS검증을 선택하고 대기하면 검증보류 > 검증 완료로 변경됨 3. CloudFront배포 설정 호스팅된 S3(example.kr.s3-website.ap-northeast-2.amazonaws..
[AWS] CDK 시작하기 & Argument of type 'this' is not assignable to parameter of type 'Construct' 이슈 해결 1. CDK Cli 설치 및 CDK bootstrap AWS CDK CLI를 설치하려면 먼저 Node Package Manager(NPM)가 설치되어 있어야 합니다. # npm으로 aws-cdk 설치 npm install -g aws-cdk # 성공적으로 설치 되었는지 확인 cdk --version # > 2.20.0 (build 738ef49) 배포하게 될 대개의 AWS CDK 스택들은 스택과 함께 배포되는 외부 파일(예: AWS Lambda 함수나 Docker 이미지) 등의 자산을 포함하고 있습니다. CDK는 이를 Amazon S3 버킷 또는 기타 컨테이너에 업로드하여 배포 중에 AWS CloudFormation에서 사용할 수 있게 합니다. 배포하려면 이러한 컨테이너가 AWS 계정 및 배포하려는 리전..
[AWS] 컨테이너 기반 Lambda 생성하기, Lambda에서 S3업로드 프로젝트 내에서 음성파일 분석을 위해 파이썬 Librosa 라이브러리를 활용해야 했는데요, 전체프로젝트를 서버리스로 구성할 계획이어서 이 부분도 람다로 추가해보았습니다. 일반적으로 람다에 외부 라이브러리를 활용하려면 Lambda layers를 이용하면 되지만, librosa는 패키지 사이즈가 커서 이 방법으로는 업로드가 어려웠습니다. EFS에 패키지를 설치하고 람다에 EFS를 마운트하는 방법도 있었지만 제가 시도해보니 잘 안되어서.. 람다 전체를 도커로 컨테이너화 해서 올리는 방법을 택했습니다. 01. 람다 핸들러 소스코드 작성 람다 핸들러 소스코드를 작성해줍니다. 아래 코드는 쿼리패러미터로 입력받은 url에 대해서 librosa의 split(묵음 구간 식별)를 수행하고 결과를 boto3라이브러리를 이용..
[AWS] Lamda + API Gateway 시작하기 | GET, Query String 전달, json.dumps 한글 깨짐 해결 람다 간단하대서 써볼려했더니.. 엄청 삽질했네요;; Lamda + API Gateway를 활용하여 간단한 API를 개발해보겠습니다. 1. API 규격 이번에 만들 api 는 GET/test 입니다. GET /test - queryString으로 first_name과 last_name이 있을 경우 : body에 hello {first_name} {last_name} 반환 - queryString이 비어있을 경우 : body에 hello anonymous 반환 2. Lambda 함수 생성 AWS Lambda > 함수생성 > 새로작성 test라는 이름의 함수를 하나 만들어 주었습니다. 새로 생성한 함수로 들어가서 코드 탭에서 코드를 원하는대로 편집합니다. 람다에서는, event 인자를 통해 request인자들..