SlideShare a Scribd company logo
1 of 147
Video Transcoding at the
ABC with microservices
Daphne Chong
@daphnechong
media
transcoder
1. What is Transcoding?
2. Architecture
3. Autoscaling transcoders
4. Costs
5. Future roadmap
1. What is Transcoding?
2. Architecture
3. Autoscaling transcoders
4. Costs
5. Future roadmap
What changes
are we making?
High speed
Medium speed
Low speed
Standard Encoding
H.264 MP4
Transcoding
Example
Step 1: Prepare watermark
Step 1: Prepare watermark
Step 1: Prepare watermark
Step 2: Input video (GXF)
Step 3: Asymmetrical cropping
Step 4: Scale and set aspect ratio
Step 5: Apply watermark
Step 6: Audio Normalization
Original file audio track
After audio normalization
Step 7: Combine changes
Step 8: Split into segments
That’s a lot of
changes...
Transcoding
Profiles
GXF
Profile:
- Renditions (6)
- Crop
- Normalize audio
- Adjust ratio
- Add watermark
- GXF to MP4
GXF
GXF
MOV
Profile:
- Renditions (4)
- Adjust ratio
- ProRes MOV to MP4
GXF
MOV
./ffmpeg -i input.gxf output.mp4
./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
./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
./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
./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
./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
./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
./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
./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
./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
./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
./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
1. What is Transcoding?
2. Architecture
3. Autoscaling transcoders
4. Costs
5. Future roadmap
1. What is Transcoding?
2. Architecture
3. Autoscaling transcoders
4. Costs
5. Future roadmap
Workflow
8 minutes 27 seconds
Original
length
Time to produce rendition
60 min
7 min
42 min
Lowest
Quality
Highest
Quality
AWS & Languages
Languages:
Node.js
Go
RDS - state storage
EC2 - instances
SQS - messaging
S3 - file storage
SNS - notifications
AWS Infrastructure:
Advantages
Deployments
Independent scaling
Really easy to expand
Clear responsibilities
Challenges
Deployments
General overhead
1. What is Transcoding?
2. Architecture
3. Autoscaling transcoders
4. Costs
5. Future optimizations
1. What is Transcoding?
2. Architecture
3. Autoscaling transcoders
4. Costs
5. Future optimizations
When should
you scale?
Scaling Considerations:
Content priority
Ad-hoc requests
Varied content length
AWS Considerations:
Hourly billing
Cost vs Speed
Fleet reaction time
Scaling down
MVP:
Don’t make things wait
too long
MVP:
Supply enough
capacity at all times
GXF
Profile:
- Renditions (6)
- Crop
- Normalize audio
- Adjust ratio
- Add watermark
- GXF to MP4
var autoscaling = new AWS.AutoScaling(...);
var params = {
AutoScalingGroupName: groupName,
DesiredCapacity: capacity
Some white text
};
autoscaling.setDesiredCapacity(params, ...);
var autoscaling = new AWS.AutoScaling(...);
var params = {
AutoScalingGroupName: groupName,
DesiredCapacity: capacity
Some white text
};
autoscaling.setDesiredCapacity(params, ...);
Which instance size?
Time vs Cost
for 1 hour of content
Time Cost
?
Time vs Cost
for 1 hour of content
Time Cost
?
Winner:
c4.xlarge
When to scale down?
Up: step scaling
Down: stop everything
An interesting puzzle :)
1. What is Transcoding?
2. Architecture
3. Autoscaling transcoders
4. Costs
5. Future optimizations
1. What is Transcoding?
2. Architecture
3. Autoscaling transcoders
4. Costs
5. Future optimizations
What about
commercial transcode
providers?
Full-Service
Transcoding
$(a lot)
DIY on-demand
$45k
Metro’s costs?
$11.2k
Some daily examples
(10am - 10am)
$42.86
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
Next 24 hours
$25.93
1. What is Transcoding?
2. Architecture
3. Autoscaling transcoders
4. Costs
5. Future optimizations
1. What is Transcoding?
2. Architecture
3. Autoscaling transcoders
4. Costs
5. Future optimizations
Throughput
optimizations
Transcoding in
chunks/segments
Introspection &
Validation
GXF
Profile:
- Crop
- Normalize audio
- Adjust ratio
- Add watermark
- GXF to MP4
ffprobe
1. What is Transcoding?
2. Architecture
3. Autoscaling transcoders
4. Costs
5. Future optimizations
Summary
8 minutes 27 seconds
$11.2k
@daphnechong
Thanks!
Video Transcoding at the ABC with Microservices at GOTO Chicago

More Related Content

What's hot

Early Results of OpenMP 4.5 Portability on NVIDIA GPUs & CPUs
Early Results of OpenMP 4.5 Portability on NVIDIA GPUs & CPUsEarly Results of OpenMP 4.5 Portability on NVIDIA GPUs & CPUs
Early Results of OpenMP 4.5 Portability on NVIDIA GPUs & CPUsJeff Larkin
 
Compare Performance-power of Arm Cortex vs RISC-V for AI applications_oct_2021
Compare Performance-power of Arm Cortex vs RISC-V for AI applications_oct_2021Compare Performance-power of Arm Cortex vs RISC-V for AI applications_oct_2021
Compare Performance-power of Arm Cortex vs RISC-V for AI applications_oct_2021Deepak Shankar
 
Odsc workshop - Distributed Tensorflow on Hops
Odsc workshop - Distributed Tensorflow on HopsOdsc workshop - Distributed Tensorflow on Hops
Odsc workshop - Distributed Tensorflow on HopsJim Dowling
 
JavaOne 2015 Java Mixed-Mode Flame Graphs
JavaOne 2015 Java Mixed-Mode Flame GraphsJavaOne 2015 Java Mixed-Mode Flame Graphs
JavaOne 2015 Java Mixed-Mode Flame GraphsBrendan Gregg
 
The Next Linux Superpower: eBPF Primer
The Next Linux Superpower: eBPF PrimerThe Next Linux Superpower: eBPF Primer
The Next Linux Superpower: eBPF PrimerSasha Goldshtein
 
Modern Linux Tracing Landscape
Modern Linux Tracing LandscapeModern Linux Tracing Landscape
Modern Linux Tracing LandscapeSasha Goldshtein
 
Linux 4.x Tracing Tools: Using BPF Superpowers
Linux 4.x Tracing Tools: Using BPF SuperpowersLinux 4.x Tracing Tools: Using BPF Superpowers
Linux 4.x Tracing Tools: Using BPF SuperpowersBrendan Gregg
 
Fluency - Yet another fluent logger
Fluency - Yet another fluent loggerFluency - Yet another fluent logger
Fluency - Yet another fluent loggerMitsunori Komatsu
 
The Joy of Server Side Swift Development
The Joy  of Server Side Swift DevelopmentThe Joy  of Server Side Swift Development
The Joy of Server Side Swift DevelopmentGiordano Scalzo
 
Scaling TensorFlow with Hops, Global AI Conference Santa Clara
Scaling TensorFlow with Hops, Global AI Conference Santa ClaraScaling TensorFlow with Hops, Global AI Conference Santa Clara
Scaling TensorFlow with Hops, Global AI Conference Santa ClaraJim Dowling
 
Scaling out Tensorflow-as-a-Service on Spark and Commodity GPUs
Scaling out Tensorflow-as-a-Service on Spark and Commodity GPUsScaling out Tensorflow-as-a-Service on Spark and Commodity GPUs
Scaling out Tensorflow-as-a-Service on Spark and Commodity GPUsJim Dowling
 
Atlanta Spark User Meetup 09 22 2016
Atlanta Spark User Meetup 09 22 2016Atlanta Spark User Meetup 09 22 2016
Atlanta Spark User Meetup 09 22 2016Chris Fregly
 
DockerCon EU '17 - Dockerizing Aurea
DockerCon EU '17 - Dockerizing AureaDockerCon EU '17 - Dockerizing Aurea
DockerCon EU '17 - Dockerizing AureaŁukasz Piątkowski
 
Linux Profiling at Netflix
Linux Profiling at NetflixLinux Profiling at Netflix
Linux Profiling at NetflixBrendan Gregg
 

What's hot (19)

Early Results of OpenMP 4.5 Portability on NVIDIA GPUs & CPUs
Early Results of OpenMP 4.5 Portability on NVIDIA GPUs & CPUsEarly Results of OpenMP 4.5 Portability on NVIDIA GPUs & CPUs
Early Results of OpenMP 4.5 Portability on NVIDIA GPUs & CPUs
 
OpenCL Heterogeneous Parallel Computing
OpenCL Heterogeneous Parallel ComputingOpenCL Heterogeneous Parallel Computing
OpenCL Heterogeneous Parallel Computing
 
Compare Performance-power of Arm Cortex vs RISC-V for AI applications_oct_2021
Compare Performance-power of Arm Cortex vs RISC-V for AI applications_oct_2021Compare Performance-power of Arm Cortex vs RISC-V for AI applications_oct_2021
Compare Performance-power of Arm Cortex vs RISC-V for AI applications_oct_2021
 
Odsc workshop - Distributed Tensorflow on Hops
Odsc workshop - Distributed Tensorflow on HopsOdsc workshop - Distributed Tensorflow on Hops
Odsc workshop - Distributed Tensorflow on Hops
 
JavaOne 2015 Java Mixed-Mode Flame Graphs
JavaOne 2015 Java Mixed-Mode Flame GraphsJavaOne 2015 Java Mixed-Mode Flame Graphs
JavaOne 2015 Java Mixed-Mode Flame Graphs
 
The Next Linux Superpower: eBPF Primer
The Next Linux Superpower: eBPF PrimerThe Next Linux Superpower: eBPF Primer
The Next Linux Superpower: eBPF Primer
 
Modern Linux Tracing Landscape
Modern Linux Tracing LandscapeModern Linux Tracing Landscape
Modern Linux Tracing Landscape
 
Linux 4.x Tracing Tools: Using BPF Superpowers
Linux 4.x Tracing Tools: Using BPF SuperpowersLinux 4.x Tracing Tools: Using BPF Superpowers
Linux 4.x Tracing Tools: Using BPF Superpowers
 
November 2014 HUG: Apache Pig 0.14
November 2014 HUG: Apache Pig 0.14 November 2014 HUG: Apache Pig 0.14
November 2014 HUG: Apache Pig 0.14
 
Fluency - Yet another fluent logger
Fluency - Yet another fluent loggerFluency - Yet another fluent logger
Fluency - Yet another fluent logger
 
The Joy of Server Side Swift Development
The Joy  of Server Side Swift DevelopmentThe Joy  of Server Side Swift Development
The Joy of Server Side Swift Development
 
Iptables
IptablesIptables
Iptables
 
Scaling TensorFlow with Hops, Global AI Conference Santa Clara
Scaling TensorFlow with Hops, Global AI Conference Santa ClaraScaling TensorFlow with Hops, Global AI Conference Santa Clara
Scaling TensorFlow with Hops, Global AI Conference Santa Clara
 
Introduction to SLURM
Introduction to SLURMIntroduction to SLURM
Introduction to SLURM
 
Scaling out Tensorflow-as-a-Service on Spark and Commodity GPUs
Scaling out Tensorflow-as-a-Service on Spark and Commodity GPUsScaling out Tensorflow-as-a-Service on Spark and Commodity GPUs
Scaling out Tensorflow-as-a-Service on Spark and Commodity GPUs
 
Atlanta Spark User Meetup 09 22 2016
Atlanta Spark User Meetup 09 22 2016Atlanta Spark User Meetup 09 22 2016
Atlanta Spark User Meetup 09 22 2016
 
DockerCon EU '17 - Dockerizing Aurea
DockerCon EU '17 - Dockerizing AureaDockerCon EU '17 - Dockerizing Aurea
DockerCon EU '17 - Dockerizing Aurea
 
Linux Profiling at Netflix
Linux Profiling at NetflixLinux Profiling at Netflix
Linux Profiling at Netflix
 
Otimizando seu projeto Rails
Otimizando seu projeto RailsOtimizando seu projeto Rails
Otimizando seu projeto Rails
 

Similar to Video Transcoding at the ABC with Microservices at GOTO Chicago

DUG'20: 12 - DAOS in Lenovo’s HPC Innovation Center
DUG'20: 12 - DAOS in Lenovo’s HPC Innovation CenterDUG'20: 12 - DAOS in Lenovo’s HPC Innovation Center
DUG'20: 12 - DAOS in Lenovo’s HPC Innovation CenterAndrey Kudryavtsev
 
What’s new in Visual C++
What’s new in Visual C++What’s new in Visual C++
What’s new in Visual C++Microsoft
 
Scylla Summit 2022: ScyllaDB Rust Driver: One Driver to Rule Them All
Scylla Summit 2022: ScyllaDB Rust Driver: One Driver to Rule Them AllScylla Summit 2022: ScyllaDB Rust Driver: One Driver to Rule Them All
Scylla Summit 2022: ScyllaDB Rust Driver: One Driver to Rule Them AllScyllaDB
 
Nodejs性能分析优化和分布式设计探讨
Nodejs性能分析优化和分布式设计探讨Nodejs性能分析优化和分布式设计探讨
Nodejs性能分析优化和分布式设计探讨flyinweb
 
Optimizing InfluxDB Performance in the Real World by Dean Sheehan, Senior Dir...
Optimizing InfluxDB Performance in the Real World by Dean Sheehan, Senior Dir...Optimizing InfluxDB Performance in the Real World by Dean Sheehan, Senior Dir...
Optimizing InfluxDB Performance in the Real World by Dean Sheehan, Senior Dir...InfluxData
 
Deep Learning, Microsoft Cognitive Toolkit (CNTK) and Azure Machine Learning ...
Deep Learning, Microsoft Cognitive Toolkit (CNTK) and Azure Machine Learning ...Deep Learning, Microsoft Cognitive Toolkit (CNTK) and Azure Machine Learning ...
Deep Learning, Microsoft Cognitive Toolkit (CNTK) and Azure Machine Learning ...Naoki (Neo) SATO
 
XDP in Practice: DDoS Mitigation @Cloudflare
XDP in Practice: DDoS Mitigation @CloudflareXDP in Practice: DDoS Mitigation @Cloudflare
XDP in Practice: DDoS Mitigation @CloudflareC4Media
 
Intro to Spark - for Denver Big Data Meetup
Intro to Spark - for Denver Big Data MeetupIntro to Spark - for Denver Big Data Meetup
Intro to Spark - for Denver Big Data MeetupGwen (Chen) Shapira
 
R the unsung hero of Big Data
R the unsung hero of Big DataR the unsung hero of Big Data
R the unsung hero of Big DataDhafer Malouche
 
Labs_BT_20221017.pptx
Labs_BT_20221017.pptxLabs_BT_20221017.pptx
Labs_BT_20221017.pptxssuserb4d806
 
Node.js - Advanced Basics
Node.js - Advanced BasicsNode.js - Advanced Basics
Node.js - Advanced BasicsDoug Jones
 
Containerizing Distributed Pipes
Containerizing Distributed PipesContainerizing Distributed Pipes
Containerizing Distributed Pipesinside-BigData.com
 
OpenStack API's and WSGI
OpenStack API's and WSGIOpenStack API's and WSGI
OpenStack API's and WSGIMike Pittaro
 
What's New in Apache Spark 2.3 & Why Should You Care
What's New in Apache Spark 2.3 & Why Should You CareWhat's New in Apache Spark 2.3 & Why Should You Care
What's New in Apache Spark 2.3 & Why Should You CareDatabricks
 
Linux Systems Performance 2016
Linux Systems Performance 2016Linux Systems Performance 2016
Linux Systems Performance 2016Brendan Gregg
 
Tweaking perfomance on high-load projects_Думанский Дмитрий
Tweaking perfomance on high-load projects_Думанский ДмитрийTweaking perfomance on high-load projects_Думанский Дмитрий
Tweaking perfomance on high-load projects_Думанский ДмитрийGeeksLab Odessa
 

Similar to Video Transcoding at the ABC with Microservices at GOTO Chicago (20)

DUG'20: 12 - DAOS in Lenovo’s HPC Innovation Center
DUG'20: 12 - DAOS in Lenovo’s HPC Innovation CenterDUG'20: 12 - DAOS in Lenovo’s HPC Innovation Center
DUG'20: 12 - DAOS in Lenovo’s HPC Innovation Center
 
What’s new in Visual C++
What’s new in Visual C++What’s new in Visual C++
What’s new in Visual C++
 
Scylla Summit 2022: ScyllaDB Rust Driver: One Driver to Rule Them All
Scylla Summit 2022: ScyllaDB Rust Driver: One Driver to Rule Them AllScylla Summit 2022: ScyllaDB Rust Driver: One Driver to Rule Them All
Scylla Summit 2022: ScyllaDB Rust Driver: One Driver to Rule Them All
 
Nodejs性能分析优化和分布式设计探讨
Nodejs性能分析优化和分布式设计探讨Nodejs性能分析优化和分布式设计探讨
Nodejs性能分析优化和分布式设计探讨
 
Optimizing InfluxDB Performance in the Real World by Dean Sheehan, Senior Dir...
Optimizing InfluxDB Performance in the Real World by Dean Sheehan, Senior Dir...Optimizing InfluxDB Performance in the Real World by Dean Sheehan, Senior Dir...
Optimizing InfluxDB Performance in the Real World by Dean Sheehan, Senior Dir...
 
Deep Learning, Microsoft Cognitive Toolkit (CNTK) and Azure Machine Learning ...
Deep Learning, Microsoft Cognitive Toolkit (CNTK) and Azure Machine Learning ...Deep Learning, Microsoft Cognitive Toolkit (CNTK) and Azure Machine Learning ...
Deep Learning, Microsoft Cognitive Toolkit (CNTK) and Azure Machine Learning ...
 
XDP in Practice: DDoS Mitigation @Cloudflare
XDP in Practice: DDoS Mitigation @CloudflareXDP in Practice: DDoS Mitigation @Cloudflare
XDP in Practice: DDoS Mitigation @Cloudflare
 
Intro to Spark - for Denver Big Data Meetup
Intro to Spark - for Denver Big Data MeetupIntro to Spark - for Denver Big Data Meetup
Intro to Spark - for Denver Big Data Meetup
 
Dpdk performance
Dpdk performanceDpdk performance
Dpdk performance
 
Quic illustrated
Quic illustratedQuic illustrated
Quic illustrated
 
R the unsung hero of Big Data
R the unsung hero of Big DataR the unsung hero of Big Data
R the unsung hero of Big Data
 
Labs_BT_20221017.pptx
Labs_BT_20221017.pptxLabs_BT_20221017.pptx
Labs_BT_20221017.pptx
 
Node.js - Advanced Basics
Node.js - Advanced BasicsNode.js - Advanced Basics
Node.js - Advanced Basics
 
Containerizing Distributed Pipes
Containerizing Distributed PipesContainerizing Distributed Pipes
Containerizing Distributed Pipes
 
OpenStack API's and WSGI
OpenStack API's and WSGIOpenStack API's and WSGI
OpenStack API's and WSGI
 
What's New in Apache Spark 2.3 & Why Should You Care
What's New in Apache Spark 2.3 & Why Should You CareWhat's New in Apache Spark 2.3 & Why Should You Care
What's New in Apache Spark 2.3 & Why Should You Care
 
Linux Systems Performance 2016
Linux Systems Performance 2016Linux Systems Performance 2016
Linux Systems Performance 2016
 
Load testing with Blitz
Load testing with BlitzLoad testing with Blitz
Load testing with Blitz
 
Tweaking perfomance on high-load projects_Думанский Дмитрий
Tweaking perfomance on high-load projects_Думанский ДмитрийTweaking perfomance on high-load projects_Думанский Дмитрий
Tweaking perfomance on high-load projects_Думанский Дмитрий
 
R and cpp
R and cppR and cpp
R and cpp
 

Recently uploaded

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024SynarionITSolutions
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 

Recently uploaded (20)

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 

Video Transcoding at the ABC with Microservices at GOTO Chicago

  • 1. Video Transcoding at the ABC with microservices Daphne Chong @daphnechong
  • 2.
  • 3.
  • 4.
  • 5.
  • 7. 1. What is Transcoding? 2. Architecture 3. Autoscaling transcoders 4. Costs 5. Future roadmap
  • 8. 1. What is Transcoding? 2. Architecture 3. Autoscaling transcoders 4. Costs 5. Future roadmap
  • 9.
  • 11.
  • 12.
  • 16. Step 1: Prepare watermark
  • 17. Step 1: Prepare watermark
  • 18. Step 1: Prepare watermark
  • 19. Step 2: Input video (GXF)
  • 21. Step 4: Scale and set aspect ratio
  • 22. Step 5: Apply watermark
  • 23. Step 6: Audio Normalization
  • 26. Step 7: Combine changes
  • 27. Step 8: Split into segments
  • 28. That’s a lot of changes...
  • 30. GXF Profile: - Renditions (6) - Crop - Normalize audio - Adjust ratio - Add watermark - GXF to MP4
  • 31. GXF
  • 32. GXF MOV Profile: - Renditions (4) - Adjust ratio - ProRes MOV to MP4
  • 34.
  • 35. ./ffmpeg -i input.gxf output.mp4
  • 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
  • 47. 1. What is Transcoding? 2. Architecture 3. Autoscaling transcoders 4. Costs 5. Future roadmap
  • 48. 1. What is Transcoding? 2. Architecture 3. Autoscaling transcoders 4. Costs 5. Future roadmap
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65. 8 minutes 27 seconds
  • 66. Original length Time to produce rendition 60 min 7 min 42 min Lowest Quality Highest Quality
  • 69.
  • 70.
  • 71. RDS - state storage EC2 - instances SQS - messaging S3 - file storage SNS - notifications AWS Infrastructure:
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77. Advantages Deployments Independent scaling Really easy to expand Clear responsibilities
  • 79. 1. What is Transcoding? 2. Architecture 3. Autoscaling transcoders 4. Costs 5. Future optimizations
  • 80. 1. What is Transcoding? 2. Architecture 3. Autoscaling transcoders 4. Costs 5. Future optimizations
  • 81.
  • 83. Scaling Considerations: Content priority Ad-hoc requests Varied content length
  • 84. AWS Considerations: Hourly billing Cost vs Speed Fleet reaction time Scaling down
  • 85. MVP: Don’t make things wait too long
  • 87. GXF Profile: - Renditions (6) - Crop - Normalize audio - Adjust ratio - Add watermark - GXF to MP4
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93. var autoscaling = new AWS.AutoScaling(...); var params = { AutoScalingGroupName: groupName, DesiredCapacity: capacity Some white text }; autoscaling.setDesiredCapacity(params, ...);
  • 94. var autoscaling = new AWS.AutoScaling(...); var params = { AutoScalingGroupName: groupName, DesiredCapacity: capacity Some white text }; autoscaling.setDesiredCapacity(params, ...);
  • 96. Time vs Cost for 1 hour of content Time Cost ?
  • 97. Time vs Cost for 1 hour of content Time Cost ?
  • 99. When to scale down?
  • 100. Up: step scaling Down: stop everything
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 107. 1. What is Transcoding? 2. Architecture 3. Autoscaling transcoders 4. Costs 5. Future optimizations
  • 108. 1. What is Transcoding? 2. Architecture 3. Autoscaling transcoders 4. Costs 5. Future optimizations
  • 113.
  • 114. $45k
  • 116. $11.2k
  • 119. $42.86
  • 120. 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
  • 122. $25.93
  • 123.
  • 124. 1. What is Transcoding? 2. Architecture 3. Autoscaling transcoders 4. Costs 5. Future optimizations
  • 125. 1. What is Transcoding? 2. Architecture 3. Autoscaling transcoders 4. Costs 5. Future optimizations
  • 127.
  • 128.
  • 130.
  • 132. GXF Profile: - Crop - Normalize audio - Adjust ratio - Add watermark - GXF to MP4
  • 134.
  • 135.
  • 136.
  • 137. 1. What is Transcoding? 2. Architecture 3. Autoscaling transcoders 4. Costs 5. Future optimizations
  • 139.
  • 140.
  • 141.
  • 142.
  • 143. 8 minutes 27 seconds
  • 144. $11.2k
  • 145.