@@ -22,6 +22,7 @@ class ffmpeg
2222 std::vector<std::string> encodes;
2323 std::vector<int > crf;
2424 std::vector<int > audiobitrate;
25+ std::vector<int > videobitrate;
2526
2627public:
2728 // Vars
@@ -30,6 +31,9 @@ class ffmpeg
3031 int selected_crf;
3132 int selected_audioBitrate;
3233 bool is_ab_selected = false ;
34+ int selected_videoBitrate;
35+ bool is_vb_selected = false ;
36+
3337 // Methods
3438 ffmpeg ();
3539 ~ffmpeg ();
@@ -185,6 +189,91 @@ class ffmpeg
185189 std::cout << std::endl;
186190 }
187191 }
192+ void select_videoBitrate ()
193+ {
194+ /* Type Video Bitrate, Standard Frame Rate
195+ (24, 25, 30)
196+ Video Bitrate, High Frame Rate
197+ (48, 50, 60)
198+ 2160p (4K) 35–45 Mbps 53–68 Mbps
199+ 1440p (2K) 16 Mbps 24 Mbps
200+ 1080p 8 Mbps 12 Mbps
201+ 720p 5 Mbps 7.5 Mbps
202+ 480p 2.5 Mbps 4 Mbps
203+ 360p 1 Mbps 1.5 Mbps
204+ */
205+
206+ using namespace std ;
207+
208+ int choice;
209+ int vb1, vb2, vb3, vb4, vb5, vb6;
210+ vb1 = 35 ; // 4k
211+ vb2 = 18 ;
212+ vb3 = 8 ;
213+ vb4 = 5 ;
214+ vb5 = 3 ; // 480p
215+ vb6 = 1 ; // 360p
216+
217+ // loading the video bitrates to the vector
218+ videobitrate.push_back (vb1);
219+ videobitrate.push_back (vb2);
220+ videobitrate.push_back (vb3);
221+ videobitrate.push_back (vb4);
222+ videobitrate.push_back (vb5);
223+ videobitrate.push_back (vb6);
224+ // Asking the user
225+ cout << " Do you want to specify video bitrates?" << endl;
226+ cout << " 1. Yes" << endl
227+ << " 2. No" << endl;
228+ cout << " Your choice: " ;
229+ cin >> choice;
230+
231+ if (choice == 1 )
232+ {
233+ is_vb_selected = true ;
234+ for (int i = 0 ; i < videobitrate.size (); i++)
235+ {
236+ cout << (i + 1 ) << " . " << videobitrate[i] << endl;
237+ }
238+ cout << " Your choice:" ;
239+ cin >> choice;
240+
241+ switch (choice)
242+ {
243+ case 1 :
244+ selected_videoBitrate = vb1;
245+ break ;
246+ case2:
247+ selected_videoBitrate = vb2;
248+ break ;
249+ case 3 :
250+ selected_videoBitrate = vb3;
251+ break ;
252+ case 4 :
253+ selected_videoBitrate = vb4;
254+ break ;
255+ case 5 :
256+ selected_videoBitrate = vb5;
257+ break ;
258+ case 6 :
259+ selected_videoBitrate = vb6;
260+ break ;
261+
262+ default :
263+ cout << " No video bitrate selected. Going with the default 8 MBPS" ;
264+ std::cout << std::endl;
265+ selected_videoBitrate = vb3;
266+ break ;
267+ }
268+ }
269+ else
270+ {
271+ is_vb_selected = false ;
272+ std::cout << " Going without -vb option" ;
273+ std::cout << std::endl;
274+ }
275+
276+ }
188277
189278 void h264 ()
190279 {
@@ -204,12 +293,17 @@ class ffmpeg
204293 std::cout << std::endl;
205294 if (is_ab_selected = true )
206295 {
207- std::cout << " ffmpeg -i " << video_name << " .mp4 -vcodec h264 -acodec aac -ab " <<selected_audioBitrate<<" k " << " -crf " << selected_crf << " " << video_name << " .encoded.mp4" ;
208-
296+ std::cout << " ffmpeg -i " << video_name << " .mp4 -vcodec h264 -acodec aac -ab " << selected_audioBitrate << " k "
297+ << " -crf " << selected_crf << " " << video_name << " .encoded.mp4" ;
298+ }
299+ else if (is_vb_selected = true )
300+ {
301+ std::cout << " ffmpeg -i " << video_name << " .mp4 -vcodec h264 -acodec aac -vb " << selected_videoBitrate << " k "
302+ << " -crf " << selected_crf << " " << video_name << " .encoded.mp4" ;
209303 }
210304 else
211305 {
212- std::cout << " ffmpeg -i " << video_name << " .mp4 -vcodec h264 -acodec aac -crf " << selected_crf << " " << video_name << " .encoded.mp4" ;
306+ std::cout << " ffmpeg -i " << video_name << " .mp4 -vcodec h264 -acodec aac -crf " << selected_crf << " " << video_name << " .encoded.mp4" ;
213307 }
214308 std::cout << std::endl;
215309 std::cout << std::endl;
@@ -224,6 +318,7 @@ class ffmpeg
224318 {
225319 select_crf ();
226320 select_audioBitrate ();
321+ select_videoBitrate ();
227322 do
228323 {
229324 h264 ();
0 commit comments