Skip to content
Andrew Brampton edited this page Nov 21, 2017 · 22 revisions

I occasionally get asked how to convert a normal FFmpeg command line, into an equivalent FFmpegBuilder. This page maintain a list of examples.

Feel free to add your own examples, or reach out to me.

Example 1: Recording from local webcam, and send to youtube, using a local build of ffmpeg

ffmpeg\win64\bin\ffmpeg.exe \
  -f dshow -rtbufsize 1500M -re \
  -i video=\"Microsoft Camera Rear\":audio=\"Microphone Array (Realtek High Definition Audio(SST))\" \
  -f flv \
  -vcodec libx264 -pix_fmt yuv420p -s 426x240 -r 30/1 -b:v 2000000 \
  -acodec libmp3lame -ar 44100 -b:a 1000000 -bufsize 4000k -maxrate 1000k \
  -profile:v baseline -deinterlace -preset medium -g 30 \
  "rtmp://a.rtmp.youtube.com/live2/1234-5678"
FFmpeg ffmpeg = new FFmpeg("ffmpeg\\win64\\bin\\ffmpeg.exe");

FFmpegBuilder builder =  new FFmpegBuilder()
  .addExtraArgs("-rtbufsize", "1500M")
  .addExtraArgs("-re")
  .setFormat("dshow")
  .setInput("video=\"Microsoft Camera Rear\":audio=\"Microphone Array (Realtek High Definition Audio(SST))\"")
  .addOutput("rtmp://a.rtmp.youtube.com/live2/1234-5678")
    .setFormat("flv")
    .addExtraArgs("-bufsize", "4000k")
    .addExtraArgs("-maxrate", "1000k")

    .setAudioCodec("libmp3lame")
    .setAudioSampleRate(FFmpeg.AUDIO_SAMPLE_44100)
    .setAudioBitRate(1_000_000)

    .addExtraArgs("-profile:v", "baseline")
    .setVideoCodec("libx264")
    .setVideoPixelFormat("yuv420p")
    .setVideoResolution(426, 240)
    .setVideoBitRate(2_000_000)
    .setVideoFrameRate(30)
    .addExtraArgs("-deinterlace")
    .addExtraArgs("-preset", "medium")
    .addExtraArgs("-g", "30")
    .done();

FFmpegExecutor executor = new FFmpegExecutor(ffmpeg);
executor.createJob(builder).run();

Example 2: Setting ogv quality

FFmpegBuilder builder = new FFmpegBuilder()
    .setInput("input.mkv")
    .addOutput("output.ogv")
      .setVideoCodec("libtheora")
      .addExtraArgs("-qscale:v", "7")
      .setAudioCodec("libvorbis")
      .addExtraArgs("-qscale:a", "5")
    .done();

Example 3: Take a thumbnail from a video and scale it down

FFmpegBuilder builder = new FFmpegBuilder()
  .setInput("sample.avi")
  .addOutput("thumbnail.png")
    .setFrames(1)
    .setVideoFilter("select='gte(n\\,10)',scale=200:-1")
    .done();

Example 4: Read from RTSP (IP camera)

and save the video to a set of imgXXX.jpg files

FFmpegBuilder builder =
    new FFmpegBuilder()
        .setInput("rtsp://192.168.1.1:1234/")
        .addOutput("img%03d.jpg")
          .setFormat("image2")
        .done();

Example 5: Set the working directory of ffmpeg

RunProcessFunction func = new RunProcessFunction();
func.setWorkingDirectory("/path/to/working/dir");

FFmpeg ffmpeg = new FFmpeg("/path/to/ffmpeg", func);
FFprobe ffprobe = new FFprobe("/path/to/ffprobe", func);

FFmpegBuilder builder = new FFmpegBuilder()
    .setInput("input")
    .addOutput("output.mp4")
    .done();

FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe);

// Run a two-pass encode
executor.createTwoPassJob(builder).run();

Example 6: Create a video from images

FFmpegBuilder builder = new FFmpegBuilder()
    .addInput("image%03d.png")
    .addOutput("output.mp4")
    .setVideoFrameRate(FFmpeg.FPS_24)
    .done();

Example 7: Complex Filters

TODO

Example 8: Transcode to iOS HEVC format, with video filter set before output

FFmpegBuilder builder = new FFmpegBuilder()
    .addInput("original.mp4")
    .setVideoFilter("select='gte(n\\,10)',scale=200:-1")
    .addOutput("hevc-video.mp4")
    .addExtraArgs("-tag:v", "hvc1")
    .setVideoCodec("libx265")
    .done();

Example 9: Convert a stereo mp3 into two mono tracks.

FFmpegBuilder builder = new FFmpegBuilder()
  .setVerbosity(FFmpegBuilder.Verbosity.DEBUG)
  .setInput("input.mp3")
  .addOutput("left.mp3")
      .addExtraArgs("-map_channel", "0.0.0")
      .done()
  .addOutput("right.mp3")
      .addExtraArgs("-map_channel", "0.0.1")
      .done();
Clone this wiki locally