在h264视频上设置假持续时间

时间:2017-02-01 15:14:36

标签: ffmpeg video-streaming metadata h.264

我有一个脚本可以从一个地方获取多个视频块,并将其作为单个视频流式传输到其他地方(到Kodi播放器)。

除了困扰我的一件事之外,一切似乎都运转良好,玩家似乎不知道视频有多长,因此视频播放时总持续时间会增加。

我知道xml文件中视频的持续时间,该文件包含指向所有块的链接,但我不知道如何在第一个块的元数据中写入。

视频编解码器是h264,但我不确定它是否包含在某个容器中,如mp4。

以下是第一个块的ffmpeg -i输出:

ffmpeg version 3.1.5 Copyright (c) 2000-2016 the FFmpeg developers
  built with Apple LLVM version 8.0.0 (clang-800.0.38)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.1.5 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libxvid --disable-lzma --enable-vda
  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
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
[mpegts @ 0x7fc3c6000000] start time for stream 0 is not set in estimate_timings_from_pts
Input #0, mpegts, from '/Users/ibra/Desktop/daTgXic4JOI.ts':
  Duration: 00:00:17.56, start: 0.000000, bitrate: 1220 kb/s
  Program 1 
    Stream #0:0[0x102]: Data: timed_id3 (ID3  / 0x20334449)
    Stream #0:1[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0:2[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 150 kb/s

这是在十六进制编辑器中打开的文件的凌乱屏幕截图: https://www.evernote.com/l/AWlILw5PcmVEl4fSFitOfS2M8Wzy1WTVSZc

有关如何在第一个块的元数据中插入视频持续时间的任何建议吗?

我无法下载所有块然后在单个文件中连接,因为这将花费太多时间并且流式传输必须立即。

1 个答案:

答案 0 :(得分:3)

容器格式为mpegts。没有标准的方法来编码mpegts(或h.264)的持续时间。所以无论你做什么都将是专有的。您可以将其写入ID3元数据,但随后需要修改kodi来处理此问题。