2017-12-11 26 views
0

私は一時的なフォルダにBufferedImagesを書き、次にffmpegを呼び出してビデオに変換しています。最初にそれらを書き出すのではなく、java内から直接ffmpegに画像を送る方法はありますか?私はこれが可能ならば、これを行うより速い方法だろうと仮定していますか?ビデオからFFMpegのビデオへの画像

これは現在、私がディレクトリから読み込み中のものです。あなたはffmpegのに画像を入力している場合

  ProcessBuilder processBuilder = new ProcessBuilder(
        "ffmpeg", 
        "-y", 
        "-r", framerate, 
        "-f", "image2", 
        "-i", imageFramesDir, 
        "-itsoffset", offset.toString(), 
        "-i", audioFile, 
        "-c:v", "libx264", 
        "-c:a", "aac", 
        "-pix_fmt", "yuv420p", 
        "-crf", "23", 
        "-r", "24", 
        "-vf", "scale=720x406,setdar=16:9", 
        outputFile); 

      processBuilder.redirectErrorStream(false); 
      Process process = processBuilder.start(); 

答えて

0

、あなたは、配管を介して、又は、連結デマルチプレクサとグロブパターンで順次画像、などの複数のオプションを有します。イメージはメモリに保存されるため、ローカルドライブにイメージを書き込む必要はありません。それはアプリケーションのスピードを低下させ、パフォーマンスに悪影響を及ぼします。パイプを使って画像をffmpegに送ることができます。 ffmpegへのパイプデータの詳細については、thisのリンクを参照してください。

また、concat demuxerを使用して複数の画像からビデオを作成することもできます。 Concat demuxerを使用すると、単一のテキストファイルを使用して複数の位置画像を使用できます。イメージパスをテキストファイルに保存して、次のコマンドを実行するだけです。

ffmpeg -f concat -safe 0 -i text.txt -vcodec mpeg4 -f mpegts test.mp4 

パイプは、あなたの要件のためのより強固なオプションです。しかし、どちらの方法も問題に適用できます。

+0

ありがとうございました!それは私がそれがそうであると思ったようにまっすぐに見えませんが、私に目指すものを与えます。 –

関連する問題