video - ffmpeg 连接并保留元数据流

标签 video ffmpeg gopro

我正在尝试合并多个文件,这些文件是 GoPro Hero6 分割电影的结果,以避免 FAT 4GB 限制。 ffmpeg 非常适合这个目的,但我需要在元数据流中编码的遥测数据,默认情况下 ffmpeg 似乎不保留它。使用 ffprobe 命令你可以看到源视频有:

Stream #0:3(eng): Data: none (gpmd / 0x646D7067), 36 kb/s (default)
Metadata:
  creation_time   : 2018-07-15T16:16:26.000000Z
  handler_name    : GoPro MET

我从研究中知道这是我需要的流(尽管我希望能够复制所有流)。但是,当使用 ffmpeg -f concat 时,输出为:

[concat @ 0x7febb9800000] Could not find codec parameters for stream 2 (Unknown: none): unknown codec
Consider increasing the value for the 'analyzeduration' and 'probesize' options
[concat @ 0x7febb9800000] Could not find codec parameters for stream 3 (Unknown: none): unknown codec
Consider increasing the value for the 'analyzeduration' and 'probesize' options
[concat @ 0x7febb9800000] Could not find codec parameters for stream 4 (Unknown: none): unknown codec
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, concat, from 'tmp.txt':
  Duration: N/A, start: 0.000000, bitrate: 66194 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709), 2704x1520 [SAR 1:1 DAR 169:95], 66005 kb/s, 59.94 fps, 59.94 tbr, 60k tbn, 119.88 tbc
    Metadata:
      creation_time   : 2018-07-15T16:08:22.000000Z
      handler_name    : GoPro AVC
      encoder         : GoPro AVC encoder
      timecode        : 16:23:48:21
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 189 kb/s
    Metadata:
      creation_time   : 2018-07-15T16:08:22.000000Z
      handler_name    : GoPro AAC
      timecode        : 16:23:48:21
    Stream #0:2: Unknown: none
    Stream #0:3: Unknown: none
    Stream #0:4: Unknown: none
Output #0, mp4, to 'GH0089.MP4':
  Metadata:
    encoder         : Lavf58.12.100
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709), 2704x1520 [SAR 1:1 DAR 169:95], q=2-31, 66005 kb/s, 0.02 fps, 59.94 tbr, 60k tbn, 60k tbc
    Metadata:
      creation_time   : 2018-07-15T16:08:22.000000Z
      handler_name    : GoPro AVC
      encoder         : GoPro AVC encoder
      timecode        : 16:23:48:21
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 189 kb/s
    Metadata:
      creation_time   : 2018-07-15T16:08:22.000000Z
      handler_name    : GoPro AAC
      timecode        : 16:23:48:21
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help

Could not find codec parameters 警告特别有趣,Stream mapping 显示只有视频和音频流被映射。我试过 map_metadata 但无济于事。我的格式可能不正确,但问题似乎更可能与警告有关,因为无法识别编解码器,我希望默认情况下映射所有流。

我期望或希望得到一个忽略警告并映射无法识别的流而不试图理解它们的答案。

感谢任何帮助。

最佳答案

最终解决了这个问题……主要是……

ffmpeg \
    -y -f concat -i test.txt -c copy \
    -map 0:v -map 0:a -map 0:3 \
    -copy_unknown -tag:2 gpmd \
    test2.mp4

如果 ffmpeg 被标记为 gpmd,似乎 ffmpeg 会理解遥测数据......但是无论我做什么,还有 2 个其他流不会映射。似乎 ffmpeg 必须能够解析它并且不能出于某种原因简单地复制这些位。如果你标记它,它可以理解 gpmd 流,但它不能理解其他流之一(fsck 我认为......似乎主要用于硬件所以不是无论如何都很重要)。时间码流被标记为 tmcd 但 GoPro 似乎没有遵循此处的标准,因此无法 1:1 映射...上面的代码产生的似乎是最稳定的结果,至少在我尝试过的设置下是这样。

关于video - ffmpeg 连接并保留元数据流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51354696/

相关文章:

php - 在 PHP 中使用 FFMpeg av_read_frame?

Chrome 中的 HTML5 <video> 标签不起作用

ffmpeg - 如何获得最高分辨率,可被 2 整除,其中包含旋转后没有黑色边框的视频?

ffmpeg - 不同的视频播放器在 ffmpeg 转换后显示不正确的 mp4 分辨率

ios - 从iOS控制GoPro

video - 从 Youtube 下载视频 : errorcode=150

python - 将相机捕获的视频流式传输到另一个位置

c#将实时帧记录为视频的最佳方法是什么

live-streaming - GoPro Hero5 直播到桌面

video - GPS信息在视频帧中丢失