ffprobe – Comprehensive Tutorial with 7 Examples

In my video processing toolkit, ffprobe has a very prominent place! The FFmpeg library, ffprobe, can rightly be called the Swiss Army Knife of video information extraction or video inspection. As the FFmpeg documentation succinctly puts it,

ffprobe gathers information from multimedia streams and prints it in human- and machine-readable fashion.

With ffprobe, you can print minute but handy details about your videos (pts, dts, frame-rates, pixel formats, picture types, etc.). You can extract information at a high-level (codec type, duration, video size), or at a packet level using the commandline.

All of this makes ffprobe an indispensable tool in every video engineer’s toolkit. In this article, we shall learn how to use ffprobe to analyze videos and extract information about them.

ffprobe

Where do I get ffprobe?

ffprobe can be downloaded from OTTVerse’s FFmpeg builds page. Download the FFmpeg static build for Windows 64-bit, and when you unzip the file, you’ll find three executables – ffmpeg, ffprobe, and ffplay. You can simply open your command prompt, and start using the ffprobe utility.

If you are on a Mac, you can use Homebrew to install ffprobe (installed along with ffmpeg).

brew install ffmpeg

And, on Linux, you can use your OS’s package manager to install ffmpeg which will install ffprobe as well. For example, on Ubuntu –

sudo apt-get install ffmpeg

For detailed installation instructions, please refer to our FFmpeg installation guide for Windows, macOS, and Linux.


How to use ffprobe?

Using ffprobe is very simple. All you have to do is invoke it on the commandline and point it to your video as follows –

$ ffprobe simpsons_1080p2398_clip.mp4

Output
-------

ffprobe version N-100618-gdb738f51de-gca21cb1e36+2 Copyright (c) 2007-2021 the FFmpeg developers
  built with gcc 10.2.0 (Rev6, Built by MSYS2 project)
  configuration:  --cc='ccache gcc' --cxx='ccache g++' --disable-autodetect --enable-amf --enable-bzlib --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 --enable-iconv --enable-lzma --enable-nvenc --enable-zlib --enable-sdl2 --enable-ffnvcodec --enable-nvdec --enable-cuda-llvm --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libdav1d --enable-libaom --disable-debug --enable-fontconfig --enable-libass --enable-libbluray --enable-libfreetype --enable-libmfx --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libwebp --enable-libxml2 --enable-libzimg --enable-libshine --enable-gpl --enable-avisynth --enable-libxvid --enable-libopenmpt --enable-version3 --enable-librav1e --enable-libsrt --enable-libgsm --enable-libvmaf --enable-libsvtav1 --enable-librtmp --enable-mbedtls --extra-cflags=-DLIBTWOLAME_STATIC --extra-libs=-lstdc++ --extra-cflags=-DLIBXML_STATIC --extra-libs=-liconv --disable-w32threads
  libavutil      56. 63.100 / 56. 63.100
  libavcodec     58.116.100 / 58.116.100
  libavformat    58. 65.101 / 58. 65.101
  libavdevice    58. 11.103 / 58. 11.103
  libavfilter     7. 95.100 /  7. 95.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'simpsons_1080p2398_clip.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    title           : The Simpsons Movie - Trailer
    artist          : 20th Century Fox
    date            : 2007
    encoder         : Lavf58.56.100
    genre           : Trailer
  Duration: 00:00:19.99, start: 0.007007, bitrate: 4898 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x800, 5277 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
    Metadata:
      handler_name    : GPAC ISO Video Handler
      vendor_id       : [0][0][0][0]
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 126 kb/s (default)
    Metadata:
      handler_name    : GPAC ISO Audio Handler
      vendor_id       : [0][0][0][0]

As you can see from the output, ffprobe provides a lot of high-level information about your video. It tells you how many streams your video contains, number of video and audio streams, codec details, frame rates, durations, etc.

Remember, this information is at a very high-level and in the future sections, we’ll learn how to go deeper and even get frame-level information using ffprobe.


How to Hide the ffprobe Banner

If you only want certain information from ffprobe, all the information you print regarding FFmpeg (version information, build settings, etc.) can be pretty annoying. Luckily, there is an option to prevent ffprobe from printing all that information, referred to as the “banner.” You do it as follows –

ffprobe -hide_banner <options_follow_...>

This is what the output looks like with the hide_banner option enabled. This is much easier to read without all the information about FFmpeg and the build options that was used to build it.

$ ffprobe crowdruncrf35.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'crowdruncrf35.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.59.100
  Duration: 00:00:10.00, start: 0.000000, bitrate: 4710 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 4704 kb/s, 50 fps, 50 tbr, 12800 tbn, 100 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]

Do you want to get rid of more information? Do you want to remove all the information about the Input, metadata, duration, etc.?

Then you can specify -v error or -v panic and this will further reduce the information printed on the screen. I often use this if I have to post-process the information or take it into a script and don’t need unnecessary text.

$ ffprobe crowdruncrf35.mp4 -hide_banner -v panic

Cool, now let’s look at the output and learn about the different formats in which we can get the output.


Stream Specifiers in ffprobe

It’s very common to come across video files that contain multiple video and audio streams in them (for e.g., multiple languages). Now, let’s suppose that you want to inspect *only* the audio track, how would you do that using ffprobe? Let’s learn!

$$ ffprobe -hide_banner -i simpsons_1080p2398_clip.mp4

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'simpsons_1080p2398_clip.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    title           : The Simpsons Movie - Trailer
    artist          : 20th Century Fox
    date            : 2007
    encoder         : Lavf58.56.100
    genre           : Trailer
  Duration: 00:00:19.99, start: 0.007007, bitrate: 4898 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x800, 5277 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
    Metadata:
      handler_name    : GPAC ISO Video Handler
      vendor_id       : [0][0][0][0]

    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 126 kb/s (default)
    Metadata:
      handler_name    : GPAC ISO Audio Handler
      vendor_id       : [0][0][0][0]

If you look at the output of the Simpsons Trailer that I am using for this article, you’ll see that it has two streams – a video stream (stream #0:0) and an a audio stream (stream #0:1).

If we want to inspect only the audio stream, you’ll need to provide a stream specifier to ffprobe and tell it to provide data about only the audio stream. You can do this using the -select_streams specifier as follows. By mentioning a:0, we tell ffprobe to inspect the audio stream with index = 1.

ffprobe -hide_banner -v panic -select_streams v:0 -show_entries stream=bit_rate

The output of this is shown below. As you can see, it only provides the bitrate of the audio stream with index = 1.

[STREAM]
bit_rate=5277205
[/STREAM]

Hide the wrappers [STREAM] and [/STREAM]?

If you look at the output from ffprobe, it provides you the information in a wrapper [STREAM] and [/STREAM]. To get rid of that, you need to specify the following in your commandline

noprint_wrappers=1

Now, let’s test the previous commandline and look at the output –

$$ ffprobe -v error -hide_banner -select_streams v:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1 simpsons_1080p2398_clip.mp4

bit_rate=5277205

As you can see, ffprobe only printed the bit_rate of the video stream without the wrappers!


How to Extract Information about Streams, Packets, Frames, and Container Formats using ffprobe?

ffprobe, as you know, can provide a lot of information about every stream, packet, and frame of your input video. To get access to this information, you have to specify the following in your commandline –

  1. -show_streams to get information on every stream
  2. -show_format to get information on the container format
  3. -show_packets to get information on every packet
  4. -show-frames to get information on every frame

Per-Stream information using ffprobe

Let’s get information on all the streams using the -show_streams specifier.

$$ ffprobe -v error -hide_banner -select_streams v:0 -show_streams simpsons_1080p2398_clip.mp4

[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=1001/48000
codec_tag_string=avc1
codec_tag=0x31637661
width=1920
height=800
coded_width=1920
coded_height=800
closed_captions=0
has_b_frames=1
sample_aspect_ratio=N/A
display_aspect_ratio=N/A
pix_fmt=yuv420p
level=41
color_range=unknown
color_space=unknown
color_transfer=unknown
color_primaries=unknown
chroma_location=left
field_order=unknown
timecode=N/A
refs=1
is_avc=true
nal_length_size=4
id=N/A
r_frame_rate=24000/1001
avg_frame_rate=24000/1001
time_base=1/24000
start_pts=48000
start_time=2.000000
duration_ts=433433
duration=18.059708
bit_rate=5277205
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=433
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
DISPOSITION:timed_thumbnails=0
TAG:language=und
TAG:handler_name=GPAC ISO Video Handler
TAG:vendor_id=[0][0][0][0]
[/STREAM]

The output contains a lot of vital information at a stream-level. You can inspect the height, width, frame-rate, bitrate, size, codec, codec level & profile, pixel format, presence of B-frames, etc.

How about we go one level deeper and get information on a per-packet basis?

Per-Packet information using ffprobe

Using the following command, you can get information about every packet in your video i.e., using -show_packets. For demo purposes, I’ve only shown one of the packets. As you can see, it contains detailed information about the pts, dts, duration, size, etc.

$$ ffprobe -v error -hide_banner -select_streams v:0 -show_packets simpsons_1080p2398_clip.mp4
.
.
.
[PACKET]
codec_type=video
stream_index=0
pts=72024
pts_time=3.001000
dts=72024
dts_time=3.001000
duration=1001
duration_time=0.041708
convergence_duration=N/A
convergence_duration_time=N/A
size=1094
pos=738626
flags=__
[/PACKET]
.
.

Super! Let’s now go one level deeper – down to the frame-level, shall we?

Per-Frame information using ffprobe

Now, let’s get information about every frame of video using the -show_frames command. The output contains a whole lot of information – the timestamps, width, height, pixel format, picture type (I, P, B), picture number in display-order and decode-order, color space, is the picture interlaced or not, and if it is – is it top-field-first or bottom-field-first? Is the frame a Keyframe? Tons of information on a frame-level, right?

$$ ffprobe -v error -hide_banner -select_streams v:0 -show_packets simpsons_1080p2398_clip.mp4
.
.
.
[FRAME]
media_type=video
stream_index=0
key_frame=0
pkt_pts=53005
pkt_pts_time=2.208542
pkt_dts=53005
pkt_dts_time=2.208542
best_effort_timestamp=53005
best_effort_timestamp_time=2.208542
pkt_duration=1001
pkt_duration_time=0.041708
pkt_pos=283117
pkt_size=33853
width=1920
height=800
pix_fmt=yuv420p
sample_aspect_ratio=N/A
pict_type=P
coded_picture_number=2
display_picture_number=0
interlaced_frame=0
top_field_first=0
repeat_pict=0
color_range=unknown
color_space=unknown
color_primaries=unknown
color_transfer=unknown
chroma_location=left
[/FRAME]
.
.

Container-Format information using ffprobe

You can also get information about the container format using ffprobe using the -show_format option in the commandline. As you can see, it contains all the information about the container, the duration, size, bitrate, and any tags that accompany the container.

$$ ffprobe -v error -hide_banner -select_streams v:0 -show_format simpsons_1080p2398_clip.mp4


[FORMAT]
filename=simpsons_1080p2398_clip.mp4
nb_streams=2
nb_programs=0
format_name=mov,mp4,m4a,3gp,3g2,mj2
format_long_name=QuickTime / MOV
start_time=0.007007
duration=19.993000
size=12242914
bit_rate=4898880
probe_score=100
TAG:major_brand=isom
TAG:minor_version=512
TAG:compatible_brands=isomiso2avc1mp41
TAG:title=The Simpsons Movie - Trailer
TAG:artist=20th Century Fox
TAG:date=2007
TAG:encoder=Lavf58.56.100
TAG:genre=Trailer
[/FORMAT]

Now that we’ve understood the depth of information available to us using ffprobe, let’s take a look at how to pretty-print the output so that it is easy to pass it on downstream (for post-processing, or use in compression, etc.)


Output formats – JSON, CSV, XML

ffprobe has a wide option of writers and you can choose from default format (as we’ve seen in previous examples), JSON, CSV, XML, flat, and ini output formats.

Choosing the output format is very simple and requires the use of the print_format <option> in the commandline. Here are a few examples of how the output looks for the show_format specifier.

JSON output from ffprobe

ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format json -select_streams v:0 -show_format simpsons_1080p2398_clip.mp4

{
    "format": {
        "filename": "simpsons_1080p2398_clip.mp4",
        "nb_streams": 2,
        "nb_programs": 0,
        "format_name": "mov,mp4,m4a,3gp,3g2,mj2",
        "format_long_name": "QuickTime / MOV",
        "start_time": "0.007007",
        "duration": "19.993000",
        "size": "12242914",
        "bit_rate": "4898880",
        "probe_score": 100,
        "tags": {
            "major_brand": "isom",
            "minor_version": "512",
            "compatible_brands": "isomiso2avc1mp41",
            "title": "The Simpsons Movie - Trailer",
            "artist": "20th Century Fox",
            "date": "2007",
            "encoder": "Lavf58.56.100",
            "genre": "Trailer"
        }
    }
}

CSV output from ffprobe (also known as “compact”)

ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format csv -select_streams v:0 -show_format simpsons_1080p2398_clip.mp4

format,simpsons_1080p2398_clip.mp4,2,0,"mov,mp4,m4a,3gp,3g2,mj2",QuickTime / MOV,0.007007,19.993000,12242914,4898880,100,isom,512,isomiso2avc1mp41,The Simpsons Movie - Trailer,20th Century Fox,2007,Lavf58.56.100,Trailer

XML output from ffprobe

ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format xml -select_streams v:0 -show_format simpsons_1080p2398_clip.mp4

<?xml version="1.0" encoding="UTF-8"?>
<ffprobe>
    <format filename="simpsons_1080p2398_clip.mp4" nb_streams="2" nb_programs="0" format_name="mov,mp4,m4a,3gp,3g2,mj2" format_long_name="QuickTime / MOV" start_time="0.007007" duration="19.993000" size="12242914" bit_rate="4898880" probe_score="100">
        <tag key="major_brand" value="isom"/>
        <tag key="minor_version" value="512"/>
        <tag key="compatible_brands" value="isomiso2avc1mp41"/>
        <tag key="title" value="The Simpsons Movie - Trailer"/>
        <tag key="artist" value="20th Century Fox"/>
        <tag key="date" value="2007"/>
        <tag key="encoder" value="Lavf58.56.100"/>
        <tag key="genre" value="Trailer"/>
    </format>
</ffprobe>

ini output frm ffprobe

ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format ini -select_streams v:0 -show_format simpsons_1080p2398_clip.mp4
# ffprobe output

[format]
filename=simpsons_1080p2398_clip.mp4
nb_streams=2
nb_programs=0
format_name=mov,mp4,m4a,3gp,3g2,mj2
format_long_name=QuickTime / MOV
start_time=0.007007
duration=19.993000
size=12242914
bit_rate=4898880
probe_score=100

[format.tags]
major_brand=isom
minor_version=512
compatible_brands=isomiso2avc1mp41
title=The Simpsons Movie - Trailer
artist=20th Century Fox
date=2007
encoder=Lavf58.56.100
genre=Trailer

flat output from ffprobe

ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format flat -select_streams v:0 -show_format simpsons_1080p2398_clip.mp4
format.filename="simpsons_1080p2398_clip.mp4"
format.nb_streams=2
format.nb_programs=0
format.format_name="mov,mp4,m4a,3gp,3g2,mj2"
format.format_long_name="QuickTime / MOV"
format.start_time="0.007007"
format.duration="19.993000"
format.size="12242914"
format.bit_rate="4898880"
format.probe_score=100
format.tags.major_brand="isom"
format.tags.minor_version="512"
format.tags.compatible_brands="isomiso2avc1mp41"
format.tags.title="The Simpsons Movie - Trailer"
format.tags.artist="20th Century Fox"
format.tags.date="2007"
format.tags.encoder="Lavf58.56.100"
format.tags.genre="Trailer"

Extracting Information using ffprobe’s specifiers

In the previous sections, we’ve learned about the format, stream, packet, and frame-level specifiers; and we also learned how to print ffprobe’s output in XML, CSV, JSON, flat, and ini formats.

Now, if we want to extract only the codec details, or the frame size, or the picture_type using ffprobe, how do we do this?

ffprobe has streams specifiers that allow you to specify and extract only what information you need, and not print everything! To use these specifiers, you need first use the format, stream, packet, frame option, and then use -show_entries option along with the key that you are looking to extract.

It’s easier to understand with an example. Let’s print the height and width of a video!

The height and width are present in the stream-level information. So, we need to first specify the option -show_entries in the command line. Then, we use stream=width, height to tell ffprobe to give us only the width and height details from the “stream” information.

Similarly, we can use “packet”, “format”, “frame”, “stream”, and then specify the keys (comma-separated) to print only that information.

In the next few sections, let’s look a few examples of this in action!


Examples of using ffprobe to extract information from streams

With all that we’ve learned so far, let’s now look at some examples of information extraction using ffprobe.

1. Height and Width using ffprobe’s specifiers

To extract the height and width of a video using ffprobe, you need to the height and width specifiers and ffprobe will return the data. Here’s the commandline –

# height and width using ffprobe
# output is printed in flat format

ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format flat -select_streams v:0 -show_entries stream=width,height simpsons_1080p2398_clip.mp4

streams.stream.0.width=1920
streams.stream.0.height=800

2. Display PTS of all the packets

To extract the PTS (Picture TimeStamp) of all the packets in a video, you need to use the modifier packet=pts_time as follows –

# PTS of all the packets 

ffprobe -v error -hide_banner -of default=noprint_wrappers=1 -select_streams v:0 -show_entries packet=pts_time simpsons_1080p2398_clip.mp4

.
.
pts_time=2.000000
pts_time=2.041708
pts_time=2.208542
pts_time=2.083417
pts_time=2.125125
pts_time=2.166833
pts_time=2.375375
pts_time=2.250250
.
.


3. Find duration using ffprobe and print in XML format

To extract the duration of the video using ffprobe, you need to use the modifier stream=duration as follows –

# print the duration of the video in XML format

ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format xml -select_streams v:0 -show_entries stream=duration simpsons_1080p2398_clip.mp4

<?xml version="1.0" encoding="UTF-8"?>
<ffprobe>
    <programs>
    </programs>

    <streams>
        <stream duration="18.059708"/>
    </streams>
</ffprobe>

4. Print the Picture Types using ffprobe

If you want to know the picture types of every frame of a video using ffprobe, then you need to go down to the frame level. If you inspect the frame-level information we printed earlier, then you can see that the picture type information is contained in the pict_type key. So, let’s use that along with the frame modifier.

# Print the picture types of every frame in the flat format

ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format flat  -select_streams v:0 -show_entries frame=pict_type simpsons_1080p2398_clip.mp4

frames.frame.0.pict_type="I"
frames.frame.1.pict_type="P"
frames.frame.2.pict_type="B"
frames.frame.3.pict_type="B"
frames.frame.4.pict_type="B"
frames.frame.5.pict_type="P"
frames.frame.6.pict_type="B"
frames.frame.7.pict_type="B"
frames.frame.8.pict_type="B"
frames.frame.9.pict_type="P"
frames.frame.10.pict_type="B"
frames.frame.11.pict_type="B"
frames.frame.12.pict_type="P"
frames.frame.13.pict_type="P"
frames.frame.14.pict_type="P"
frames.frame.15.pict_type="P"
frames.frame.16.pict_type="P"
frames.frame.17.pict_type="P"
frames.frame.18.pict_type="P"
frames.frame.19.pict_type="B"
frames.frame.20.pict_type="B"

5. Get the bitrate of the video using ffprobe

The video’s bitrate is printed at the stream level. So, we need to specify stream=bit_rate in our commandline to get the video’s bitrate.

# Extract the bitrate of a video using ffprobe 

ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format flat  -select_streams v:0 -show_entries stream=bit_rate simpsons_1080p2398_clip.mp4

streams.stream.0.bit_rate="5277205"

6. Print the codec details using ffprobe

Where do you get the codec details? At the stream level, right? So, let’s use the stream specifier and get all this information out.

ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format flat  -select_streams v:0 -show_entries stream=codec_name,codec_long_name,profile,codec_tag_string simpsons_1080p2398_clip.mp4

streams.stream.0.codec_name="h264"
streams.stream.0.codec_long_name="H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"
streams.stream.0.profile="High"
streams.stream.0.codec_tag_string="avc1"

7. Display pixel format using ffprobe

ffprobe -v error -hide_banner -of default=noprint_wrappers=0 -print_format flat  -select_streams v:0 -show_entries stream=pix_fmt simpsons_1080p2398_clip.mp4

streams.stream.0.pix_fmt="yuv420p"

Conclusion

That’s it folks – we’ve reached the end of our ffprobe tutorial and we hope it was useful to you. For further information on ffprobe, please refer to the official documentation. If you have any handy tips on ffprobe usage, please let us know in the comments section, and we’ll add it to the article.

Thank you, take, care, and happy streaming!


About The Author

I’m Krishna Rao Vijayanagar, Ph.D., and I am the Founder and Editor of OTTVerse.com. I've spent several years working hands-on with Video Codecs (AVC, HEVC, MultiView Plus Depth), ABR streaming, and Video Analytics (QoE, Content & Audience, and Ad). I hope to use my experience and love for video streaming to bring you information and insights into the OTT universe. Please use the Contact Page to get in touch with me.

Leave a Reply

Scroll to Top