Read Video Info with FFprobe

Wed Dec 28 2022

FFprobe is a tool bundled with FFmpeg to read video info.

Basic Usage

bash
|
ffprobe input.mp4

This command returns data in plain text.

Data Format

FFprobe can print data in various formats: default, compact, csv, flat, ini, json, xml.

Let's print data in JSON:

bash
|
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
  • -v quiet: Set log level to quiet
  • -print_format json: Print data in JSON format
  • -show_format: Show format info
  • -show_streams: Show streams info

Filter Fields

Video infos are mostly stored in streams and format, you can use -show_entries to filter fields:

bash
|
ffprobe -v quiet -print_format json -show_entries format=size,bit_rate -show_entries stream=codec_name,height,width input.mp4
  • -show_entries stream=codec_name,height,width: Show codec name, height and width in streams info
  • -show_entries format=size,bit_rate: Show size and bit rate in format info

Available Fields in streams and format according to FFprobe Tips

ini
|
[STREAM] index=0 codec_name=h264 codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 profile=High codec_type=video codec_time_base=1/50 codec_tag_string=avc1 codec_tag=0x31637661 width=320 height=240 has_b_frames=2 sample_aspect_ratio=1:1 display_aspect_ratio=4:3 pix_fmt=yuv420p level=13 color_range=N/A color_space=unknown color_transfer=unknown color_primaries=unknown chroma_location=left timecode=N/A refs=4 is_avc=1 nal_length_size=4 id=N/A r_frame_rate=25/1 avg_frame_rate=25/1 time_base=1/12800 start_pts=0 start_time=0.000000 duration_ts=384000 duration=30.000000 bit_rate=34761 max_bit_rate=N/A bits_per_raw_sample=8 nb_frames=750 nb_read_frames=N/A nb_read_packets=N/A DISPOSITION:default=1 DISPOSITION:dub=0 DISPOSITION:original=0 DISPOSITION:comment=0 DISPOSITION:lyrics=0 DISPOSITION:karaoke=0 DISPOSITION:forced=0 DISPOSITION:hearing_impaired=0 DISPOSITION:visual_impaired=0 DISPOSITION:clean_effects=0 DISPOSITION:attached_pic=0 TAG:language=und TAG:handler_name=VideoHandler [/STREAM] [STREAM] index=1 codec_name=aac codec_long_name=AAC (Advanced Audio Coding) profile=LC codec_type=audio codec_time_base=1/44100 codec_tag_string=mp4a codec_tag=0x6134706d sample_fmt=fltp sample_rate=44100 channels=1 channel_layout=mono bits_per_sample=0 id=N/A r_frame_rate=0/0 avg_frame_rate=0/0 time_base=1/44100 start_pts=-1024 start_time=-0.023220 duration_ts=1324024 duration=30.023220 bit_rate=56517 max_bit_rate=N/A bits_per_raw_sample=N/A nb_frames=1293 nb_read_frames=N/A nb_read_packets=N/A DISPOSITION:default=1 DISPOSITION:dub=0 DISPOSITION:original=0 DISPOSITION:comment=0 DISPOSITION:lyrics=0 DISPOSITION:karaoke=0 DISPOSITION:forced=0 DISPOSITION:hearing_impaired=0 DISPOSITION:visual_impaired=0 DISPOSITION:clean_effects=0 DISPOSITION:attached_pic=0 TAG:language=und TAG:handler_name=SoundHandler [/STREAM] [FORMAT] filename=input.mp4 nb_streams=2 nb_programs=0 format_name=mov,mp4,m4a,3gp,3g2,mj2 format_long_name=QuickTime / MOV start_time=-0.023220 duration=30.024000 size=368644 bit_rate=98226 probe_score=100 TAG:major_brand=isom TAG:minor_version=512 TAG:compatible_brands=isomiso2avc1mp41 TAG:title=FFprobe Tips TAG:encoder=Lavf56.15.101 [/FORMAT]

Select Video Stream

bash
|
ffprobe -v quiet -print_format json -show_format -show_streams -select_streams v:0 input.mp4
  • -select_streams v:0: Select the first video stream

Select Audio Stream

bash
|
ffprobe -v quiet -print_format json -show_format -show_streams -select_streams a:0 input.mp4
  • -select_streams a:0: Select the first audio stream

Print Selected Value Without Key

bash
|
ffprobe -v quiet -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4 # output: 9020.245000

Print Selected Value With Key

bash
|
ffprobe -v quiet -show_entries format=duration -of default=noprint_wrappers=1 input.mp4 # output: duration=9020.245000