brew install ffmpeg
go get github.com/imatefx/transcoding
go install github.com/imatefx/transcoding
#Assumes $GOPATH/bin is on your $PATH
transcoding --config ./configs/prod-us-east-1.toml
A basic server implementation is included that offers the facility to transcode uploaded multipart files and some additional admin urls.
GET /transcode
POST /transcode
#Some admin routes
GET /admin
GET /admin/ping
GET /admin/pprof/
GET /admin/pprof/heap
GET /admin/pprof/goroutine
GET /admin/pprof/block
GET /admin/pprof/threadcreate
GET /admin/pprof/cmdline
GET /admin/pprof/profile
GET /admin/pprof/symbol
GET /admin/stats
GET /admin/config
###Transcoding
A useful route is the [POST|GET] /transcode
one, which provided a file and conversion type will return the resulting MP4 file. A sample form is provided at the GET
route, however you can also make use of CLI tools.
brew install http
http -f POST http://localhost:8080/transcode input@~/Downloads/sample.mp4 type=480p > output.mp4
###AWS
The server has a tighter integration with performing Transcoding from files saved in S3 and writting them back out to S3.
The route available is POST /api/transcode
You can specify a sample request based on the following schema:
{
"input": {
"bucket": "videobucket-test",
"key": "input1.mp4"
},
"output": {
"bucket": "videobucket-test",
"key": "output1.mp4"
},
"type": "360p",
"webHook": "http://data-return-server:8081",
"AwsRegion": "ap-south-1",
"AwsAKId": "AWS_Access_Key",
"AwsSecretKey": "AWS_Secret_Key",
"AwsToken": ""
}
THE SERVER MUST HAVE ACCESS TO THE INPUT & OUTPUT BUCKET - SEE AWS BUCKET POLICIES
To make bootstrapping easier for variety of platforms. A Dockerfile is provided which will run the server in a docker container.
#The following commands assumes you are in the package
docker build -t ffmpeg-transcoding-server .
docker run -p 8080:8080 ffmpeg-transcoding-server
#You can now access the server at localhost:8080
#or if you ar on mac osx `docker-machine ip default`
A common scenario is re-encoding a video for streaming over the web. In such a scenario you generally want to transcode to a lower resolution and bitrate.
Resolution is the "sharpness" of the video in question. Filesize is not determined by resolution
filesize (in MB) = (bitrate in Mbit/s * 8) * (video length in seconds) But a larger resolution will require more bitrate for it to keep the same level of "quality"
According to this post here are some general resolution/bitrate guidelines.
Resolution | Bitrate | Approx. File size of 10 minutes |
---|---|---|
320p (mobile) | 180 kbit/s | ~13 MB |
360p | 300 kbit/s | ~22MB |
480p | 500 kbit/s | ~37MB |
576p (PAL) | 850 kbit/s | ~63MB |
720p | 1000 kbit/s | ~75 MB |