2

これは、Javaでの私の最初のプロジェクトです。JavaでバッチFTPビデオアップローダーアプレットを作成しています。

ビデオのアップロードを開始する前に、ビデオファイルからビデオの長さとビデオのビットレートを読み取る必要があります。

Googleで調査を行いましたが、サードパーティのライブラリ(jffmpeg、xuglerなど)しか見つかりませんでした。

Javaを使用してこの情報を取得する簡単な方法はありますか?

4

2 に答える 2

4

Xuggleなどのサードパーティツールを使用するか、 FFmpegに直接シェルアウトする必要があります。これを行うための「ネイティブ」な方法はJavaにはありません。(JMFのような「メディア関連」でのJavaの試みは、実際に行われたことはありません。)独自のメディアファイルパーサーを作成することは、困難で時間がかかるでしょう。これは控えめな表現です。

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

それからそれを切り刻んでください、そしてあなたは行ってもいいです!

于 2011-11-23T09:17:12.067 に答える
0

ffmpegプロジェクトのffprobeを使用して、マルチメディアファイルの情報を取得し、適切にJSON形式の出力を取得できます。

例として、この回答を見てください。

于 2013-05-29T07:01:46.360 に答える