Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Redux
- 스타트업
- 상태관리
- 국비 지원
- 풀스택
- Spring
- 스프링
- react
- 개발
- 리엑트 네이티브
- 스프링 부트
- ffmpeg
- 백엔드
- expo
- 코딩
- 리엑트
- 클론코딩
- 프론트 엔드
- 인스타그램
- 풀스택 개발자
- 프론트엔드
- Java
- 국비지원
- 개발자
- 비전공자
- 자바
- spring boot
- react-native
- 비전공
- react native
Archives
- Today
- Total
오티스의개발일기
[FFMPEG] FFmpeg Commands 알아보기 + FFmpeg 맥북 M1 에 설치 본문
728x90
< 이전글
2023.01.15 - [개발/FFmpeg] - [FFMPEG] FFmpeg Commands 알아보기 + FFmpeg 맥북 M1 에 설치
다음글 >
2023.01.15 - [개발/react-native] - [REACT-NATIVE] ffmpeg 사용을 위한 Video CurrentTime 조작하기
오늘은 FFmpeg 안에있는 커맨드들을 살펴볼것이다.
또한 그전 포스팅에서 커맨드를 해석해볼것이다.
# 주요 커맨드
-
-i [input]
-
입력 파일을 지정한다.
-
-
-vcodec [codec], -acodec [codec] 또는 -c:v [codec], -c:a [codec]
-
비디오 코덱, 오디오 코덱을 지정한다. 사용할 수 있는 코덱은 ffmpeg -encoders 로 확인할 수 있다. copy로 지정하면 기존 스트림을 인코딩 하지 않고(direct stream) 복사한다.
-
-
-vf [filter], -af [filter]
-
비디오, 오디오에 필터를 적용한다. 리사이즈를 하거나 스피드를 바꾸거나 ass, srt 자막을 입히는 등의 처리를 할 수 있다. 자세한 것은 FFmpeg의 필터 문서를 참고하자. 참고로 자막을 입히는 건 폰트 때문에 윈도에서는 환경변수를 지정해 줘야 한다.
-
-
-b:v [bitrate], -b:a [bitrate]
-
비디오, 오디오의 비트레이트를 지정한다.
-
-
-crf [quality]
-
비트레이트 대신 화질 기준으로 인코딩할 때 쓰는 옵션. libx264 코덱 기준 사용 가능 범위 0-51, 0은 무손실, 디폴트는 23
-
-
-y
-
파일 명이 중복될 경우 묻지 않고 덮어쓴다.
-
-
-re
-
인코딩 속도를 1x(실시간)으로 제한한다. 로컬 파일을 ffserver로 스트리밍 시 실시간으로 feed를 전송하기 위해서 필요하다.
-
-
-f [container]
-
입출력 포맷을 지정한다. 따로 적지 않아도 파일 확장자에 맞춰서 해준다.
-
-
-t [time]
-
지정된 시간(초 단위) 만큼 인코딩한다.
-
-
-ss [time]
-
지정된 시간(초 단위) 만큼 건너뛰고 인코딩한다. hh:mm:ss 방식으로도 표기가 가능하다.
-
# 커맨드 해석
const ffmpegCommand = `-ss 0 -i ${videoURI} -vf "fps=${FRAME_PER_SEC}/1:round=up,scale=${FRAME_WIDTH}:-2" -vframes ${frameNumber} ${outputImagePath}`;
-ss 0 -i ${videoURI} -vf "fps=${FRAME_PER_SEC}/1:round=up,scale=${FRAME_WIDTH}:-2" -vframes ${frameNumber} ${outputImagePath}
-ss 0 = 0초 만큼 건너뛴다
-i ${videoURI} = 비디오 파일 지정
-vf "fps=${FRAME_PER_SEC}/1:round=up = 프레임을 /1 기준으로하고 round=up 을통해 반올림을 한다
scale=${FRAME_WIDTH}:-2 = 크기를 지정해준다 그리고 :-2 는 종횡비율에대한 커맨드 필터이다
-vframes ${frameNumber} = 출력할 프레임의 개수
${outputImagePath} = 캐싱으로 생성한 path 를 적어두는거같다
일단 이것들을 테스트해보려면 맥에 따로 ffmpeg 를 설치하여 연습해야겠다
한번 ffmpeg 를 설치하여보자
# FFmpeg 설치
brew install ffmpeg
Ffmpeg 환경변수는 아니지만 이것을 다운로드 하면서 ruby도 같이 다운로드가 된것같다
설명대로 환경변수를 등록해보자
By default, binaries installed by gem will be placed into:
/usr/local/lib/ruby/gems/3.2.0/bin
You may want to add this to your PATH.
ruby is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.
If you need to have ruby first in your PATH, run:
echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.zshrc
For compilers to find ruby you may need to set:
export LDFLAGS="-L/usr/local/opt/ruby/lib"
export CPPFLAGS="-I/usr/local/opt/ruby/include"
For pkg-config to find ruby you may need to set:
export PKG_CONFIG_PATH="/usr/local/opt/ruby/lib/pkgconfig"
이제 성공적으로 다운로드가 되었다 이제 실행해보자
첫번째 해볼것은 시간을 원하는 시간대로 자르는 커트를 해볼것이다
시작하기전에 앞서 나는
https://www.youtube.com/watch?v=a3ICNMQW7Ok
이 동영상을 추출해와 사용하였다..
1. 동영상 시간 커트하기
ffmpeg -i sample.mp4 -ss 00:00:5 -t 00:00:10 cutTime.mp4
-ss 는 시작 시간이고 -t 는 얼마나 지속할지 적는것이다..
위에 커맨드를 해석해보면
sample.mp4 를 5초부터 시작하고 15초가 될때까지 (10초짜리 영상을 만든다는 뜻) 자른후 cutTime.mp4 라는 것으로 만들어주세요
결과를 보도록하겠다.
원본영상과 한번 비교하여보자
원본 영상
커팅한 영상
문제없이 원본영상의 5초부터 시작하고 10초간 영상을 만든것을 볼수있다.
티스토리에 이모티콘이 있는걸 오늘 처음알았다..ㅎㅎㅋㅋ
2. 동영상 오디오 추출하기
ffmpeg -i sample.mp4 sampleAudio.mp3
추출할때 확장자를 다르게 입력하면 오디오만 추출할수가있다.
정상적으로 추출되었다.
3. 동영상 만 추출하기 (오디오 X)
동영상 추출은 그전에 커팅한 영상의 동영상만 가져오도록하겠다 그이유는
오디오 길이가 더 길고 동영상 이 짧았을때 어떤식으로 병합할수있는지 궁금하기 때문이다.
아까 만든 커팅영상에서 오디오를 제거하고 추출해보도록 하겠다.
ffmpeg -i cutTime.mp4 -an cutTimeVideoOnlyVideo.mp4
실제로 틀어보면 무음인걸 확인할수있다.
자이제 병합해보도록 하겠다.
ffmpeg -i cutTimeVideoOnlyVideo.mp4 -i sampleAudio.mp3 putTogether.mp4
예상했던것과 같이 더긴파일을 기준으로 병합이 된다
또한 나머지 영상이 없는 부분은 검정색으로 표현이 되어있다.
이번 포스팅은 여기까지하도록 하겠다.
다음글 >
2023.01.15 - [개발/react-native] - [REACT-NATIVE] ffmpeg 사용을 위한 Video CurrentTime 조작하기
728x90
'개발 > FFmpeg' 카테고리의 다른 글
Comments