Weitere ähnliche Inhalte Ähnlich wie Video Transcoding at Scale for ABC iview (NDC Sydney) (20) Kürzlich hochgeladen (20) Video Transcoding at Scale for ABC iview (NDC Sydney)6. 1. What is Transcoding?
2. Why build our own system?
3. Architecture
4. Technology choices
5. Autoscaling transcoders
6. Costs
7. Future roadmap
7. 1. What is Transcoding?
2. Why build our own system?
3. Architecture
4. Technology choices
5. Autoscaling transcoders
6. Costs
7. Future roadmap
36. ./ffmpeg -i INPUT -c:v libx264 -filter_complex
"[0:v]crop=720:576:0:32,yadif,scale=1024x576,setdar=16/9[ma
in], [1:v]scale=54:-1[ovrl],
[main][ovrl]overlay=main_w-overlay_w-47:main_h-overlay_h-44
" -crf 22 -maxrate 1404k -bufsize 1500k -pix_fmt yuv420p
-profile:v high -level 4.0 -refs 3 -r 25 -g 50 -c:a
libfdk_aac -b:a 96k -filter_complex "[0:a:0][0:a:1]
amerge=inputs=2,
dynaudnorm=f=500:g=31:p=0.82:m=30.0:r=0.0:s=0.0 [aout]" -ar
44100 -ac 2 -map 0:0 -map "[aout]" -movflags +faststart
-threads 0 -y OUTPUT
In reality, it looks like this
37. ./ffmpeg -i INPUT -c:v libx264 -filter_complex
"[0:v]crop=720:576:0:32,yadif,scale=1024x576,setdar=16/9[ma
in], [1:v]scale=54:-1[ovrl],
[main][ovrl]overlay=main_w-overlay_w-47:main_h-overlay_h-44
" -crf 22 -maxrate 1404k -bufsize 1500k -pix_fmt yuv420p
-profile:v high -level 4.0 -refs 3 -r 25 -g 50 -c:a
libfdk_aac -b:a 96k -filter_complex "[0:a:0][0:a:1]
amerge=inputs=2,
dynaudnorm=f=500:g=31:p=0.82:m=30.0:r=0.0:s=0.0 [aout]" -ar
44100 -ac 2 -map 0:0 -map "[aout]" -movflags +faststart
-threads 0 -y OUTPUT
In reality, it looks like this
38. ./ffmpeg -i INPUT -c:v libx264 -filter_complex
"[0:v]crop=720:576:0:32,yadif,scale=1024x576,setdar=16/9[ma
in], [1:v]scale=54:-1[ovrl],
[main][ovrl]overlay=main_w-overlay_w-47:main_h-overlay_h-44
" -crf 22 -maxrate 1404k -bufsize 1500k -pix_fmt yuv420p
-profile:v high -level 4.0 -refs 3 -r 25 -g 50 -c:a
libfdk_aac -b:a 96k -filter_complex "[0:a:0][0:a:1]
amerge=inputs=2,
dynaudnorm=f=500:g=31:p=0.82:m=30.0:r=0.0:s=0.0 [aout]" -ar
44100 -ac 2 -map 0:0 -map "[aout]" -movflags +faststart
-threads 0 -y OUTPUT
In reality, it looks like this
39. ./ffmpeg -i INPUT -c:v libx264 -filter_complex
"[0:v]crop=720:576:0:32,yadif,scale=1024x576,setdar=16/9[ma
in], [1:v]scale=54:-1[ovrl],
[main][ovrl]overlay=main_w-overlay_w-47:main_h-overlay_h-44
" -crf 22 -maxrate 1404k -bufsize 1500k -pix_fmt yuv420p
-profile:v high -level 4.0 -refs 3 -r 25 -g 50 -c:a
libfdk_aac -b:a 96k -filter_complex "[0:a:0][0:a:1]
amerge=inputs=2,
dynaudnorm=f=500:g=31:p=0.82:m=30.0:r=0.0:s=0.0 [aout]" -ar
44100 -ac 2 -map 0:0 -map "[aout]" -movflags +faststart
-threads 0 -y OUTPUT
In reality, it looks like this
40. ./ffmpeg -i INPUT -c:v libx264 -filter_complex
"[0:v]crop=720:576:0:32,yadif,scale=1024x576,setdar=16/9[ma
in], [1:v]scale=54:-1[ovrl],
[main][ovrl]overlay=main_w-overlay_w-47:main_h-overlay_h-44
" -crf 22 -maxrate 1404k -bufsize 1500k -pix_fmt yuv420p
-profile:v high -level 4.0 -refs 3 -r 25 -g 50 -c:a
libfdk_aac -b:a 96k -filter_complex "[0:a:0][0:a:1]
amerge=inputs=2,
dynaudnorm=f=500:g=31:p=0.82:m=30.0:r=0.0:s=0.0 [aout]" -ar
44100 -ac 2 -map 0:0 -map "[aout]" -movflags +faststart
-threads 0 -y OUTPUT
In reality, it looks like this
41. ./ffmpeg -i INPUT -c:v libx264 -filter_complex
"[0:v]crop=720:576:0:32,yadif,scale=1024x576,setdar=16/9[ma
in], [1:v]scale=54:-1[ovrl],
[main][ovrl]overlay=main_w-overlay_w-47:main_h-overlay_h-44
" -crf 22 -maxrate 1404k -bufsize 1500k -pix_fmt yuv420p
-profile:v high -level 4.0 -refs 3 -r 25 -g 50 -c:a
libfdk_aac -b:a 96k -filter_complex "[0:a:0][0:a:1]
amerge=inputs=2,
dynaudnorm=f=500:g=31:p=0.82:m=30.0:r=0.0:s=0.0 [aout]" -ar
44100 -ac 2 -map 0:0 -map "[aout]" -movflags +faststart
-threads 0 -y OUTPUT
In reality, it looks like this
42. ./ffmpeg -i INPUT -c:v libx264 -filter_complex
"[0:v]crop=720:576:0:32,yadif,scale=1024x576,setdar=16/9[ma
in], [1:v]scale=54:-1[ovrl],
[main][ovrl]overlay=main_w-overlay_w-47:main_h-overlay_h-44
" -crf 22 -maxrate 1404k -bufsize 1500k -pix_fmt yuv420p
-profile:v high -level 4.0 -refs 3 -r 25 -g 50 -c:a
libfdk_aac -b:a 96k -filter_complex "[0:a:0][0:a:1]
amerge=inputs=2,
dynaudnorm=f=500:g=31:p=0.82:m=30.0:r=0.0:s=0.0 [aout]" -ar
44100 -ac 2 -map 0:0 -map "[aout]" -movflags +faststart
-threads 0 -y OUTPUT
In reality, it looks like this
43. ./ffmpeg -i INPUT -c:v libx264 -filter_complex
"[0:v]crop=720:576:0:32,yadif,scale=1024x576,setdar=16/9[ma
in], [1:v]scale=54:-1[ovrl],
[main][ovrl]overlay=main_w-overlay_w-47:main_h-overlay_h-44
" -crf 22 -maxrate 1404k -bufsize 1500k -pix_fmt yuv420p
-profile:v high -level 4.0 -refs 3 -r 25 -g 50 -c:a
libfdk_aac -b:a 96k -filter_complex "[0:a:0][0:a:1]
amerge=inputs=2,
dynaudnorm=f=500:g=31:p=0.82:m=30.0:r=0.0:s=0.0 [aout]" -ar
44100 -ac 2 -map 0:0 -map "[aout]" -movflags +faststart
-threads 0 -y OUTPUT
In reality, it looks like this
44. ./ffmpeg -i INPUT -c:v libx264 -filter_complex
"[0:v]crop=720:576:0:32,yadif,scale=1024x576,setdar=16/9[ma
in], [1:v]scale=54:-1[ovrl],
[main][ovrl]overlay=main_w-overlay_w-47:main_h-overlay_h-44
" -crf 22 -maxrate 1404k -bufsize 1500k -pix_fmt yuv420p
-profile:v high -level 4.0 -refs 3 -r 25 -g 50 -c:a
libfdk_aac -b:a 96k -filter_complex "[0:a:0][0:a:1]
amerge=inputs=2,
dynaudnorm=f=500:g=31:p=0.82:m=30.0:r=0.0:s=0.0 [aout]" -ar
44100 -ac 2 -map 0:0 -map "[aout]" -movflags +faststart
-threads 0 -y OUTPUT
In reality, it looks like this
45. ./ffmpeg -i INPUT -c:v libx264 -filter_complex
"[0:v]crop=720:576:0:32,yadif,scale=1024x576,setdar=16/9[ma
in], [1:v]scale=54:-1[ovrl],
[main][ovrl]overlay=main_w-overlay_w-47:main_h-overlay_h-44
" -crf 22 -maxrate 1404k -bufsize 1500k -pix_fmt yuv420p
-profile:v high -level 4.0 -refs 3 -r 25 -g 50 -c:a
libfdk_aac -b:a 96k -filter_complex "[0:a:0][0:a:1]
amerge=inputs=2,
dynaudnorm=f=500:g=31:p=0.82:m=30.0:r=0.0:s=0.0 [aout]" -ar
44100 -ac 2 -map 0:0 -map "[aout]" -movflags +faststart
-threads 0 -y OUTPUT
In reality, it looks like this
46. ./ffmpeg -i INPUT -c:v libx264 -filter_complex
"[0:v]crop=720:576:0:32,yadif,scale=1024x576,setdar=16/9[ma
in], [1:v]scale=54:-1[ovrl],
[main][ovrl]overlay=main_w-overlay_w-47:main_h-overlay_h-44
" -crf 22 -maxrate 1404k -bufsize 1500k -pix_fmt yuv420p
-profile:v high -level 4.0 -refs 3 -r 25 -g 50 -c:a
libfdk_aac -b:a 96k -filter_complex "[0:a:0][0:a:1]
amerge=inputs=2,
dynaudnorm=f=500:g=31:p=0.82:m=30.0:r=0.0:s=0.0 [aout]" -ar
44100 -ac 2 -map 0:0 -map "[aout]" -movflags +faststart
-threads 0 -y OUTPUT
In reality, it looks like this
48. 1. What is Transcoding?
2. Why build our own system?
3. Architecture
4. Technology choices
5. Autoscaling transcoders
6. Costs
7. Future roadmap
49. 1. What is Transcoding?
2. Why build our own system?
3. Architecture
4. Technology choices
5. Autoscaling transcoders
6. Costs
7. Future roadmap
62. 1. What is Transcoding?
2. Why build our own system?
3. Architecture
4. Technology choices
5. Autoscaling transcoders
6. Costs
7. Future roadmap
63. 1. What is Transcoding?
2. Why build our own system?
3. Architecture
4. Technology choices
5. Autoscaling transcoders
6. Costs
7. Future roadmap
83. 1. What is Transcoding?
2. Why build our own system?
3. Architecture
4. Technology choices
5. Autoscaling transcoders
6. Costs
7. Future roadmap
84. 1. What is Transcoding?
2. Why build our own system?
3. Architecture
4. Technology choices
5. Autoscaling transcoders
6. Costs
7. Future roadmap
97. SQS
First in first out (FIFO)
Single consumer per message
Message has “visibility timeout”
Adjustable visibility timeout
105. DynamoDB
Our use case was not optimal
Manual aggregations
Higher cost than expected
Doesn’t scale automatically
109. "ExampleLoadBalancer" : {
"Type" : "AWS::ElasticLoadBalancing::LoadBalancer",
"Properties" : {
"AvailabilityZones" : [ "us-east-1a", "us-east-1b" ],
"Listeners" : [ {
"LoadBalancerPort" : "80",
"InstancePort" : "8081",
"Protocol" : "HTTP"
} ]
}
}
112. 1. What is Transcoding?
2. Why build our own system?
3. Architecture
4. Technology choices
5. Autoscaling transcoders
6. Costs
7. Future roadmap
113. 1. What is Transcoding?
2. Why build our own system?
3. Architecture
4. Technology choices
5. Autoscaling transcoders
6. Costs
7. Future roadmap
128. var autoscaling = new AWS.AutoScaling(...);
var params = {
AutoScalingGroupName: groupName,
DesiredCapacity: capacity
Some white text
};
autoscaling.setDesiredCapacity(params, ...);
129. var autoscaling = new AWS.AutoScaling(...);
var params = {
AutoScalingGroupName: groupName,
DesiredCapacity: capacity
Some white text
};
autoscaling.setDesiredCapacity(params, ...);
141. 1. What is Transcoding?
2. Why build our own system?
3. Architecture
4. Technology choices
5. Autoscaling transcoders
6. Costs
7. Future roadmap
142. 1. What is Transcoding?
2. Why build our own system?
3. Architecture
4. Technology choices
5. Autoscaling transcoders
6. Costs
7. Future roadmap
147. EC2 Instances: $34.31
EC2 (other): $ 4.24
RDS: $ 2.66
S3: $ 1.65
SQS: $ 0.00
Total (USD): $42.86
Transcoding costs: 24 hrs
158. 1. What is Transcoding?
2. Why build our own system?
3. Architecture
4. Technology choices
5. Autoscaling transcoders
6. Costs
7. Future roadmap
159. 1. What is Transcoding?
2. Why build our own system?
3. Architecture
4. Technology choices
5. Autoscaling transcoders
6. Costs
7. Future roadmap
171. 1. What is Transcoding?
2. Why build our own system?
3. Architecture
4. Technology choices
5. Autoscaling transcoders
6. Costs
7. Future roadmap