Hi Gonzalo, all,
thanks for pointing out what I did wrong. I now get files that are of
reasonable sizes 20 MB, something that one would expect. I have added the .h
and .cpp file that I have modified according to your feedback and I have also
added the .h file for the image class. But the generated videofiles that I get
can not be read by VLC or any other application.
When I run "ffmpeg.exe -v error -i c:\tmp\myVideo.mp4 -f null - >error.log 2>&1
" , I get the following error lines multiple times :
[h264 @ 05c0c780] No start code is found.
[h264 @ 05c0c780] Error splitting the input into NAL units.
Error while decoding stream #0:0: Invalid data found when processing input
I have also attached a debug output file that is created by my C++/Qt
application in which you'll see which images are send to the encoder. What I
don't understand is that the first 26 frames are send to the encoder but not
written to the file, I know that the H264 needs some frames before it starts
encoding but I would like those frames to be written to the videofile as well.
Your help is greatly appreciated.
________________________________
Van: Libav-user <[email protected]> namens Gonzalo Garramuño
<[email protected]>
Verzonden: maandag 22 februari 2021 17:55
Aan: [email protected] <[email protected]>
Onderwerp: Re: [Libav-user] help needed on "Encoding .png images with h264 to a
file on disk"
El 22/2/21 a las 05:25, laddoe escribió:
can anybody please help me with my post of 2 days ago, I'm really stuck but not
able to understand what is wrong. I have also tried several different code
examples but it all ends up the same as mentioned in the post. Am I not
understanding this ? Are my expectations of the results incorrect? I'm new to
this so please bear with me.
One thing that is wrong in your code is that you never call av_write_trailer(),
which should be called before avio_close().
Also, there's no need for m_file in your code. avformat handles the file for
you.
Other things are hard to say, as you don't provide the code to the Image or
cv::Mat classes. You should provide a self-compilable example for us to help
you.
#ifndef MOVIECODEC_H
#define MOVIECODEC_H
#include "image/Image.h"
extern "C"
{
#include "Codec/include/libavcodec/avcodec.h"
#include "Codec/include/libavdevice/avdevice.h"
#include "Codec/include/libavformat/avformat.h"
#include "Codec/include/libavutil/avutil.h"
#include "Codec/include/libavformat/avio.h"
#include "Codec/include/libavutil/imgutils.h"
#include "Codec/include/libavutil/opt.h"
#include "Codec/include/libswscale/swscale.h"
}
class MovieCodec
{
public:
MovieCodec(const char *filename);
~MovieCodec();
void encodeImage( const Image& image );
void encode( AVFrame *frame, AVPacket *pkt );
void add_stream();
void openVideoCodec();
void write_video_frame(const Image &image);
void createFrame( const Image& image );
void close();
private:
static int s_frameCount;
int m_timeVideo = 0;
std::string m_filename;
AVCodec* m_encoder = NULL;
AVOutputFormat* m_outputFormat = NULL;
AVFormatContext* m_formatCtx = NULL;
AVCodecContext* m_codecCtx = NULL;
AVStream* m_streamOut = NULL;
AVFrame* m_frame = NULL;
AVPacket* m_packet = NULL;
};
#endif#ifndef MOVIECODEC_CPP
#define MOVIECODEC_CPP
#include "moviecodec.h"
#include <QDebug>
#define STREAM_DURATION 5.0
#define STREAM_FRAME_RATE 24
#define STREAM_NB_FRAMES ((int)(STREAM_DURATION * STREAM_FRAME_RATE))
#define STREAM_PIX_FMT AV_PIX_FMT_YUV420P /* default pix_fmt */
#define OUTPUT_CODEC AV_CODEC_ID_H264
int MovieCodec::s_frameCount = 0;
MovieCodec::MovieCodec( const char* filename ) :
m_filename( filename ),
m_encoder( avcodec_find_encoder( OUTPUT_CODEC ))
{
av_log_set_level(AV_LOG_VERBOSE);
int ret(0);
// allocate the output media context
ret = avformat_alloc_output_context2( &m_formatCtx, m_outputFormat, NULL,
m_filename.c_str());
if (!m_formatCtx)
return;
m_outputFormat = m_formatCtx->oformat;
// Add the video stream using H264 codec
add_stream();
// Open video codec and allocate the necessary encode buffers
if (m_streamOut)
openVideoCodec();
// Print detailed information about input and output
av_dump_format( m_formatCtx, 0, m_filename.c_str(), 1);
// Open the output media file, if needed
if (!( m_outputFormat->flags & AVFMT_NOFILE))
{
ret = avio_open( &m_formatCtx->pb, m_filename.c_str(), AVIO_FLAG_WRITE);
if (ret < 0)
{
char error[255];
ret = av_strerror( ret, error, 255);
fprintf(stderr, "Could not open '%s': %s\n", m_filename.c_str(),
error);
return ;
}
}
else
{
return;
}
// Write media header
ret = avformat_write_header( m_formatCtx, NULL );
if (ret < 0)
{
char error[255];
av_strerror(ret, error, 255);
fprintf(stderr, "Error occurred when opening output file: %s\n", error);
return;
}
if ( m_frame )
m_frame->pts = 0;
}
MovieCodec::~MovieCodec()
{}
/* Add an output stream. */
void MovieCodec::add_stream()
{
AVCodecID codecId = OUTPUT_CODEC;
if (!( m_encoder ))
{
fprintf(stderr, "Could not find encoder for '%s'\n",
avcodec_get_name(codecId));
return;
}
// Get the stream for codec
m_streamOut = avformat_new_stream(m_formatCtx, m_encoder);
if (!m_streamOut) {
fprintf(stderr, "Could not allocate stream\n");
return;
}
m_streamOut->id = m_formatCtx->nb_streams - 1;
m_codecCtx = avcodec_alloc_context3( m_encoder);
switch (( m_encoder)->type)
{
case AVMEDIA_TYPE_VIDEO:
m_streamOut->codecpar->codec_id = codecId;
m_streamOut->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
m_streamOut->codecpar->bit_rate = 400000;
m_streamOut->codecpar->width = 800;
m_streamOut->codecpar->height = 640;
m_streamOut->codecpar->format = STREAM_PIX_FMT;
m_streamOut->time_base = { 1, STREAM_FRAME_RATE };
avcodec_parameters_to_context( m_codecCtx, m_streamOut->codecpar);
m_codecCtx->gop_size = 12; /* emit one intra frame every twelve frames
at most */
m_codecCtx->max_b_frames = 1;
m_codecCtx->time_base = { 1, STREAM_FRAME_RATE };
m_codecCtx->framerate = { STREAM_FRAME_RATE, 1 };
m_codecCtx->pix_fmt = STREAM_PIX_FMT;
m_codecCtx->profile = FF_PROFILE_H264_HIGH;
break;
default:
break;
}
if (m_streamOut->codecpar->codec_id == OUTPUT_CODEC)
{
av_opt_set( m_codecCtx, "preset", "ultrafast", 0 );
}
/
// /* Some formats want stream headers to be separate. */
if (m_formatCtx->oformat->flags & AVFMT_GLOBALHEADER)
m_codecCtx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
int ret = avcodec_parameters_from_context( m_streamOut->codecpar,
m_codecCtx );
if (ret < 0)
{
char error[255];
av_strerror(ret, error, 255);
fprintf(stderr, "avcodec_parameters_from_context returned (%d) - %s",
ret, error);
return;
}
}
void MovieCodec::openVideoCodec()
{
int ret;
/* open the codec */
ret = avcodec_open2(m_codecCtx, m_encoder, NULL);
if (ret < 0)
{
char error[255];
av_strerror(ret, error, 255);
fprintf(stderr, "Could not open video codec: %s\n", error);
return;
}
/* allocate and init a re-usable frame */
// m_frame = av_frame_alloc();
}
void MovieCodec::encodeImage(const Image &image)
{
// Compute video time from last added video frame
m_timeVideo = image.timeStamp(); //(double)m_frame->pts) *
av_q2d(m_streamOut->time_base);
// Stop media if enough time
if (!m_streamOut /*|| m_timeVideo >= STREAM_DURATION*/)
return;
// Add a video frame
write_video_frame( image );
}
void MovieCodec::write_video_frame( const Image& image )
{
int ret;
qDebug() << "image num " << image.uniqueImageNumber() << " " << s_frameCount;
if ( s_frameCount >= STREAM_NB_FRAMES)
{
/* No more frames to compress. The codec has a latency of a few
* frames if using B-frames, so we get the last frames by
* passing the same picture again. */
int p( 0 ) ;
}
else
{
createFrame( image );
}
// Increase frame pts according to time base
// m_frame->pts += av_rescale_q(1, m_codecCtx->time_base,
m_streamOut->time_base);
m_frame->pts = int64_t( image.timeStamp()) ;
if (m_formatCtx->oformat->flags & 0x0020 )
{
/* Raw video case - directly store the picture in the packet */
AVPacket pkt;
av_init_packet(&pkt);
pkt.flags |= AV_PKT_FLAG_KEY;
pkt.stream_index = m_streamOut->index;
pkt.data = m_frame->data[0];
pkt.size = sizeof(AVPicture);
// ret = av_interleaved_write_frame(m_formatCtx, &pkt);
ret = av_write_frame( m_formatCtx, &pkt );
}
else
{
AVPacket pkt;
av_init_packet(&pkt);
/* encode the image */
ret = avcodec_send_frame(m_codecCtx, m_frame);
if (ret < 0)
{
char error[255];
av_strerror(ret, error, 255);
fprintf(stderr, "Error encoding video frame: %s\n", error);
return;
}
/* If size is zero, it means the image was buffered. */
ret = avcodec_receive_packet(m_codecCtx, &pkt);
if( !ret && pkt.size)
{
qDebug() << "write frame " << m_frame->display_picture_number;
pkt.stream_index = m_streamOut->index;
/* Write the compressed frame to the media file. */
// ret = av_interleaved_write_frame(m_formatCtx, &pkt);
ret = av_write_frame( m_formatCtx, &pkt );
}
else
{
ret = 0;
}
}
if (ret != 0)
{
char error[255];
av_strerror(ret, error, 255);
fprintf(stderr, "Error while writing video frame: %s\n", error);
return;
}
s_frameCount++;
}
void MovieCodec::createFrame( const Image& image /*, AVFrame *m_frame, int
frame_index, int width, int height*/)
{
/**
* \note allocate frame
*/
m_frame = av_frame_alloc();
int ret = av_frame_make_writable( m_frame );
m_frame->format = STREAM_PIX_FMT;
m_frame->width = image.width();
m_frame->height = image.height();
// m_frame->pict_type = AV_PICTURE_TYPE_I;
m_frame->display_picture_number = image.uniqueImageNumber();
ret = av_image_alloc(m_frame->data, m_frame->linesize, m_frame->width,
m_frame->height, STREAM_PIX_FMT, 1);
if (ret < 0)
{
return;
}
struct SwsContext* sws_ctx = sws_getContext((int)image.width(),
(int)image.height(), AV_PIX_FMT_RGB24,
(int)image.width(),
(int)image.height(), STREAM_PIX_FMT, 0, NULL, NULL, NULL);
const uint8_t* rgbData[1] = { (uint8_t* )image.getData() };
int rgbLineSize[1] = { 3 * image.width() };
sws_scale(sws_ctx, rgbData, rgbLineSize, 0, image.height(), m_frame->data,
m_frame->linesize);
//cv::Mat yuv420p( m_frame->height + m_frame->height/2, m_frame->width,
CV_8UC1, m_frame->data[0]);
//cv::Mat cvmIm;
//cv::cvtColor(yuv420p,cvmIm,CV_YUV420p2BGR);
//std::ostringstream ss;
//ss << "c:\\tmp\\YUVoriginal_" << image.uniqueImageNumber() << ".png";
//cv::imwrite( ss.str().c_str(), cvmIm);
}
void MovieCodec::close()
{
qDebug() << "close ";
/* reset the framecount */
s_frameCount = 0 ;
int ret( 0 );
/* flush the encoder */
while( ret >= 0 )
ret = avcodec_send_frame(m_codecCtx, NULL);
qDebug() << "flushed it ";
// Write media trailer
if( m_formatCtx )
ret = av_write_trailer( m_formatCtx );
/* Close each codec. */
if ( m_streamOut )
{
if( m_frame )
{
av_free( m_frame->data[0]);
av_frame_free( &m_frame );
}
if( m_packet )
av_packet_free( &m_packet );
}
if (!( m_outputFormat->flags & AVFMT_NOFILE))
/* Close the output file. */
ret = avio_close( m_formatCtx->pb);
/* free the stream */
avformat_free_context( m_formatCtx );
fflush( stdout );
}
#endif // MOVIECODEC_CPP
#ifndef IMAGE_H
#define IMAGE_H
class Image
{
public:
Image();
Image( const cv::Mat& mat );
Image(const Image& other) = default;
Image(Image&& other) = default;
~Image();
inline const cv::Mat& matrix() const{ return m_matrix; }
inline const int uniqueImageNumber() const{ return m_uniqueId; }
inline const int timeStamp() const { return m_timeStamp; }
inline const int width() const { return m_matrix.cols(); }
inline const int height() const { return m_matrix.rows(); }
private:
cv::Mat m_matrix;
int m_timeStamp;
int m_uniqueId;
};
#endifacquisition\moviecodec.cpp(504): image num 324 0
acquisition\moviecodec.cpp(504): image num 325 1
acquisition\moviecodec.cpp(504): image num 327 2
acquisition\moviecodec.cpp(504): image num 329 3
acquisition\moviecodec.cpp(504): image num 331 4
acquisition\moviecodec.cpp(504): image num 333 5
[libx264 @ b9ac85c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
FMA3 BMI2 AVX2
[libx264 @ b9ac85c0] profile High, level 3.1, 4:2:0, 8-bit
[libx264 @ b9ac85c0] 264 - core 161 r3039 544c61f - H.264/MPEG-4 AVC codec -
Copyleft 2003-2021 - http://www.videolan.org/x264.html - options: cabac=1 ref=3
deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00
mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11
fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2
sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0
constrained_intra=0 bframes=1 b_pyramid=0 b_adapt=1 b_bias=0 direct=1 weightb=1
open_gop=0 weightp=2 keyint=12 keyint_min=1 scenecut=40 intra_refresh=0
rc_lookahead=12 rc=abr mbtree=1 bitrate=400 ratetol=1.0 qcomp=0.60 qpmin=0
qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'c:\tmp\outputVideo.mp4':
Stream #0:0: Video: h264 (libx264) (High), 1 reference frame, yuv420p,
800x640 (0x0), q=-1--1, 400 kb/s, 24 tbn
acquisition\moviecodec.cpp(504): image num 337 7
acquisition\moviecodec.cpp(504): image num 339 8
acquisition\moviecodec.cpp(504): image num 341 9
acquisition\moviecodec.cpp(504): image num 343 10
acquisition\moviecodec.cpp(504): image num 344 11
acquisition\moviecodec.cpp(504): image num 346 12
acquisition\moviecodec.cpp(504): image num 348 13
acquisition\moviecodec.cpp(504): image num 350 14
acquisition\moviecodec.cpp(504): image num 352 15
acquisition\moviecodec.cpp(504): image num 354 16
acquisition\moviecodec.cpp(504): image num 356 17
acquisition\moviecodec.cpp(504): image num 358 18
acquisition\moviecodec.cpp(504): image num 360 19
acquisition\moviecodec.cpp(504): image num 362 20
acquisition\moviecodec.cpp(504): image num 363 21
acquisition\moviecodec.cpp(504): image num 365 22
acquisition\moviecodec.cpp(504): image num 367 23
acquisition\moviecodec.cpp(504): image num 369 24
acquisition\moviecodec.cpp(504): image num 373 26
acquisition\moviecodec.cpp(565): write frame 373
acquisition\moviecodec.cpp(504): image num 375 27
acquisition\moviecodec.cpp(565): write frame 375
acquisition\moviecodec.cpp(504): image num 377 28
acquisition\moviecodec.cpp(565): write frame 377
acquisition\moviecodec.cpp(504): image num 379 29
acquisition\moviecodec.cpp(565): write frame 379
acquisition\moviecodec.cpp(504): image num 381 30
acquisition\moviecodec.cpp(565): write frame 381
acquisition\moviecodec.cpp(504): image num 382 31
acquisition\moviecodec.cpp(565): write frame 382
acquisition\moviecodec.cpp(504): image num 384 32
acquisition\moviecodec.cpp(565): write frame 384
acquisition\moviecodec.cpp(504): image num 386 33
acquisition\moviecodec.cpp(565): write frame 386
acquisition\moviecodec.cpp(504): image num 474 34
acquisition\moviecodec.cpp(565): write frame 474
acquisition\moviecodec.cpp(504): image num 476 35
acquisition\moviecodec.cpp(565): write frame 476
acquisition\moviecodec.cpp(504): image num 478 36
acquisition\moviecodec.cpp(504): image num 479 37
acquisition\moviecodec.cpp(565): write frame 479
acquisition\moviecodec.cpp(504): image num 481 38
acquisition\moviecodec.cpp(565): write frame 481
acquisition\moviecodec.cpp(504): image num 483 39
acquisition\moviecodec.cpp(565): write frame 483
acquisition\moviecodec.cpp(504): image num 485 40
acquisition\moviecodec.cpp(565): write frame 485
acquisition\moviecodec.cpp(504): image num 487 41
acquisition\moviecodec.cpp(565): write frame 487
acquisition\moviecodec.cpp(504): image num 489 42
acquisition\moviecodec.cpp(565): write frame 489
acquisition\moviecodec.cpp(504): image num 491 43
bacquisition\moviecodec.cpp(565): write frame 491
acquisition\moviecodec.cpp(504): image num 493 44
acquisition\moviecodec.cpp(565): write frame 493
acquisition\moviecodec.cpp(504): image num 495 45
acquisition\moviecodec.cpp(565): write frame 495
acquisition\moviecodec.cpp(504): image num 497 46
acquisition\moviecodec.cpp(565): write frame 497
acquisition\moviecodec.cpp(504): image num 498 47
acquisition\moviecodec.cpp(565): write frame 498
acquisition\moviecodec.cpp(504): image num 500 48
acquisition\moviecodec.cpp(565): write frame 500
acquisition\moviecodec.cpp(504): image num 502 49
acquisition\moviecodec.cpp(565): write frame 502
acquisition\moviecodec.cpp(504): image num 504 50
acquisition\moviecodec.cpp(565): write frame 504
acquisition\moviecodec.cpp(504): image num 506 51
acquisition\moviecodec.cpp(565): write frame 506
acquisition\moviecodec.cpp(504): image num 508 52
acquisition\moviecodec.cpp(565): write frame 508
acquisition\moviecodec.cpp(504): image num 510 53
acquisition\moviecodec.cpp(565): write frame 510
acquisition\moviecodec.cpp(504): image num 512 54
acquisition\moviecodec.cpp(565): write frame 512
acquisition\moviecodec.cpp(504): image num 514 55
acquisition\moviecodec.cpp(565): write frame 514
acquisition\moviecodec.cpp(504): image num 516 56
acquisition\moviecodec.cpp(565): write frame 516
acquisition\moviecodec.cpp(504): image num 517 57
acquisition\moviecodec.cpp(504): image num 631 58
acquisition\moviecodec.cpp(565): write frame 631
acquisition\moviecodec.cpp(504): image num 633 59
acquisition\moviecodec.cpp(565): write frame 633
acquisition\moviecodec.cpp(504): image num 635 60
acquisition\moviecodec.cpp(565): write frame 635
acquisition\moviecodec.cpp(504): image num 637 61
acquisition\moviecodec.cpp(565): write frame 637
acquisition\moviecodec.cpp(504): image num 639 62
acquisition\moviecodec.cpp(565): write frame 639
acquisition\moviecodec.cpp(504): image num 641 63
acquisition\moviecodec.cpp(565): write frame 641
acquisition\moviecodec.cpp(504): image num 643 64
acquisition\moviecodec.cpp(565): write frame 643
acquisition\moviecodec.cpp(504): image num 645 65
acquisition\moviecodec.cpp(565): write frame 645
acquisition\moviecodec.cpp(504): image num 647 66
acquisition\moviecodec.cpp(565): write frame 647
acquisition\moviecodec.cpp(504): image num 649 67
acquisition\moviecodec.cpp(565): write frame 649
acquisition\moviecodec.cpp(504): image num 650 68
acquisition\moviecodec.cpp(565): write frame 650
acquisition\moviecodec.cpp(504): image num 652 69
acquisition\moviecodec.cpp(565): write frame 652
acquisition\moviecodec.cpp(504): image num 654 70
acquisition\moviecodec.cpp(565): write frame 654
acquisition\moviecodec.cpp(504): image num 656 71
acquisition\moviecodec.cpp(504): image num 658 72
acquisition\moviecodec.cpp(565): write frame 658
acquisition\moviecodec.cpp(504): image num 660 73
acquisition\moviecodec.cpp(565): write frame 660
acquisition\moviecodec.cpp(504): image num 662 74
acquisition\moviecodec.cpp(565): write frame 662
acquisition\moviecodec.cpp(504): image num 664 75
acquisition\moviecodec.cpp(565): write frame 664
acquisition\moviecodec.cpp(504): image num 666 76
acquisition\moviecodec.cpp(565): write frame 666
acquisition\moviecodec.cpp(504): image num 668 77
acquisition\moviecodec.cpp(565): write frame 668
acquisition\moviecodec.cpp(504): image num 669 78
acquisition\moviecodec.cpp(565): write frame 669
acquisition\moviecodec.cpp(504): image num 671 79
acquisition\moviecodec.cpp(565): write frame 671
acquisition\moviecodec.cpp(504): image num 673 80
acquisition\moviecodec.cpp(565): write frame 673
acquisition\moviecodec.cpp(504): image num 675 81
acquisition\moviecodec.cpp(565): write frame 675
acquisition\moviecodec.cpp(504): image num 774 82
acquisition\moviecodec.cpp(565): write frame 774
acquisition\moviecodec.cpp(504): image num 776 83
acquisition\moviecodec.cpp(565): write frame 776
acquisition\moviecodec.cpp(504): image num 778 84
acquisition\moviecodec.cpp(565): write frame 778
acquisition\moviecodec.cpp(504): image num 780 85
acquisition\moviecodec.cpp(565): write frame 780
acquisition\moviecodec.cpp(504): image num 782 86
acquisition\moviecodec.cpp(565): write frame 782
acquisition\moviecodec.cpp(504): image num 783 87
acquisition\moviecodec.cpp(565): write frame 783
acquisition\moviecodec.cpp(504): image num 785 88
acquisition\moviecodec.cpp(565): write frame 785
acquisition\moviecodec.cpp(504): image num 787 89
acquisition\moviecodec.cpp(565): write frame 787
acquisition\moviecodec.cpp(504): image num 789 90
acquisition\moviecodec.cpp(504): image num 791 91
acquisition\moviecodec.cpp(565): write frame 791
acquisition\moviecodec.cpp(504): image num 793 92
acquisition\moviecodec.cpp(565): write frame 793
acquisition\moviecodec.cpp(504): image num 795 93
acquisition\moviecodec.cpp(565): write frame 795
acquisition\moviecodec.cpp(504): image num 797 94
acquisition\moviecodec.cpp(565): write frame 797
acquisition\moviecodec.cpp(504): image num 799 95
acquisition\moviecodec.cpp(565): write frame 799
acquisition\moviecodec.cpp(504): image num 801 96
acquisition\moviecodec.cpp(504): image num 802 97
acquisition\moviecodec.cpp(565): write frame 802
acquisition\moviecodec.cpp(504): image num 804 98
acquisition\moviecodec.cpp(565): write frame 804
acquisition\moviecodec.cpp(504): image num 806 99
acquisition\moviecodec.cpp(565): write frame 806
acquisition\moviecodec.cpp(504): image num 808 100
acquisition\moviecodec.cpp(565): write frame 808
acquisition\moviecodec.cpp(504): image num 810 101
acquisition\moviecodec.cpp(565): write frame 810
acquisition\moviecodec.cpp(504): image num 812 102
acquisition\moviecodec.cpp(565): write frame 812
acquisition\moviecodec.cpp(504): image num 814 103
acquisition\moviecodec.cpp(504): image num 816 104
acquisition\moviecodec.cpp(565): write frame 816
acquisition\moviecodec.cpp(504): image num 818 105
acquisition\moviecodec.cpp(565): write frame 818
acquisition\moviecodec.cpp(504): image num 920 106
acquisition\moviecodec.cpp(565): write frame 920
acquisition\moviecodec.cpp(504): image num 922 107
acquisition\moviecodec.cpp(565): write frame 922
acquisition\moviecodec.cpp(504): image num 924 108
acquisition\moviecodec.cpp(565): write frame 924
acquisition\moviecodec.cpp(504): image num 926 109
acquisition\moviecodec.cpp(565): write frame 926
acquisition\moviecodec.cpp(504): image num 928 110
bacquisition\moviecodec.cpp(565): write frame 928
acquisition\moviecodec.cpp(504): image num 930 111
acquisition\moviecodec.cpp(565): write frame 930
acquisition\moviecodec.cpp(504): image num 932 112
acquisition\moviecodec.cpp(565): write frame 932
acquisition\moviecodec.cpp(504): image num 934 113
acquisition\moviecodec.cpp(565): write frame 934
acquisition\moviecodec.cpp(504): image num 936 114
acquisition\moviecodec.cpp(565): write frame 936
acquisition\moviecodec.cpp(504): image num 938 115
acquisition\moviecodec.cpp(565): write frame 938
acquisition\moviecodec.cpp(504): image num 940 116
acquisition\moviecodec.cpp(565): write frame 940
acquisition\moviecodec.cpp(504): image num 941 117
acquisition\moviecodec.cpp(504): image num 943 118
acquisition\moviecodec.cpp(565): write frame 943
acquisition\moviecodec.cpp(504): image num 945 119
acquisition\moviecodec.cpp(565): write frame 945
acquisition\moviecodec.cpp(637): close
acquisition\moviecodec.cpp(647): flushed it
_______________________________________________
Libav-user mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/libav-user
To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".