【问题标题】:FFmpeg for marking time video based on a reference date基于参考日期标记时间视频的 FFmpeg
【发布时间】:2018-12-30 04:25:25
【问题描述】:

我正在尝试使用drawtext 过滤器在视频中标记时间戳。 FFmpeg 很容易根据localtimegmtime 甚至PTS 标记时间戳。但是,我想为时间戳分配一个参考时间(开始时间),以表示视频录制(未编码)的时间。

阅读文档,我发现选项basetime 可以用于此目的。但是,这似乎不起作用,或者我遗漏了一些东西。

我使用的命令行是:

ffmpeg -y -i input.mp4 -filter_complex drawtext="fontfile=/tmp/UbuntuMono-B.ttf: fontsize=36: fontcolor=yellow: box=1: boxcolor=black@0.4: text='Wall Clock Time\: %{gmtime\:%Y-%m-%d %T}': basetime=1456007118" output.mp4

通过使用basetime=1456007118,预计开始时间设置为“02/20/2016 20:25:18”,因为 1456007118 是该时间和日期的 UTC 时间:

date -d '02/20/2016 20:25:18' +"%s" # format MM/DD/AAAA hh:mm:ss
1456007118

但是,FFmpeg 没有发出错误,并且视频标记为当前 GMT,忽略了basetime 选项。

有什么提示吗? 谢谢。

关于 FFmpeg 版本和输出的完整信息是:

ffmpeg -y -i /home/denio/Videos/Interstellar_2014_Trailer_4_5.1-1080p-HDTN.mp4 -filter_complex drawtext="fontfile=/tmp/UbuntuMono-B.ttf: fontsize=36: fontcolor=yellow: box=1: boxcolor=black@0.4: text='Wall Clock Time\: %{gmtime\:%Y-%m-%d %T}': basetime=1470226363" /tmp/x.mp4 
ffmpeg version 3.1.1 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.3.1 (Ubuntu 5.3.1-14ubuntu2.1) 20160413
  configuration: --enable-libxavs --enable-bzlib --enable-libfaac --enable-libfreetype --enable-libfontconfig --enable-libmp3lame --enable-libschroedinger --enable-libspeex --enable-libvorbis --enable-libx264 --enable-libx265 --enable-libxvid --enable-zlib --enable-x11grab --enable-static --enable-pthreads --enable-gpl --enable-nonfree --enable-version3 --disable-ffserver --enable-libgsm --enable-librtmp --enable-libvpx --enable-libschroedinger --enable-libopencore-amrnb --enable-libopenjpeg
  libavutil      55. 28.100 / 55. 28.100
  libavcodec     57. 48.101 / 57. 48.101
  libavformat    57. 41.100 / 57. 41.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 47.100 /  6. 47.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
...
...

【问题讨论】:

    标签: ffmpeg timestamp overlay


    【解决方案1】:

    我在源代码中看到了basetime,但在网络文档中没有,所以不确定它应该如何工作。

    您可以改用pts 函数。

    ffmpeg -y -i input.mp4 -vf "drawtext=fontfile=/tmp/UbuntuMono-B.ttf:
                                fontsize=36:fontcolor=yellow:
                                box=1:boxcolor=black@0.4:
                                text='Wall Clock Time\: %{pts\:gmtime\:1456007118}'"
       output.mp4
    

    您可能需要在绘制文本之前重置 PTS (setpts=PTS-STARTPTS)。

    【讨论】:

    • 是的,它工作得很好。我在 [ffmpeg.org/ffmpeg-filters.html#drawtext-1] 阅读了文档,我想我永远无法根据它得出结论。感谢您的帮助。
    • @Gyan 如果我想使用自定义日期时间例如:我想要 02-12-2019 04:25:12 所以它将从 12 开始计数
    • 如何缩放帧率?我不知道如何将%{pts\:gmtime\:1456007118} 乘以一个常数来得到我需要的值。
    猜你喜欢
    • 2017-09-06
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2013-10-11
    • 2019-11-22
    • 2013-02-09
    • 2020-11-25
    相关资源
    最近更新 更多