Skip to content
Snippets Groups Projects
Commit 7175b713 authored by Liqiang Wang's avatar Liqiang Wang
Browse files

Merge branch 'JVET-AB0053_training' into 'VTM-11.0_nnvc'

JVET-AB0053: EE1-1.2: (second merge) Incorporates training scripts for the luma intra model for NN filter set 1.

See merge request jvet-ahg-nnvc/VVCSoftware_VTM!23
parents 198086a6 c89fffcb
No related branches found
No related tags found
No related merge requests found
Showing
with 571 additions and 0 deletions
Step A) Checkout the training code:
===================================
git clone https://vcgit.hhi.fraunhofer.de/jvet-ahg-nnvc/VVCSoftware_VTM.git
cd VVCSoftware_VTM
git checkout NNVC-3.0
This is now your $BASE path
cd $BASE/training/training_scripts/Nn_Filtering_Set_1/Scripts/LumaIntra/
This is now your $TRAIN path
cd $BASE/training/training_scripts/Nn_Filtering_Set_1/Scripts/LumaIntra/data_extraction_scripts/
This is now your $EXTRACT path
Step B) Download ffmpeg:
========================
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tar xvf ffmpeg-release-amd64-static.tar.xz
cd ffmpeg-5.0.1-amd64-static
pwd
--> This is now your path 'ffmpeg_path' in $EXTRACT/png2yuv_subsampled.py and $EXTRACT/png2yuv_fullres.py
--> It is also your path 'executablefile' in $EXTRACT/mp42yuv_BVI-DVC.py
Step C) Prepare subsampled yuv-files for DIV2K
==============================================
Goto https://data.vision.ee.ethz.ch/cvl/DIV2K/
Download half resolution images from http://data.vision.ee.ethz.ch/cvl/DIV2K/DIV2K_train_LR_bicubic_X2.zip
unzip DIV2K_train_LR_bicubic_X2.zip
cd DIV2K_train_LR_bicubic/X2
pwd
--> This is now your path 'srcdir' in $EXTRACT/png2yuv_subsampled.py
(Mine: /proj/video_no_backup/videosim/ejacstr/extract/DIV2K_test_yuv/DIV2K_train_LR_bicubic/X2)
cd ..
mkdir X2_crop
cd X2_crop
pwd
--> This is now your path 'cropimgdir' in $EXTRACT/png2yuv_subsampled.py
(Mine: /proj/video_no_backup/videosim/ejacstr/extract/DIV2K_test_yuv/X2_crop)
cd ..
mkdir X2_yuv
cd X2_yuv
pwd
--> This is now your path 'destdir' in $EXTRACT/png2yuv_subsampled.py, 'inputdirDIV2K_X2' in $EXTRACT/E_data_generation_luma_intra.py and 'path_to_original_DIV2K_X2_yuvs' in $TRAIN/main.py
After changing all the paths in png2yuv_subsampled.py according to the above, run png2yuv_subsampled.py using
cd $EXTRACT
python3 png2yuv_subsampled.py
The subsampled versions of DIV2K images will afterwards reside in 'destdir' of the form
0084x2_1016x680_25fps_8bit_420.yuv
signifying image 84, downsampled a factor of two (x2), resolution 1016x680, 25 fps, 8bit 420.
Step D) Prepare full resolution yuv-files for DIV2K:
===============================================
Goto https://data.vision.ee.ethz.ch/cvl/DIV2K/
Download full resolution images from http://data.vision.ee.ethz.ch/cvl/DIV2K/DIV2K_train_HR.zip
unzip DIV2K_train_HR.zip
cd DIV2K_train_HR
pwd
--> This is now your path 'srcdir' in $EXTRACT/png2yuv_fullres.py
cd ..
mkdir DIV2K_train_HR_crop
cd DIV2K_train_HR_crop
pwd
--> This is now your path 'cropimgdir' in $EXTRACT/png2yuv_fullres.py
cd ..
mkdir DIV2K_train_HR_yuv
cd DIV2K_train_HR_yuv
pwd
--> This is now your path 'destdir' in $EXTRACT/png2yuv_fullres.py, 'inputdirDIV2K' in $EXTRACT/E_data_generation_luma_intra.py and 'path_to_original_DIV2K_yuvs' in $TRAIN/main.py.
After changing all the paths in png2yuv_fullres.py according to the above, run png2yuv_fullres.py using
cd $EXTRACT
python3 png2yuv_fullres.py
The full resolution yuv versions of the DIV2K images will afterwards reside in 'destdir' of the form
0461_1440x2040_25fps_8bit_420.yuv
signifying image 461, no downsampling (lack of x2), resolution 1440x2040, 25 fps, 8bit 420.
E) Prepare yuv-files for BVI-DVC:
=================================
Download the BVI-DVC dataset as per the instructions in the NNVC-CTC.
--> The path where you have downloaded all the mp4 files is now your 'srcdir' in mp42yuv_BVI-DVC.py
Find a suitable path to put your .yuv videos
--> This is now your 'destdir' in $EXTRACT/mp42yuv_BVI-DVC.py, 'inputdirBVIDVC' in $EXTRACT/E_data_generation_luma_intra.py and 'path_to_original_BVI_DVC_yuvs' in $TRAIN/main.py
--> Change 'mycurrentdir' to the directory where the script file mp42yuv_BVI-DVC.py is residing.
--> Change the path 'executablefile' in $EXTRACT/mp42yuv_BVI-DVC.py to the ffmpeg path you created above.
Run mp42yuv_BVI-DVC.py four times for the different sizes A (), B (1920x1088), C (960x544) and D (480x272):
cd $EXTRACT
python3 mp42yuv_BVI-DVC.py A
python3 mp42yuv_BVI-DVC.py B
python3 mp42yuv_BVI-DVC.py C
python3 mp42yuv_BVI-DVC.py D
Note that each of these scripts starts 192 several simultaneous decodings. If your system cannot cope with that many simultaneous decodings, use something like time.sleep(20) to wait 20 seconds after starting a decoding instead of doing it instantly.
to save your changes in the above scripts, you can create a new branch>
cd $BASE
git checkout -b scripts_with_paths
git commit -am "Scripts updated with my paths."
F) Run NNVC-VTM for DIV2K, DIV2K-x2 and BVI-DVC and generate training data:
===========================================================================
F1) Compile NNVC-encoder and extractor decoder:
-----------------------------------------------
We use NCS-1.0 as extraction software. It is possible to use a later version, but this has not been tested to give equivalent results.
NCS-1.0 is equivalent to commit b4df98075df77f779a86b4b76a6bcfabf9d6fecd. Therefore,
cd $BASE
git checkout b4df98075df77f779a86b4b76a6bcfabf9d6fecd
git checkout -b extraction_software
In source/Lib/CommonLib/TypeDef.h, set the macro NNVC_USE_SLICETYPE to 0:
#define NNVC_USE_SLICETYPE 0 // slice type
Commit your changes to the new branch
git commit -am "Extraction software now ready."
Now compile, first by updating SADL
git submodule init
git submodule update
Then build:
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j 8
cd ../bin
cp EncoderAppStatic EncoderAppStatic_extraction_software
cp DecoderAppStatic DecoderAppStatic_extraction_software
pwd
Copy the resulting path to the variable 'excutabledir' in E_data_generation_luma_intra.py. Before updating the file with this path, checkout your updated scripts with
git checkout scripts_with_paths
and then edit $EXTRACT/E_data_generation_luma_intra.py.
F2) Compress yuv-files and extract training data
------------------------------------------------
In $EXTRACT/E_data_generation_luma_intra.py, change the following:
Change 'bitstreamsdir' to a directory on your harddrive where you want to store the resulting bitstreams.
Change 'dumpdirbase' to a directory where you want the decoded yuv data. Also change 'default_base_train_dir' in $TRAIN/main.py to this directory.
Change 'mycurrentdir' to the full path for the directory where the script file E_data_generation_luma_intra.py is residing.
The paths 'inputdirDIV2K', 'inputdirDIV2K_X2' and 'inputdirBVIDVC' were updated in previous steps and need not be futher changed.
You may want to change the line
cmdall = ["bsub -o /dev/null '", enccmd,";",deccmd, "'"]
to something that starts jobs our your cluster. We are using LSF and start a job with " bsub -o /dev/null 'python3 jobtostart.py' ".
For DIV2K:
cd $EXTRACT
python3 E_data_generation_luma_intra.py DIV2K 0
For subsampled DIV2K:
python3 E_data_generation_luma_intra.py DIV2K_X2 0
For BVIDVC:
python3 E_data_generation_luma_intra.py BVIDVC A
python3 E_data_generation_luma_intra.py BVIDVC B
python3 E_data_generation_luma_intra.py BVIDVC C
python3 E_data_generation_luma_intra.py BVIDVC D
The resulting yuv-files to be used for training will now reside in 'dumpdirbase'
G) Train simplified model:
==========================
Start training using
cd $TRAIN
python3 main.py --learning_rate 1e-4 --loss_function 'L1' --num_workers 32 --epochs 371 --tag simple_model
import csv
import sys
import os
from sys import platform
import subprocess
from subprocess import Popen, PIPE
import shutil
import glob
import time
cfgtype = 'ai'
# A list of QPs you want to encode. The submitted jobs will loop all the QPs. Remove the final two "break"s when ready to submit coding jobs.
#QP = [45,40,35,30,25,20]
QP = [20, 25, 30, 35, 40]
#dataset is either 'DIV2K', 'DIV2K_X2', or 'BVIDVC'
#dataset = 'BVIDVC'
#dataset = 'DIV2K_X2'
dataset = sys.argv[1]
# String to control which names from the dataset you want to encode.
# E.g., DIV2K images start with 0xxx_xxxxxxx_xxx.yuv, so str1='0'.
# BVIDVC class D sequences start with Dxxxx_xxxxx.yuv, so str1='D'.
# A paticular sequence with name CColourfulDecorationWatPhoVidevo_960x544_50fps_10bit_420.yuv, so str1 = 'CColourfulDecorationWatPhoVidevo_960x544_50fps_10bit_420'
#str1 = 'DAdvertisingMassagesBangkokVidevo_480x272_25fps_10bit_420'
#str1 = 'AWovenVidevo_3840x2176_25fps_10bit_420'
str1 = sys.argv[2]
###############
# Change the following directories to your directories
# directory of encoder and decoder
excutabledir = '/proj/video_no_backup/videosim/ejacstr/jvet_training_extraction/jvet_training/bin/'
encoderdir = excutabledir+'EncoderAppStatic_extraction_software'
decoderdir = excutabledir+'DecoderAppStatic_extraction_software'
# directory where you can find original DIV2K yuv files of full resolution
inputdirDIV2K = '/proj/video_no_backup/videosim/ejacstr/jvet_training_extraction/links_to_AB0053_data/DIV2K_train_HR_yuv/'
# directory where you can find original DIV2K yuv files of half resolution
inputdirDIV2K_X2 = '/proj/video_no_backup/videosim/ejacstr/jvet_training_extraction/links_to_AB0053_data/DIV2K_train_X2_yuv/'
# directory where you can find original BVIDVC yuv files
inputdirBVIDVC = '/proj/video_no_backup/videosim/ejacstr/jvet_training_extraction/links_to_AB0053_data/BVI_DVC_train_yuv/'
# Output directory of compressed bitstreams. Change the first part of the path to a location of your choice.
bitstreamsdir = '/proj/video_no_backup/videosim/ejacstr/jvet_training_extraction/links_to_AB0053_data/bitstreams/'
yuvoutputdir = bitstreamsdir + cfgtype + '_train/'
enclog_outputdir = bitstreamsdir + cfgtype + '_train_enclogs/'
# Dump directory where decompressed yuv files used for training data will reside.
dumpdirbase = '/proj/video_no_backup/videosim/ejacstr/jvet_training_extraction/links_to_AB0053_data/train_dump/'
os.makedirs(yuvoutputdir, exist_ok=True)
os.makedirs(enclog_outputdir, exist_ok=True)
os.makedirs(dumpdirbase, exist_ok=True)
# Current directory (where this script file resides).
mycurrentdir = '/proj/video_no_backup/videosim/ejacstr/jvet_training_extraction/jvet_training/training/training_scripts/Nn_Filtering_Set_1/Scripts/data_extraction_scripts/'
################
#AI configuration file
cfg1 = mycurrentdir + '/encoder_intra_vtm_all.cfg'
# Output directory of final training data. If necessary, change to a proper directory.
outputroot = "/path/to/train/"+cfgtype+"/"
###############
if dataset == 'DIV2K':
cfgdir = mycurrentdir + '/cfgDIV2K_IntraLuma/'
datasetname = "DIV2K_1frm"
inputdir = inputdirDIV2K
encnumfrm = '1' #number of frames to encode
numfrm = '1' # total number of frames
tempSubSampling = '1'
bitdepth = 10
bitdepth_orig = 8 # BVIDVC 10bit, DIV2K 8bit
logdir = ''# not needed for AI
elif dataset == 'DIV2K_X2':
datasetname = "DIV2K_X2_1frm"
cfgdir = mycurrentdir + '/cfgDIV2K_X2_IntraLuma/'
inputdir = inputdirDIV2K_X2
encnumfrm = '1'
numfrm = '1'
tempSubSampling = '1'
bitdepth = 10
bitdepth_orig = 8 # BVIDVC 10bit, DIV2K 8bit
logdir = '' # not needed for AI
elif dataset == 'BVIDVC':
datasetname = "BVIDVC_64frm"
cfgdir = mycurrentdir + '/cfgBVIDVC_IntraLuma/'
inputdir = inputdirBVIDVC
encnumfrm = '64'
numfrm = '64'
if str1[0] == 'A':
tempSubSampling = '8'
else:
tempSubSampling = '1'
bitdepth = 10
bitdepth_orig = 10 # BVIDVC 10bit, DIV2K 8bit
logdir = ''# not needed for AI
else:
print('dataset must be DIV2K_HR_and_XR. Exiting.')
exit(1)
cnt = 0
for input_file in os.listdir(inputdir):
print('input file = ', input_file)
#input_file = '0800_downscaling.yuv'
if input_file[-3:] == 'yuv' and input_file[:len(str1)] == str1:
seqname = input_file[:-4]
cfg2 = cfgdir + seqname + '.cfg'
file_dir = inputdir + input_file
dumpdir = dumpdirbase + seqname
os.makedirs(dumpdir, exist_ok=True)
for q in range(0,len(QP)):
qp = str(QP[q])
seqname_with_qp = yuvoutputdir + seqname + '_qp' + qp;
bin_dir = seqname_with_qp + '_str.bin'
tmpout_dir = seqname_with_qp + '_tmprec.yuv'
log_dir = seqname_with_qp + '_dec.log'
enclog_dir = enclog_outputdir + seqname + '_qp' + qp + '_enc.log'
enccmd = [encoderdir, "-c", cfg1, "-c", cfg2, "-i", file_dir, "-o", tmpout_dir,"-b", bin_dir, "-q", qp, "-f",encnumfrm, "-ts",tempSubSampling, "--NnlfOption=0 --Verbosity=6", ">&",enclog_dir]
enccmd = " ".join(enccmd)
deccmd = [decoderdir, "-b", bin_dir, "--DumpBasename="+dumpdir+'/'+seqname+"_qp"+qp,">&",log_dir]
deccmd = " ".join(deccmd)
cmdall = ["bsub -o /dev/null '", enccmd,";",deccmd, "'"]
cmdall = " ".join(cmdall)
print(cmdall)
os.system(cmdall)
cnt += 1
time.sleep(0.3)
print('Total',cnt,'jobs.')
# Unresolved: What main cfg file is used?
#======== File I/O ===============
InputFile : AAdvertisingMassagesBangkokVidevo_3840x2176_25fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 25 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
#======== File I/O ===============
InputFile : AAmericanFootballS2Harmonics_3840x2176_60fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
#======== File I/O ===============
InputFile : AAmericanFootballS3Harmonics_3840x2176_60fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
#======== File I/O ===============
InputFile : AAmericanFootballS4Harmonics_3840x2176_60fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
#======== File I/O ===============
InputFile : AAnimalsS11Harmonics_3840x2176_60fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
#======== File I/O ===============
InputFile : AAnimalsS1Harmonics_3840x2176_60fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
#======== File I/O ===============
InputFile : ABangkokMarketVidevo_3840x2176_25fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 25 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
#======== File I/O ===============
InputFile : ABasketballGoalScoredS1Videvo_3840x2176_25fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 25 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
#======== File I/O ===============
InputFile : ABasketballGoalScoredS2Videvo_3840x2176_25fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 25 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
#======== File I/O ===============
InputFile : ABasketballS1YonseiUniversity_3840x2176_30fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
#======== File I/O ===============
InputFile : ABasketballS2YonseiUniversity_3840x2176_30fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
#======== File I/O ===============
InputFile : ABasketballS3YonseiUniversity_3840x2176_30fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 30 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
#======== File I/O ===============
InputFile : ABoatsChaoPhrayaRiverVidevo_3840x2176_23fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 23 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
#======== File I/O ===============
InputFile : ABobbleheadBVIHFR_3840x2176_120fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 120 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
#======== File I/O ===============
InputFile : ABookcaseBVITexture_3840x2176_120fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 120 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
#======== File I/O ===============
InputFile : ABoxingPracticeHarmonics_3840x2176_60fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 60 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
#======== File I/O ===============
InputFile : ABricksBushesStaticBVITexture_3840x2176_120fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 120 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
#======== File I/O ===============
InputFile : ABricksLeavesBVITexture_3840x2176_120fps_10bit_420.yuv
InputBitDepth : 10 # Input bitdepth
InputChromaFormat : 420 # Ratio of luminance to chrominance samples
FrameRate : 120 # Frame Rate per second
FrameSkip : 0 # Number of frames to be skipped in input
SourceWidth : 3840 # Input frame width
SourceHeight : 2176 # Input frame height
FramesToBeEncoded : 64 # Number of frames to be coded
Level : 5.1
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment