FF๐๐๐๐ V๐๐๐๐ M๐๐๐๐๐๐ ๐
MIT License
# ๐ FFmpeg ๋ฐ FFprobe ์ค์น
- [FFmpeg ๋ค์ด๋ก๋ ํ์ด์ง](https://ffmpeg.org/download.html)๋ก ์ด๋
- Windows ๋น๋ ์ ํ (๊ถ์ฅ: [gyan.dev](https://www.gyan.dev/ffmpeg/builds/))
- "Release builds"์์ `ffmpeg-release-essentials.zip` ๋ค์ด๋ก๋
- ZIP ํ์ผ์ `C:\ffmpeg`์ ์์ถ ํด์
# ๐ PATH ํ๊ฒฝ ๋ณ์ ์ถ๊ฐ
- `C:\ffmpeg\bin` ๊ฒฝ๋ก ๋ณต์ฌ
- ๋ด PC โ ์์ฑ โ ๊ณ ๊ธ ์์คํ
์ค์ โ ํ๊ฒฝ ๋ณ์ ํด๋ฆญ
- ์์คํ
๋ณ์์์ `Path` ํธ์ง โ ์ ๊ฒฝ๋ก์ `C:\ffmpeg\bin` ์ถ๊ฐ
- ๋ชจ๋ ์ฐฝ ๋ซ๊ธฐ
# ๐ ์ค์น ํ์ธ
- Win + R โ "cmd" ์
๋ ฅ ํ ์คํ
- `ffmpeg -version` ๋ฐ `ffprobe -version` ์
๋ ฅํด ์ค์น ํ์ธ
docker network create --driver bridge mynetwork
docker network ls
docker run -d --name mariadb -p 3310:3306 -v mysql_db:/var/lib/mysql --network mynetwork -e MYSQL_DATABASE=ffmpeg-video-database -e MYSQL_ROOT_PASSWORD=password mariadb:latest
# ๐ GoLand IDE์์ ํ๋ก๊ทธ๋จ ์คํ ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ
- Program arguments: Go ํ๋ก๊ทธ๋จ์ ์คํํ ๋ ์ ๋ฌํ ๋ช
๋ น์ค ์ธ์.
- ์ฌ๊ธฐ์๋ `-c deploy/dev/config.toml`์ ์ ๋ฌํ์ฌ `config.toml` ํ์ผ์ ์ค์ ํ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
- ์ค์ ๋ฐฉ๋ฒ
1. GoLand์์ Run/Debug Configurations๋ฅผ ์ฝ๋๋ค.
2. Program arguments ํ๋์ `-c deploy/dev/config.toml`์ ์
๋ ฅํฉ๋๋ค.
3. ์ด ์ค์ ์ ํ๋ก๊ทธ๋จ์ด `config.toml` ํ์ผ์ ์ฝ์ด๋ค์ด๋๋ก ํ์ฌ, ์ง์ ๋ ํ๊ฒฝ ์ค์ ์ ๋ก๋ํ๊ฒ ํฉ๋๋ค.
4. ์ค์ ์ ์ ์ฅํ๊ณ , Run ๋ฒํผ์ ํด๋ฆญํ์ฌ ํ๋ก๊ทธ๋จ์ ์คํํฉ๋๋ค.
# ๐ ๋ชจ๋ ํ
์คํธ ์ฝ๋ ์คํ
go test ./internal/...
# ๐ ์ปค๋ฒ๋ฆฌ์ง ํ๋กํ์ผ ์์ฑ ํ, HTML ๋ณด๊ณ ์ ์์ฑ
go test -v -coverprofile=coverage.out ./internal/...
go tool cover -html=coverage.out
$ curl --http1.1 http://localhost:3031/api/health
ffmpeg -f lavfi -i color=c=blue:s=320x240:d=5 -vf "drawtext=fontfile='C\\Windows\\Fonts\\arial.ttf': text='Test Video 1': fontcolor=white: fontsize=24: x=(w-text_w)/2: y=(h-text_h)/2" -c:v libx264 -t 5 -pix_fmt yuv420p "C:\test_video_1.mp4"
ffmpeg -f lavfi -i color=c=red:s=320x240:d=6 -vf "drawtext=fontfile='C\\Windows\\Fonts\\arial.ttf': text='Test Video 2': fontcolor=white: fontsize=24: x=(w-text_w)/2: y=(h-text_h)/2" -c:v libx264 -t 6 -pix_fmt yuv420p "C:\test_video_2.mp4"
ffmpeg -f lavfi -i color=c=green:s=320x240:d=7 -vf "drawtext=fontfile='C\\Windows\\Fonts\\arial.ttf': text='Test Video 3': fontcolor=white: fontsize=24: x=(w-text_w)/2: y=(h-text_h)/2" -c:v libx264 -t 7 -pix_fmt yuv420p "C:\test_video_3.mp4"
ffmpeg -f lavfi -i color=c=yellow:s=320x240:d=5 -vf "drawtext=fontfile='C\\Windows\\Fonts\\arial.ttf': text='Test Video 4': fontcolor=black: fontsize=24: x=(w-text_w)/2: y=(h-text_h)/2" -c:v libx264 -t 5 -pix_fmt yuv420p "C:\test_video_4.mp4"
ffmpeg -f lavfi -i color=c=purple:s=320x240:d=6 -vf "drawtext=fontfile='C\\Windows\\Fonts\\arial.ttf': text='Test Video 5': fontcolor=white: fontsize=24: x=(w-text_w)/2: y=(h-text_h)/2" -c:v libx264 -t 6 -pix_fmt yuv420p "C:\test_video_5.mp4"
C ๋๋ผ์ด๋ธ
์ ๋ฃจํธ์ ์์ฑ๋ฉ๋๋ค.cd internal
swag init
ffmpeg-video-modules API Server ์คํ ํ, `http://localhost:3031/docs/index.html` ์ ๊ทผ
[GET] /health
-> [POST] /videos
-> [POST] /videos/{id}/trim
-> [POST] /videos/concat
-> [POST] /jobs/execute
-> [GET] /Videos
-> [GET] /videos/{fid}/download
์คํ ์ UI | ์คํ ํ UI |
---|---|
์คํ ์ UI | ์คํ ํ UI |
---|---|
Swagger UI์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ํ์ผ์ ํ ๋ฒ์ ์ ๋ก๋ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ง์ ์ ๊ณตํ์ง ์์ต๋๋ค.
์ฌ๋ฌ ๊ฐ์ ํ์ผ์ ํ ๋ฒ์ ์ ๋ก๋ํ๋ ๊ธฐ๋ฅ์ ์๋์ ์ด๋ฏธ์ง๋ฅผ ์ฐธ๊ณ ํ์ฌ Postman์ผ๋ก ์ํํ๊ธธ ๋ฐ๋๋๋ค.
์คํ ์ UI | ์คํ ํ UI |
---|---|
๐ ์ธ๊ธ๋ ์๊ตฌ์ฌํญ์ ์ฌ์ฉ์๊ฐ ์ด์ ์ ์์ฒญํ ๋ชจ๋ ํธ๋ฆผ ๋ฐ ์ด์ด๋ถ์ด๊ธฐ ์์ ์ ํ ๋ฒ์ ์ํํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค.
๐ ์ ๊ณต๋ ์๊ตฌ์ฌํญ ๋ฒ์ ๋ด์์๋ ํธ๋ฆผ๊ณผ ์ด์ด ๋ถ์ด๊ธฐ ์์ ์ด ์์ฐจ์ ์ผ๋ก(ํ ๋ฒ์) ์ฒ๋ฆฌ๋๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ฉด ์ถฉ๋ถํ ๊ฒ์ผ๋ก ํ๋จ.
์คํ ์ UI | ์คํ ํ UI |
---|---|
๐ ์ธ๊ธ๋ ์๊ตฌ์ฌํญ์ ์ฌ์ฉ์๊ฐ ์ด์ ์ ์์ฒญํ ๋ชจ๋ ํธ๋ฆผ ๋ฐ ์ด์ด๋ถ์ด๊ธฐ ์์ ์ ํ ๋ฒ์ ์ํํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค.
๐ ์ ๊ณต๋ ์๊ตฌ์ฌํญ ๋ฒ์ ๋ด์์๋ ํธ๋ฆผ๊ณผ ์ด์ด ๋ถ์ด๊ธฐ ์์ ์ด ์์ฐจ์ ์ผ๋ก(ํ ๋ฒ์) ์ฒ๋ฆฌ๋๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ฉด ์ถฉ๋ถํ ๊ฒ์ผ๋ก ํ๋จ.
์คํ ์ UI | ์คํ ํ UI |
---|---|
์คํ ์ UI | ์คํ ํ UI |
---|---|
๐ ์ฐธ๊ณ Link
HTTP Method | URI | Description |
---|---|---|
POST |
/api/videos |
๋์์ ์ ๋ก๋ |
POST |
/api/videos/{id}/trim |
๋ช
๋ น ๋์์ ์ปท ํธ์ง (Trim) |
POST |
/api/videos/concat |
๋ช
๋ น ๋์์ ์ด์ด ๋ถ์ด๊ธฐ (Concat) |
POST |
/api/jobs/execute |
๋ช
๋ น ์์
์ํ |
GET |
/api/videos/{id}/download |
์ต์ข ๋์์ ๋ค์ด๋ก๋ |
GET |
/api/videos |
๋์์ ๋ฐ ์์ ์กฐํ |
Tag | Description |
---|---|
feat |
์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค. |
fix |
๋ฒ๊ทธ๋ฅผ ์์ ํ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค. |
refactor |
์ฝ๋ ๋ฆฌํฉํ ๋งํ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค. |
style |
์ฝ๋ ํ์, ์ ๋ ฌ, ์ฃผ์ ๋ฑ์ ๋ณ๊ฒฝ(๋์์ ์ํฅ์ ์ฃผ๋ ์ฝ๋ ๋ณ๊ฒฝ ์์)ํ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค. |
test |
ํ ์คํธ ์ถ๊ฐ, ํ ์คํธ ๋ฆฌํฉํ ๋ง(์ ํ ์ฝ๋ ์์ ์์, ํ ์คํธ ์ฝ๋์ ๊ด๋ จ๋ ๋ชจ๋ ๋ณ๊ฒฝ์ ํด๋น)ํ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค. |
docs |
๋ฌธ์๋ฅผ ์์ (์ ํ ์ฝ๋ ์์ ์์)ํ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค. |
chore |
๋น๋ ์ ๋ฌด ์์ , ํจํค์ง ๋งค๋์ ์ค์ ๋ฑ ์์ ํด๋น๋์ง ์๋ ๋ชจ๋ ๋ณ๊ฒฝ(์ ํ ์ฝ๋ ์์ ์์)์ผ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค. |