[FFmpeg-trac] #3324(avutil:new): AVTimecode framerate is int not AVRational - causes desync

FFmpeg trac at avcodec.org
Sat Jan 18 15:11:26 CET 2014


#3324: AVTimecode framerate is int not AVRational - causes desync
--------------------------------+--------------------------------------
             Reporter:  jnvsor  |                     Type:  defect
               Status:  new     |                 Priority:  normal
            Component:  avutil  |                  Version:  git-master
             Keywords:          |               Blocked By:
             Blocking:          |  Reproduced by developer:  0
Analyzed by developer:  0       |
--------------------------------+--------------------------------------
 Summary of the bug:
 AVTimecode framerate is int not float. To stop desync in NTSC videos 30
 and 60fps are adjusted (by `av_timecode_adjust_ntsc_framenum2`) to 29.97
 and 59.94 respectively.

 This in turn causes desync when you actually do want 30 or 60fps.

 Potential solution:
 AVTimecode already has an AVRational alongside the int, but most of the
 functions use the int. Switch them to AVRational and you can get rid of
 `av_timecode_adjust_ntsc_framenum2` altogether

 How to reproduce:
 {{{
 $ ffmpeg -f lavfi -r 30 -t 30:00 -i "color=c=#000000" -filter_complex
 "[0]scale=730:120,drawtext=fontcolor=#FFFFFF:fontsize=150:fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf:timecode='00\:00\:00\;00':rate=29.5:x=-270[out]"
 -map "[out]" -c:v png -pix_fmt rgba %06d.png
 ffmpeg version N-59884-gfd334b9 Copyright (c) 2000-2014 the FFmpeg
 developers
   built on Jan 18 2014 02:17:50 with gcc 4.8 (Debian 4.8.2-12)
   configuration: --arch=amd64 --enable-pthreads --enable-libopencv
 --enable-librtmp --enable-libopenjpeg --enable-libopus --enable-
 libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi
 --enable-runtime-cpudetect --enable-libvorbis --enable-zlib --enable-
 swscale --enable-libcdio --enable-bzlib --enable-libdc1394 --enable-frei0r
 --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-libpulse
 --enable-vdpau --enable-libvpx --enable-gpl --enable-x11grab --enable-
 libx264 --enable-libfreetype
   libavutil      52. 62.100 / 52. 62.100
   libavcodec     55. 48.101 / 55. 48.101
   libavformat    55. 23.103 / 55. 23.103
   libavdevice    55.  5.102 / 55.  5.102
   libavfilter     4.  1.100 /  4.  1.100
   libswscale      2.  5.101 /  2.  5.101
   libswresample   0. 17.104 /  0. 17.104
   libpostproc    52.  3.100 / 52.  3.100
 Input #0, lavfi, from 'color=c=#000000':
   Duration: N/A, start: 0.000000, bitrate: N/A
     Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 320x240
 [SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
 Output #0, image2, to '%06d.png':
   Metadata:
     encoder         : Lavf55.23.103
     Stream #0:0: Video: png, rgba, 730x120 [SAR 16:73 DAR 4:3], q=2-31,
 200 kb/s, 90k tbn, 30 tbc
 Stream mapping:
   Stream #0:0 (rawvideo) -> scale
   drawtext -> Stream #0:0 (png)
 Press [q] to stop, [?] for help
 frame=54000 fps=713 q=0.0 Lsize=N/A time=00:30:00.00 bitrate=N/A
 video:547899kB audio:0kB subtitle:0 global headers:0kB muxing overhead
 -100.000004%
 # Frame 54000 should now be 29:59;29, instead it's 30:01;23 (1 frame
 desync per 1000)
 }}}

--
Ticket URL: <https://trac.ffmpeg.org/ticket/3324>
FFmpeg <http://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list