Skip to content

Quick Start

Get started with pyffmpeg in 5 minutes.

Your First Pipeline

import pyffmpeg as ffmpeg

# 1. Create an input
stream = ffmpeg.input('input.mp4')

# 2. Apply filters
stream = stream.filter('scale', w=1280, h=720)

# 3. Create output and run
stream.output('output.mp4').run()

Common Tasks

Resizing Video

import pyffmpeg as ffmpeg

stream = ffmpeg.input('input.mp4')
stream = stream.scale(width=1920, height=1080)
stream.output('resized.mp4').run()

Extracting Audio

import pyffmpeg as ffmpeg

stream = ffmpeg.input('video.mp4')
audio = stream.audio
audio.output('audio.mp3').run()

Converting Format

import pyffmpeg as ffmpeg

ffmpeg.input('input.mp4').output('output.avi').run()

Adding Watermark

import pyffmpeg as ffmpeg

main = ffmpeg.input('video.mp4')
logo = ffmpeg.input('logo.png')

output = main.overlay(logo, x=10, y=10)
output.output('watermarked.mp4').run()

Trimming Video

import pyffmpeg as ffmpeg

# Trim from 00:00:10 to 00:00:30
stream = ffmpeg.input('input.mp4', ss='00:00:10', t=20)
stream.output('trimmed.mp4').run()

Concatenating Videos

import pyffmpeg as ffmpeg

# Create inputs
v1 = ffmpeg.input('part1.mp4')
v2 = ffmpeg.input('part2.mp4')
v3 = ffmpeg.input('part3.mp4')

# Concatenate
joined = ffmpeg.concat(v1, v2, v3)
joined.output('full_video.mp4').run()

Method Chaining

One of pyffmpeg's strengths is fluent method chaining:

import pyffmpeg as ffmpeg

(
    ffmpeg
    .input('input.mp4')
    .filter('scale', w=1280, h=720)
    .filter('fps', fps=30)
    .filter('hflip')  # Horizontal flip
    .output('output.mp4', vcodec='libx264', crf=23)
    .run()
)

Working with Multiple Outputs

Process once, output to multiple files:

import pyffmpeg as ffmpeg

input_stream = ffmpeg.input('input.mp4')

# Create multiple outputs
output1 = input_stream.output('720p.mp4', vcodec='libx264', s='1280x720')
output2 = input_stream.output('480p.mp4', vcodec='libx264', s='854x480')

# Run all at once
ffmpeg.merge_outputs(output1, output2).run()

Checking the Command

Before running, you can inspect the generated FFmpeg command:

import pyffmpeg as ffmpeg

stream = ffmpeg.input('input.mp4')
stream = stream.scale(width=1280, height=720)
output = stream.output('output.mp4')

# Get the command arguments
args = output.get_args()
print(' '.join(args))
# Output: -i input.mp4 -filter_complex [0]scale=w=1280:h=720[s0] -map [s0] output.mp4

Async Execution

For long-running operations, use async execution:

import pyffmpeg as ffmpeg

stream = ffmpeg.input('large_video.mp4')
output = stream.output('compressed.mp4')

# Start process without blocking
process = output.run_async()

# Do other work...
print("Processing video in background...")

# Wait for completion
process.wait()
print("Done!")