본문 바로가기
1. Front-end/>> FFmpeg

FFmpeg으로 원하는대로 동영상 편집하기

by 블록메타 2022. 12. 18.

FFmpeg 하는일

- 동영상을 변환하고 재생시간을 자르고 화면 크기를 확대/축소 화면을 잘라내는 작업을 제공해 주는 라이브러리입니다. 

모든 동양상 음악 사진 폼의 디코딩와 인코딩 지원을 목표로 진행되고 있는 오픈 소스 프로젝트입니다.  거의 대부분의 동영상 관련 애플리케이션들이 FFmpeg을 기반으로 하고 있습니다. 

 

- 비디오만 추출하기

- 오디오만 추출하기

- 비디오와 오디오 합치기

- Scale 변경하기

- Crop, Pad

 

 

설치는 apt 명령으로 할 수 있습니다. 

 

sudo apt install ffmpeg 

 

유튜브 동영상을 다운 받을수 있는 youtube-dl도 인스톨 하겠습니다. 

 

sudo apt install youtube-dl 

다운로드 받을 youtube 동영상의    https://www.youtube.com/watch?v=1fl7uhUrO1w  다양한 품질의 비디오와 오디오의 목록을 확인하기 위해서는 옵션  -F 로 확인할 수 있습니다. 

 

youtube-dl    https://www.youtube.com/watch?v=1fl7uhUrO1w -F     
youtube-dl   1fl7uhUrO1w -F     (전체주소 대신 비디오ID만 입력해도 됩니다.) 

 

다운로드 받을때에는 -f옵션과  비디오,오디오코드를 플로스로 연결한 형식으로 지정하면 됩니다. 

youtube-dl  1fl7uhUrO1w -f 303+258

 

다운로드 받은 동영상을 17초 구간부터 10초간 잘라서 mp4 파일로 만들어 보겠습니다. 

 

ffmpeg -i Big\ Buck\ Bunny\ 60fps\ 4K\ -\ Official\ Blender\ Foundation\ Short\ 1fl7uhUrO1w.mkv  -ss 00:00:17 -t 00:00:10 fhd.mp4 

 

동영상에서 오디오만 mp3로 추출하고 싶을때

ffmpeg -i fhd.mp4 audio_only.mp3 

 

동영상에서 오디오를 제거하고 비디오만 남기고 싶다면 an 옵션을 사용하면 됩니다. 

ffmpeg -i fhd.mp4 -an video_only.mp4

 

비디오만 있는 파일과 오디오만 있는 파일을 합쳐 보겠습니다. 

ffmpeg -i video_only.mp4 -i audio_only.mp3 video_audio.mp4
ffmpeg -i video_audio.mp4 -f null - 

 

비디오 변환 작업은 filter:v로 사용합니다.  간단히 줄여서 vf로 사용해도 됩니다. 

vf는 변환 작업에 따라 수 많은 옵션들이 존재합니다. 그중에서 scale, crop, pad, setpts, zoompan 을 살펴보겠습니다. 

 

오디오 변환 작업은 filter:a로 사용합니다. 간단히 줄여서 af 로 사용합니다.  atempo 를 살펴보겠습니다. 

 

해상도 변경

ffmpeg -i fhd.mp4 -vf scale=1280:720 scale01.mp4 
ffmpeg -i scale01.mp4  -f null - 

16:9 비율을 4:3비율로 스케일 변경 

ffmpge -i fhd.mp4 -vf scale=480:360 scale02.mp4
ffmpeg -i  scale02.mp4  -f null - 

비율이 다르기 때문에 찌그러져서 저장됩니다. 

원본과 같은 비율로 늘어나가 변경해 보겠습니다. 

ffmpeg -i fhd.mp4 -vf scale=480:360:force_original_aspect_ratio=increase scale03.mp4

화면 비율을 바꾸지 않고 특정 부분을 crop 할때 

ffmpeg -i fhd.mp4 crop=960:720 crop01.mp4 

좌측상단에 위치하게 하려면 

ffmpeg -i fhd.mp4 crop=960:720:0:0 crop02.mp4

빈영역을 녹색으로 채우고 싶을때

ffmpeg -i crop01.mp4 -vf pad=1280:720:160:0:color=green pad.mp4

 

비디오 변경 속도 변경   

ffmpeg -i fhd.mp4 -vf setpts=0.5*PTS speedup_video_only.mp4  => 지속시간을 0.5 줄여주었기 때문에 2배속이 됨 

PTS : Presentation Time Stamp 

 

오디오 배속 따로 아래와 같이 설정해야 됩니다. 

ffmpeg -i speedup_video_only.mp4 -af atempo=2 speedup01.mp4   2배속 

 

비디오와 오디오를 한꺼번에 2배속으로 설정할 경우는 아래와 같이 설정하면 됩니다. 

ffmpeg -i fhd.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2[a]" -map [v] -map [a] speedup02.mp4 

 

0.5배속으로 느리게 변환 

ffmpeg -i fhd.mp4 -filter_complex "[0:v]setpts=2*PTS[v];[0:a]atempo=0.5[a]" -map [v] -map [a] speedup02.mp4 

 

연속된 이미지를 동영상 만들 수 있습니다. 

hello01~hello14.png

ffmpeg -i hello%02d.png hello_14frames.mp4
ffmpeg -i hello%02d.png -vf setpts=8*PTS  hello_speed.mp4

동영상에서 이미지를 추출할 수 있습니다. 

 

ffmpeg -i hello_14frames.mp4 frame%02d.png

 

추출할 프레임수를 지정할 수도 있습니다.  

ffmpeg -i hello_14frames.mp4 -vframes 1 frame_first.png  한프레임
ffmpeg -i hello_14frames.mp4 -vf "select='between(n,1,3)'  frame_%d.png

 

 

 

Reference

https://www.youtube.com/watch?v=c4amktP_Kk4
https://www.youtube.com/watch?v=2kL1tsy_4as

댓글