#include <iostream> #include <string> extern "C" { #include <libavformat/avformat.h> #include <libavcodec/avcodec.h> #include <libswscale/swscale.h> } int main(int argc, char *argv[]) { av_register_all(); std::string inputFile; std::string outputFile; std::cout << "Enter the name of the MP4 file: "; std::cin >> inputFile; std::cout << "Enter the name of the output 3GP file: "; std::cin >> outputFile; AVFormatContext *inputFormatContext = avformat_alloc_context(); if (avformat_open_input(&inputFormatContext, inputFile.c_str(), nullptr, nullptr) != 0) { std::cerr << "Could not open input file" << std::endl; return 1; } if (avformat_find_stream_info(inputFormatContext, nullptr) < 0) { std::cerr << "Could not find stream information" << std::endl; return 1; } AVFormatContext *outputFormatContext = avformat_alloc_context(); AVOutputFormat *outputFormat = av_guess_format("3gp", nullptr, nullptr); outputFormatContext->oformat = outputFormat; if (!(outputFormat->flags & AVFMT_NOFILE)) { if (avio_open(&outputFormatContext->pb, outputFile.c_str(), AVIO_FLAG_WRITE) < 0) { std::cerr << "Could not open output file" << std::endl; return 1; } } for (unsigned int i = 0; i < inputFormatContext->nb_streams; i++) { AVStream *inStream = inputFormatContext->streams[i]; AVStream *outStream = avformat_new_stream(outputFormatContext, inStream->codec->codec); if (!outStream) { std::cerr << "Failed allocating output stream" << std::endl; return 1; } if (avcodec_copy_context(outStream->codec, inStream->codec) != 0) { std::cerr << "Failed to copy codec context" << std::endl; return 1; } outStream->codec->codec_tag = 0; if (outputFormatContext->oformat->flags & AVFMT_GLOBALHEADER) outStream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER; } av_dump_format(outputFormatContext, 0, outputFile.c_str(), 1); if (avformat_write_header(outputFormatContext, nullptr) < 0) { std::cerr << "Error while writing header to output file" << std::endl; return 1; } AVPacket packet; while (av_read_frame(inputFormatContext, &packet) >= 0) { AVStream *inStream = inputFormatContext->streams[packet.stream_index]; AVStream *outStream = outputFormatContext->streams[packet.stream_index]; packet.pts = av_rescale_q_rnd(packet.pts, inStream->time_base, outStream->time_base, (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX)); packet.dts = av_rescale_q_rnd(packet.dts, inStream->time_base, outStream->time_base, (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX)); packet.duration = av_rescale_q(packet.duration, inStream->time_base, outStream->time_base); packet.pos = -1; if (av_interleaved_write_frame(outputFormatContext, &packet) < 0) { std::cerr << "Error while writing video frame" << std::endl; return 1; } av_packet_unref(&packet); } if (av_write_trailer(outputFormatContext) < 0) { std::cerr << "Error while writing trailer to output file" << std::endl; return 1; } avformat_close_input(&inputFormatContext); if (!(outputFormat->flags & AVFMT_NOFILE)) avio_closep(&outputFormatContext->pb); avformat_free_context(inputFormatContext); avformat_free_context(outputFormatContext); return 0; }
Write, Run & Share C++ code online using OneCompiler's C++ online compiler for free. It's one of the robust, feature-rich online compilers for C++ language, running on the latest version 17. Getting started with the OneCompiler's C++ compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as C++
and start coding!
OneCompiler's C++ online compiler supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample program which takes name as input and print your name with hello.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
cout << "Enter name:";
getline (cin, name);
cout << "Hello " << name;
return 0;
}
C++ is a widely used middle-level programming language.
When ever you want to perform a set of operations based on a condition If-Else is used.
if(conditional-expression) {
//code
}
else {
//code
}
You can also use if-else for nested Ifs and If-Else-If ladder when multiple conditions are to be performed on a single variable.
Switch is an alternative to If-Else-If ladder.
switch(conditional-expression){
case value1:
// code
break; // optional
case value2:
// code
break; // optional
......
default:
code to be executed when all the above cases are not matched;
}
For loop is used to iterate a set of statements based on a condition.
for(Initialization; Condition; Increment/decrement){
//code
}
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while (condition) {
// code
}
Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.
do {
// code
} while (condition);
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity. Function gets run only when it is called.
return_type function_name(parameters);
function_name (parameters)
return_type function_name(parameters) {
// code
}