设置使用ffmpeg的视频流的元数据 [英] Setting video stream metadata using Ffmpeg

查看:4751
本文介绍了设置使用ffmpeg的视频流的元数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的JavaCV <一href="https://github.com/bytedeco/javacv/blob/master/src/main/java/org/bytedeco/javacv/FFmpegFrameRecorder.java">FFmpegFrameRecorder等级,符合EN code Android的摄像头preVIEW帧到视频。

I'm using the JavaCV FFmpegFrameRecorder class to encode Android's camera preview frames into a video.

我们的目标是复制下面的命令行的结果是:

The goal would be to replicate the result of the following command line:

ffmpeg -i input.mp4 -metadata:s:v:0 rotate="90" output.mp4

我修改了 startUnsafe()的方法如下,但它不能产生所需要的输出:

I modified the startUnsafe() method as follows, but it failed to generate the desired output:

if ((video_st = avformat_new_stream(oc, video_codec)) != null) {
        video_c = video_st.codec();
        video_c.codec_id(oformat.video_codec());
        video_c.codec_type(AVMEDIA_TYPE_VIDEO);
        ...
        AVDictionary avDictionary = new AVDictionary(null);
        av_dict_set(avDictionary, "rotate", "90", 0);
        video_st.metadata(avDictionaty);
        ...
}
...
avformat_write_header(oc, (PointerPointer) null);

这还是连接codeS视频正确,但加元从来没有出现在ffprobe。如果有帮助,视频编码为H264。

This still encodes the video correctly, but the added metadata never appears on ffprobe. If it helps, the video encoding is h264.

顺便说一句,这里的ffprobe输出:

By the way, here's the ffprobe output:

ffprobe version 2.3.3 Copyright (c) 2007-2014 the FFmpeg developers
  built on Jan 22 2015 18:22:57 with Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.3.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid --enable-libfreetype --enable-libvorbis --enable-libvpx --enable-libass --enable-ffplay --enable-libfdk-aac --enable-libopus --enable-libquvi --enable-libx265
  libavutil      52. 92.100 / 52. 92.100
  libavcodec     55. 69.100 / 55. 69.100
  libavformat    55. 48.100 / 55. 48.100
  libavdevice    55. 13.102 / 55. 13.102
  libavfilter     4. 11.100 /  4. 11.100
  libavresample   1.  3.  0 /  1.  3.  0
  libswscale      2.  6.100 /  2.  6.100
  libswresample   0. 19.100 /  0. 19.100
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'abcd.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.15.102
  Duration: 00:00:19.48, start: 0.023220, bitrate: 572 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1280x720, 573 kb/s, 5.71 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 64 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

这是为什么它没有什么建议?谢谢你。

Any suggestions on why is it failing? Thanks.

推荐答案

看来这个问题产生了很大的兴趣,所以我加入了一些更多的信息。在此之后 GitHub的问题塞缪尔从JavaCV的提交一些修改,以允许对元数据的设置更容易获得。

It seems this question generated a lot of interest so I'm adding some more info. Following this GitHub issue Samuel from JavaCV committed some changes to allow easier access to metadata settings.

设置的元数据可以通过以下code段来实现:

Setting metadata can be achieved through the following code snippet:

AVDictionary metadata = new AVDictionary(null);
for (Entry<String, String> e : videoMetadata.entrySet()) {
    av_dict_set(metadata, e.getKey(), e.getValue(), 0);
}
video_st.metadata(metadata);

您可以通过执行实现它现在 MVN安装-Pffmpeg 或等待下一个JavacV版本,这应该是0.12。

You can enable it right now by doing mvn install -Pffmpeg or wait until the next JavacV release, which should be 0.12.

PS:正如你所看到的,这是类似于我presented在我的问题pretty的,所以我不知道为什么它摆在首位没有工作

PS: As you can see, this is pretty similar to what I presented in my question, so I'm not sure why it didn't work in the first place.

这篇关于设置使用ffmpeg的视频流的元数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆