<div dir="ltr">This is not set indeed. Since there is no frame rate conversion I simply used the input stream (ifmt_ctx->streams[stream_index]->avg_frame_rate).</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Nov 5, 2019 at 3:25 PM Gonzalo Garramuño <<a href="mailto:ggarra13@gmail.com">ggarra13@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div bgcolor="#FFFFFF">
<p>I am glad someone finally answered this as I complained about
this long time ago, with no answer.<br>
</p>
<br>
<div>El 05/11/19 a las 09:36, Vassilis
escribió:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Well that did the trick! I can't thank you enough
James and also second your comment that this should be updated
in the transcoding.c example.
<div>Is there anything we can do about this?</div>
<br>
</div>
</blockquote>
I still cannot get it to work. I get a floating point exception
with the division of this in my code:<br>
<br>
stream->avg_frame_rate.num * stream->avg_frame_rate.den;<br>
<br>
Where are you guys setting the avg_frame_rate? The transcoding.c
example never sets it.<br>
<br>
<blockquote type="cite"><br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Tue, Nov 5, 2019 at 2:03 PM
James Crisafulli <<a href="mailto:james2048@gmail.com" target="_blank">james2048@gmail.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div dir="ltr">
<div>Hi,</div>
<div><br>
</div>
<div>I used to have the same issue with my application,
which I based on transcoding.c (not transcoding but
anyways, writing H264 to MP4 file).</div>
<div>You need to set the AVPacket duration field, for some
reason it shows this issue if you let it automatically
set it (set to -1).</div>
<div>I had to do this both using libx264 and mpeg4
encoders.</div>
<div><br>
</div>
<div>Example in my code from the muxing section:</div>
<div><br>
</div>
<div>av_packet_rescale_ts(&packet,
codecCtx->time_base, stream->time_base);<br>
packet.stream_index = 0;</div>
<div>// probably best to write this as av_rescale_*
functions, but this is old code</div>
<div>// for example, if 25 FPS, and time_base is 12800,
then packet.duration = 12800 / 25 = 512<br>
packet.duration = stream->time_base.den /
stream->time_base.num / stream->avg_frame_rate.num
* stream->avg_frame_rate.den;<br>
// now you can mux<br>
ret = av_interleaved_write_frame(formatCtx,
&packet);<br>
</div>
<div><br>
</div>
<div>I am not sure why this is needed, I found this in
another codebase with a similar comment, and it fixed my
issue.</div>
<div><br>
</div>
<div>Might as well mention that in transcoding.c, it also
doesn't set the GLOBAL_HEADER flag at the right time,
and as such you get a malformed file if writing MP4
format. I noticed it wouldn't open in Adobe Premiere,
and Windows 10 Films & TV player, and ffprobe had
warnings about it as well but did manage to read it.</div>
<div><br>
</div>
<div>// TOO LATE! has to be done before avcodec open!! In
transcoding.c, it does this after the call and as such
the flags are ignored.<br>
</div>
<div>if (formatCtx->oformat->flags &
AVFMT_GLOBALHEADER)<br>
{<br>
codecCtx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;<br>
}<br>
</div>
<div><br>
</div>
<div>To fix that, I have hard coded the flag early when I
know I am writing MP4, before avcodec_open():</div>
<div><br>
</div>
<div>codecCtx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;<br>
AVDictionary *encoderOpts = nullptr;<br>
ret = avcodec_open2(codecCtx, codecCtx->codec,
&encoderOpts);<br>
</div>
<div><br>
</div>
<div>And now everything works well for me. Hopefully it
fixed the issues for you as well.</div>
<div>Would be nice to see transcoding.c updated to fix
these small issues as it is used as a base by so many
people looking into libav* development.</div>
<div><br>
</div>
<div>- James </div>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Tue, 5 Nov 2019 at
11:07, Vassilis <<a href="mailto:bpantazhs@gmail.com" target="_blank">bpantazhs@gmail.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">This can not be reproduced with the ffmpeg
cli, conversion works fine there.
<div>However it can be reproduced with transcoding.c for
all input files.</div>
<div>Additionally to what I mentioned, 29.96 fps test
files result in 29.98 and 30 to 30.11.</div>
<div>Another 24 fps file resulted in 24.03. The changes
seem to be related with </div>
<div>the duration of the file: the longer the file the
shorter the marginal fps difference. </div>
<div>The output frame rate can be determined with both
fffmpeg -i as well as with</div>
<div>QuickTime 7 and VLC. Like I mentioned, I have spent
some time with investigating this</div>
<div>and it looks like an issue with the correct
conversion of the last frame; I was able</div>
<div>to get different framerate values when tampering
with the pts of the last frame</div>
<div>but this looked like a nasty hack that I shouldn't
be doing, plus it fails</div>
<div>again when re-encoding the file. Here is the info
from an input/output test file</div>
<div>that has the frame rate changed from 24 fps to
24.03:</div>
<div><br>
</div>
<div> Duration: 00:00:36.08, start: 0.000000, bitrate:
178309 kb/s<br>
Stream #0:0(eng): Video: dnxhd (DNXHD) (AVdn /
0x6E645641), yuv422p10le(tv, bt709/unknown/unknown),
1920x1080, 176160 kb/s, SAR 1:1 DAR 16:9, 24 fps, 24
tbr, 23976 tbn, 23976 tbc (default)</div>
<div><br>
</div>
<div> Duration: 00:00:36.10, start: 0.000000, bitrate:
116072 kb/s<br>
Stream #0:0: Video: dnxhd (DNXHD) (AVdn /
0x6E645641), yuv422p(tv, bt709/unknown/unknown),
1920x1080, 116526 kb/s, SAR 1:1 DAR 16:9, 24.03 fps,
24 tbr, 12288 tbn, 12288 tbc (default)<br>
</div>
<div><br>
</div>
<div>You'll notice that there is a slight change in the
duration as well, but this happens with the ffmpeg
conversion with the cli as well.</div>
<div><br>
</div>
<div>Let me know if you need more information and thanks
for the help!</div>
<div><br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Tue, Nov 5, 2019 at
3:42 AM Carl Eugen Hoyos <<a href="mailto:ceffmpeg@gmail.com" target="_blank">ceffmpeg@gmail.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Am Di., 5. Nov.
2019 um 00:16 Uhr schrieb Vassilis <<a href="mailto:bpantazhs@gmail.com" target="_blank">bpantazhs@gmail.com</a>>:<br>
> I am trying simply to perform a transcoding
process using the transcoding.c example from
doc/examples. However I am seeing a very strange
result (even when the example is not modified at all,
ie not even changing codecs); the transcoded file has
a marginally different frame rate than the original
file. For example for a frame rate of 24 fps I get
24.14 fps. I also implemented this with the newer
av_send/receive packet/frame functions to no avail. I
would be most grateful for any insights, I've spent
quite some time trying to troubleshoot this.<br>
<br>
Can you reproduce the issue with the ffmpeg cli or
only with transcoding.c?<br>
<br>
Why do you think that the output frame rate is 24.14?
What does ffmpeg<br>
-i show for your input file?<br>
<br>
Carl Eugen<br>
_______________________________________________<br>
Libav-user mailing list<br>
<a href="mailto:Libav-user@ffmpeg.org" target="_blank">Libav-user@ffmpeg.org</a><br>
<a href="https://ffmpeg.org/mailman/listinfo/libav-user" rel="noreferrer" target="_blank">https://ffmpeg.org/mailman/listinfo/libav-user</a><br>
<br>
To unsubscribe, visit link above, or email<br>
<a href="mailto:libav-user-request@ffmpeg.org" target="_blank">libav-user-request@ffmpeg.org</a>
with subject "unsubscribe".</blockquote>
</div>
_______________________________________________<br>
Libav-user mailing list<br>
<a href="mailto:Libav-user@ffmpeg.org" target="_blank">Libav-user@ffmpeg.org</a><br>
<a href="https://ffmpeg.org/mailman/listinfo/libav-user" rel="noreferrer" target="_blank">https://ffmpeg.org/mailman/listinfo/libav-user</a><br>
<br>
To unsubscribe, visit link above, or email<br>
<a href="mailto:libav-user-request@ffmpeg.org" target="_blank">libav-user-request@ffmpeg.org</a> with
subject "unsubscribe".</blockquote>
</div>
_______________________________________________<br>
Libav-user mailing list<br>
<a href="mailto:Libav-user@ffmpeg.org" target="_blank">Libav-user@ffmpeg.org</a><br>
<a href="https://ffmpeg.org/mailman/listinfo/libav-user" rel="noreferrer" target="_blank">https://ffmpeg.org/mailman/listinfo/libav-user</a><br>
<br>
To unsubscribe, visit link above, or email<br>
<a href="mailto:libav-user-request@ffmpeg.org" target="_blank">libav-user-request@ffmpeg.org</a>
with subject "unsubscribe".</blockquote>
</div>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
Libav-user mailing list
<a href="mailto:Libav-user@ffmpeg.org" target="_blank">Libav-user@ffmpeg.org</a>
<a href="https://ffmpeg.org/mailman/listinfo/libav-user" target="_blank">https://ffmpeg.org/mailman/listinfo/libav-user</a>
To unsubscribe, visit link above, or email
<a href="mailto:libav-user-request@ffmpeg.org" target="_blank">libav-user-request@ffmpeg.org</a> with subject "unsubscribe".</pre>
</blockquote>
<br>
</div>
_______________________________________________<br>
Libav-user mailing list<br>
<a href="mailto:Libav-user@ffmpeg.org" target="_blank">Libav-user@ffmpeg.org</a><br>
<a href="https://ffmpeg.org/mailman/listinfo/libav-user" rel="noreferrer" target="_blank">https://ffmpeg.org/mailman/listinfo/libav-user</a><br>
<br>
To unsubscribe, visit link above, or email<br>
<a href="mailto:libav-user-request@ffmpeg.org" target="_blank">libav-user-request@ffmpeg.org</a> with subject "unsubscribe".</blockquote></div>