Ffprobe.exe — Must Watch
info = get_media_info("video.mp4") print(info['format']['duration']) ffprobe.exe is an essential tool for anyone who works with digital media files. It transforms opaque binary files into clear, structured, actionable data. Whether you are a video editor checking source properties, a developer building a media analyzer, or a DevOps engineer validating transcoded assets, ffprobe gives you the truth about your media.
ffprobe [options] input_file Without any options, ffprobe outputs a compact summary. For example: ffprobe.exe
width=1920 height=1080 r_frame_rate=30000/1001 ffprobe -v error -select_streams a:0 -show_entries stream=codec_name,sample_rate,channels -of default=noprint_wrappers=1 audio.mp3 Example 4: Get Duration and Bitrate Without Extra Text ffprobe -v error -show_entries format=duration,bit_rate -of default=noprint_wrappers=1 video.mkv Example 5: Detect if a File Contains Audio ffprobe -v error -select_streams a -show_entries stream=codec_type -of default=noprint_wrappers=1 sample.avi If nothing returns, there's no audio stream. Example 6: Extract All Metadata Tags ffprobe -v quiet -show_entries format_tags -of default=noprint_wrappers=1 input.mov Example 7: Verify HDR (High Dynamic Range) Information ffprobe -v error -select_streams v:0 -show_entries stream=color_primaries,color_transfer,color_space,pix_fmt -of default=noprint_wrappers=1 hdr_video.mkv Example 8: Analyze Packet Timestamps for A/V Sync Issues ffprobe -show_packets -select_streams v -v quiet input.ts > video_packets.txt Output Formats for Automation JSON (Recommended for Programming) ffprobe -v quiet -print_format json -show_format -show_streams input.mp4 Use jq (on Linux/macOS) or ConvertFrom-Json (PowerShell) to parse. XML ffprobe -print_format xml -show_streams input.mp4 CSV ffprobe -print_format csv -show_streams input.mp4 Flat (Key=Value) ffprobe -print_format flat -show_streams input.mp4 Advanced Use Cases 1. Batch Probing Multiple Files Using a loop in Windows Batch: info = get_media_info("video
ffprobe -show_format input.mkv Shows detailed information about each stream (video, audio, subtitle, data). This includes codec name, profile, level, bitrate, frame rate, pixel format, color space, etc. XML ffprobe -print_format xml -show_streams input
ffprobe -show_streams input.mp4 Lists every single frame in the file (video, audio, subtitle). This can be extremely verbose. Use with -select_streams v to limit to video frames.
For video engineers, ffprobe is superior because it understands FFmpeg’s internal structures and can analyze packets, keyframes, and encoding artifacts. PowerShell Example: Get Video Info as Object $output = ffprobe -v quiet -print_format json -show_streams -show_format input.mp4 | ConvertFrom-Json $videoStream = $output.streams | Where-Object $_.codec_type -eq "video" Write-Host "Resolution: $($videoStream.width)x$($videoStream.height)" Bash Example: Check if Video is H.265/HEVC if ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1 input.mkv | grep -q hevc; then echo "HEVC video detected" fi Python Example (subprocess) import subprocess, json def get_media_info(filepath): cmd = ['ffprobe', '-v', 'quiet', '-print_format', 'json', '-show_format', '-show_streams', filepath] result = subprocess.run(cmd, capture_output=True, text=True) return json.loads(result.stdout)