लिखा होना का कारण बनता है मैं वीडियो के लिए प्रारूप लेआउट सेट कर रहा हूं इस प्रकार है:FFmpeg "movflags"> "ठीक हैं" अवैध MP4 फ़ाइल
AVOutputFormat* outputFormat = ffmpeg.av_guess_format(null, "output.mp4", null);
AVCodec* videoCodec = ffmpeg.avcodec_find_encoder(outputFormat->video_codec);
AVFormatContext* formatContext = ffmpeg.avformat_alloc_context();
formatContext->oformat = outputFormat;
formatContext->video_codec_id = videoCodec->id;
ffmpeg.avformat_new_stream(formatContext, videoCodec);
यह कैसे मैं कोडेक प्रसंग की स्थापना कर रहा हूँ:
AVCodecContext* codecContext = ffmpeg.avcodec_alloc_context3(videoCodec);
codecContext->bit_rate = 400000;
codecContext->width = 1280;
codecContext->height = 720;
codecContext->gop_size = 12;
codecContext->max_b_frames = 1;
codecContext->pix_fmt = videoCodec->pix_fmts[0];
codecContext->codec_id = videoCodec->id;
codecContext->codec_type = videoCodec->type;
codecContext->time_base = new AVRational
{
num = 1,
den = 30
};
मैं सेटअप करने के लिए निम्नलिखित कोड का उपयोग कर रहा हूँ "movflags"> वीडियो के शीर्षक के लिए "ठीक हैं" विकल्प:
AVDictionary* options = null;
int result = ffmpeg.av_dict_set(&options, "movflags", "faststart", 0);
int writeHeaderResult = ffmpeg.avformat_write_header(formatContext, &options);
फ़ाइल खोला जाता है और हेडर के रूप में लिखा है इस प्रकार है:
if ((formatContext->oformat->flags & ffmpeg.AVFMT_NOFILE) == 0)
{
int ioOptionResult = ffmpeg.avio_open(&formatContext->pb, "output.mp4", ffmpeg.AVIO_FLAG_WRITE);
}
int writeHeaderResult = ffmpeg.avformat_write_header(formatContext, &options);
इस के बाद, मैं इस प्रकार प्रत्येक वीडियो फ्रेम लिखें:
int writeTrailerResult = ffmpeg.av_write_trailer(formatContext);
:
outputFrame->pts = frameIndex;
packet.flags |= ffmpeg.AV_PKT_FLAG_KEY;
packet.pts = frameIndex;
packet.dts = frameIndex;
int encodedFrame = 0;
int encodeVideoResult = ffmpeg.avcodec_encode_video2(codecContext, &packet, outputFrame, &encodedFrame);
if (encodedFrame != 0)
{
packet.pts = ffmpeg.av_rescale_q(packet.pts, codecContext->time_base, m_videoStream->time_base);
packet.dts = ffmpeg.av_rescale_q(packet.dts, codecContext->time_base, m_videoStream->time_base);
packet.stream_index = m_videoStream->index;
if (codecContext->coded_frame->key_frame > 0)
{
packet.flags |= ffmpeg.AV_PKT_FLAG_KEY;
}
int writeFrameResult = ffmpeg.av_interleaved_write_frame(formatContext, &packet);
}
उसके बाद, मैं ट्रेलर बारे में
फ़ाइल लेखन समाप्त करती है और सब कुछ बंद हो जाता है और ठीक से मुक्त हो जाता है। हालांकि, एमपी 4 फ़ाइल नामुमकिन है (यहां तक कि वीएलसी इसे भी नहीं चला सकता)। AtomicParsley.exe फ़ाइल के बारे में कोई भी जानकारी नहीं दिखाएगा।
autogen पुस्तकालय के लिए इस्तेमाल किया DLLs हैं:
avcodec-56.dll
avdevice-56.dll
avfilter-5.dll
avformat-56.dll
avutil-54.dll
postproc-53.dll
swresample-1.dll
swscale-3.dll
आप प्रारूपकॉन्टेक्स्ट कैसे बनाते हैं? – szatmary
अद्यतन प्रश्न। – williamtroup
आईओ संदर्भ कहां है? डेटा कहाँ लिखा जा रहा है? यदि आप स्ट्रीमिंग io (स्टउट की तरह) का उपयोग कर रहे हैं तो आप फ़ाइल को फास्टस्टार्ट नहीं कर सकते क्योंकि खोज स्ट्रीम पर काम नहीं करती है। – szatmary