24

I am but a lowly PHP developer that has been tasked with retrieving some basic information about 100's of thousands of video files. I've had some luck using ffmpeg and extracting the video bitrate, video width, video height, duration, and aspect ratio from them, but with an error ratio of about 5%, this still leaves me with an enormous number of files that I don't know how to deal with. The videos DO play, but the massive amount of data that ffmpeg returns in has me baffled as to how parse the returned XML to find what I need with all the conditions that I seem to be encountering. (The files are a collection from the past 15 years or so, some newly encoded, others converted years ago)

At any rate, I found the following use of ffprobe to get duration, and was hoping that someone here who understands the complexities of using ffmpeg & ffprobe would be kind enough to assist me with finding the other values I need in a more straightforward way than the crazy code I'm using myself, created to climb through the full results of ffmpeg.

ffprobe -i "video.mp4" -show_entries format=duration -v quiet -of csv="p=0"

Thanks so very much in advance.

CLARIFICATION:

I should add that with the below cmd, I can "see" what I need, but I don't understand how to extract what I need. E.g. retrieving the VIDEO bitrate, and suppressing/ignoring the AUDIO bitrate, or determining which of 2 different durations to use (Audio/Video durations?)

C:\>ffprobe -v error -show_entries stream=width,height,bit_rate,duration \
-of default=noprint_wrappers=1 input.mp4
duration=1712.000000
bit_rate=64000
width=320
height=240
duration=1711.946113
bit_rate=359827
duration=1712.000000
bit_rate=N/A
duration=1712.000000
bit_rate=N/A

2 Answers 2

29

If you only want the information from the first video stream use -select_streams v:0:

ffprobe -v error -select_streams v:0 -show_entries stream=width,height,duration,bit_rate -of default=noprint_wrappers=1 input.mp4

Example output:

width=640
height=480
duration=10.000000
bit_rate=942704
3
  • Thanks so much for the assist....I had to accept the other answer only because I was alerted of it first, and it did the trick..
    – GDP
    Commented Sep 9, 2015 at 16:52
  • @GDP Please consider: notified first in this case, because it's the latest answer.
    – p2or
    Commented Sep 9, 2015 at 17:00
  • @poor I take the rep point quite seriously, but this answer wasn't on my screen to accept until I accept the other, then it appeared, thus the immediate apology. Sorry everyone...really didn't mean to offend.
    – GDP
    Commented Sep 9, 2015 at 19:44
11

Source

If you want to get the bit_rate of the first video stream you could use:

ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate \
-of default=noprint_wrappers=1:nokey=1 input.mp4

Where -select_steams v:0 is selecting the first video stream and :nokey=1 gives the value without the key. You could also extract the information by piping it to grep but I'm not sure if that's available on your system.

ffprobe -v error -show_entries stream=width,height,bit_rate,duration \
-of default=noprint_wrappers=1 input.mp4 | grep -oP "(?<=bit_rate\=)[0-9]+"

Hope this helps!

2
  • "piping it to grep"...sounds like something I might have done as a teenager, lol...THANKS for the assist!
    – GDP
    Commented Sep 9, 2015 at 16:50
  • Thanks @GDP but LordNeckbeard's is the answer you should probably accept as it was published first
    – moorej
    Commented Sep 9, 2015 at 17:06

Not the answer you're looking for? Browse other questions tagged or ask your own question.