Easy setup ffmpeg encoder to AWS using vagrant
- Vagrant
>=2.0
- vagrant-aws
- install command:
vagrant plugin install vagrant-aws
- install command:
- dotenv
- install command:
vagrant plugin install dotenv
- install command:
- vagrant-rsync-back
- install command:
vagrant plugin install vagrant-rsync-back
- install command:
- rsync
Please make .env
file with reference to .env.example
echo EOF > .env
# EC2 Auth Config
EC2_ACCESS_KEY_ID="AAAAAAAAAAAAAA"
EC2_SECRET_ACCESS_KEY="xxxxxxxxxxxxxxxxxxxxxx"
EC2_KEYPAIR="foo"
SSH_KEY_PATH="~/.ssh/foo.pem)"
# VM Config(no need to be changed)
EC2_REGION="us-west-2" # US West Oregon
EC2_INSTANCE_TYPE="c4.8xlarge"
EC2_AMI="ami-01ed306a12b7d1c96" # CentOS 7
EC2_USERNAME="centos"
EOF
Note:
If you don't change Vagrantfile
about Security Group, it is connected default VPC and default Security Group.
So if not accept ssh connection in your default Security Group, it does not work properly.
If you want to encode easily, please run this command:
./easy_encode.sh
This will start the instance and encode input/*.mp4
to output/*.mp4
using ffmpeg(libx264), then destroy the instance.
Note: if you want change encode config, please edit easy_encode.sh
.
You can start instance at AWS(us-west-2) with just one line of command:
vagrant up
You can connect instance using ssh:
vagrant ssh
If you want sync files, please run those commands.
Host:./sync_folder/*
-> AWS:/sync_folder
:
vagrant rsync
AWS:/sync_folder/*
-> Host:./sync_folder
:
vagrant rsync-back
WARN: It is the sync. So it might erase your data. (Use at your own risk.)
When this command run, you can encode using av1 encoder(libaom).
( sync_folder/test_input.mp4
-> sync_folder/test_output.mp4
)
vagrant rsync \
&& vagrant ssh -- -t \
'ffmpeg \\
-i /sync_folder/test_input.mp4 \\
-c:v libaom-av1 \\
-strict experimental \\
-row-mt 1 \\
-cpu-used 1 \\
-crf 30 \\
-b:v 2000k \\
-c:a libopus \\
-ac 2 \\
-ar 48000 \\
-b:a 128k \\
/sync_folder/test_output.mp4' \
&& vagrant rsync-back
When this command run, you can encode using x264 encoder(libx264).
( sync_folder/test_input.mp4
-> sync_folder/test_output.mp4
)
vagrant rsync \
&& vagrant ssh -- -t \
'ffmpeg -i "/sync_folder/test_input.mp4" \\
-crf 30 \\
-c:v libx264 \\
-b:v 2000k \\
-profile:v main \\
-preset:v veryfast \\
-c:a libmp3lame \\
-b:a 128k \\
-ac 2 \\
-ar 48000 \\
"/sync_folder/test_output.mp4"' \
&& vagrant rsync-back
When this command run, you can encode using VP9 encoder(libvpx).
( sync_folder/test_input.mp4
-> sync_folder/test_output.mp4
)
vagrant rsync \
&& vagrant ssh -- -t \
'ffmpeg -i "/sync_folder/test_input.mp4" \\
-crf 30 \\
-strict -2 \\
-c:v libvpx-vp9 \\
-b:v 2000k \\
-c:a libopus \\
-b:a 128k \\
-ac 2 \\
-ar 48000 \\
"/sync_folder/test_output.mp4"' \
&& vagrant rsync-back
vagrant destroy
Note: When run this command, it does not delete the storage(EBS). If you want delete the storage(EBS), please delete that at AWS Console yourself.
Please change FREE_FLAG
in Vagrantfile
(Ln: 30)
...
shell.inline = <<-SHELL
export FREE_FLAG=FALSE
yum -y install \
...
WARN: Please set after understanding the license about ffmpeg.
After vagrant up
, you can check ffmpeg configured result(license) by /sync_folder/ffmpeg_cofigure.txt
@AWS .