Opened 21 months ago

Closed 12 months ago

Last modified 12 months ago

#11268 closed defect (fixed)

[Regression] "-use_wallclock_as_timestamps" ineffective

Reported by: Wes Castro Owned by:
Priority: important Component: ffmpeg
Version: git-master Keywords:
Cc: Wes Castro, MasterQuestionable Blocked By:
Blocking: Reproduced by developer: yes
Analyzed by developer: yes

Description

Summary of the bug:
When piping a raw H264 stream to FFmpeg with -use_wallclock_as_timestamps 1, wallclock times are not used. If the pipe is opened for say 10 seconds, it's expected that the output's duration will be ~10 seconds. Instead it seems to use timing info from the input stream. I didn't test with other types of piped inputs

The issue was introduced in FFmpeg 6.1 and repros on the master branch.

How to reproduce:

ffmpeg -y -f lavfi -i testsrc=duration=1:size=1280x720:rate=30 -f h264 ~/1second.h264
(cat ~/1second.h264; sleep 10; cat ~/1second.h264) | ffmpeg  -use_wallclock_as_timestamps 1 -i pipe: -f mp4 ~/test.mp4 -y

Here are the durations reported by FFprobe when using various FFmpeg versions for the second line:

Change History (3)

comment:1 by MasterQuestionable, 21 months ago

Cc: MasterQuestionable added
Component: undeterminedffmpeg
Summary: -use_wallclock_as_timestamps 1 not working with piped input[Regression] "-use_wallclock_as_timestamps" ineffective

͏    See also:
͏    https://ffmpeg.org/ffmpeg-formats.html#Format-Options
͏    https://www.google.com/search?hl=en&gl=ca&num=10&q=wallclock+time&nfpr=1

͏    "-use_wallclock_as_timestamps" mostly undocumented...
͏    And search for "wallclock" may give funny results.


͏    I guess it may apply to random formats.
͏    And probably without Pipe.

comment:2 by James, 12 months ago

Analyzed by developer: set
Priority: normalimportant
Reproduced by developer: set
Resolution: fixed
Status: newclosed
Version: unspecifiedgit-master

Should be fixed in 1787fade209b1ecbd4b911c9d77a52bcdec13fa6 for master, and backported to release/7.1, release/7.0 and release/6.1 branches.

comment:3 by MasterQuestionable, 12 months ago

͏    The peculiar writing for boolean interpretation coercion:
͏    !!(d->f.ctx->iformat->flags & AVFMT_NOTIMESTAMPS)
͏    etc.
͏    .
͏    Probably would be better rewritten as:
͏    [ ↓ Needs "#include <stdbool.h>". ]
͏    (bool) ( d->f.ctx->iformat->flags & AVFMT_NOTIMESTAMPS )

͏    Also "!!" on already boolean ("is_unreliable") would be meaningless.
͏    (even somewhat code obfuscation)


͏    Code style recommendation:
͏    !!is_unreliable
͏    !!( ist->fix_sub_duration )
͏    (bool) is_unreliable
͏    (bool) ( ... )

Note: See TracTickets for help on using tickets.