【问题标题】:How can I easily read video duration and bitrate in Java?如何在 Java 中轻松读取视频时长和比特率?
【发布时间】:2012-01-04 03:18:43
【问题描述】:

这是我的第一个 Java 项目。 我正在用 Java 创建批处理 FTP 视频上传器小程序。

在开始上传视频之前,我需要从视频文件中读取视频时长和视频比特率。

我在 Google 上做了一些研究,但只找到了一些第三方库(jffmpeg、xugler 等)

有没有更简单的方法可以使用 Java 获取这些信息?

【问题讨论】:

  • 删除“id3-tag”可能是个好主意,因为您似乎没有处理 MP3 文件。

标签: java video duration bitrate


【解决方案1】:

您需要使用第 3 方工具,例如 Xuggle 或直接发送至 FFmpeg。 Java 中没有“本机”方法可以做到这一点。 (Java 对“媒体内容”的尝试,比如 JMF,从来没有真正成功过。)编写自己的媒体文件解析器会很困难而且很耗时——这是轻描淡写的说法。

无需花费太多精力就可以编译到 FFmpeg 并解析输出。我的应用程序做到了,尽管它只对持续时间感兴趣。这是一个简单的 CLI 示例:

manoa:~ stu$ ffmpeg -i test.flv 
ffmpeg version 0.8.6, Copyright (c) 2000-2011 the FFmpeg developers
  built on Nov 21 2011 15:43:35 with gcc 4.2.1 (Apple Inc. build 5664)
  configuration: --prefix=/opt/xtendx/local --enable-gpl --enable-pthreads --enable-version3 --enable-nonfree --disable-decoder=prores_lgpl --enable-libvpx --enable-libvorbis --enable-libfaac --enable-libmp3lame --enable-libx264 --enable-libxvid --disable-decoder=libvpx --enable-avfilter --enable-filters --arch=x86_64 --enable-runtime-cpudetect --extra-cflags=-I/opt/xtendx/local/include --extra-ldflags=-L/opt/xtendx/local/lib --enable-hwaccel=mpeg2_vaapi --enable-hwaccel=mpeg4_vaapi --enable-hwaccel=h263_vaapi --enable-hwaccel=wmv3_vaapi
  libavutil    51.  9. 1 / 51.  9. 1
  libavcodec   53.  7. 0 / 53.  7. 0
  libavformat  53.  4. 0 / 53.  4. 0
  libavdevice  53.  1. 1 / 53.  1. 1
  libavfilter   2. 23. 0 /  2. 23. 0
  libswscale    2.  0. 0 /  2.  0. 0
  libpostproc  51.  2. 0 / 51.  2. 0
[flv @ 0x101807c00] Estimating duration from bitrate, this may be inaccurate

Seems stream 0 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 23.98 (24000/1001)
Input #0, flv, from 'trailer_flash.flv':
  Metadata:
    duration        : 125
    width           : 640
    height          : 340
    videodatarate   : 500
    framerate       : 24
    videocodecid    : 4
    audiodatarate   : 128
    audiodelay      : 0
    audiocodecid    : 2
    canSeekToEnd    : true
  Duration: 00:02:04.88, start: 0.000000, bitrate: 640 kb/s
    Stream #0.0: Video: vp6f, yuv420p, 640x340, 512 kb/s, 23.98 tbr, 1k tbn, 1k tbc
    Stream #0.1: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s
At least one output file must be specified

因此,您只需要逐行解析并找到这一行:

Duration: 00:02:04.88, start: 0.000000, bitrate: 640 kb/s

然后把它切碎,你就可以走了!

【讨论】:

  • 感谢重播。我之前考虑过这个解决方案,我使用ffmpeg和php来转码视频,但是java的问题是用户必须安装ffmpeg,这是一个大问题,因为这是网络小程序,很多用户会使用它来上传视频,其中一些可能不知道如何安装 ffmpeg 或者他们不想安装它。我必须找到另一个解决方案...
【解决方案2】:

您可以使用 ffmpeg 项目中的 ffprobe 来获取您的多媒体文件的信息并获得一个很好的 JSON 格式的输出。

this answer 为例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多