Ubuntu: How to check how long a video (mp4) is using the shell?



Question:

I need to ftp upload all the mp4 files in a directory with length > 4 minutes using the shell. I can't find any script to check how long a video is. Does anybody have any idea how to do that?

Thank you very much!


Solution:1

This will give you the length of a video.

ffmpeg -i myvideo 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//  


Solution:2

You can try to use avconv command..

First you should to install:

Install via the software center

if you type the command with the flag -i, you will get information about the video:

avconv -i test.mp4

In the output there is a field called Duration

avconv version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers    built on Nov  6 2012 16:51:33 with gcc 4.6.3  Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':      Duration: 00:58:28.05, start: 0.000000, bitrate: 888 kb/s      Stream #0.0(eng): Video: h264 (High), yuv420p, 720x404, 748 kb/s, 25 fps, 25 tbr, 20k tbn, 50 tbc      Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s  

Now you can use the command to only get the value of the field Duration

Type:

avconv -i file.mp4 2>&1 | grep 'Duration' | awk '{print $2}' | sed s/,//  

In my case the result is:

00:58:28.05  

58 Minutes and 28.05 seconds.

Hope this will helpful!


Solution:3

Mediainfo is a fast tool for this purpose:

$ mediainfo --Inform="Video;%Duration%"  [inputfile]  

You can find more options in a more thorough answer.

In my tests, ffprobe takes 0.3 seconds and mediainfo takes 0.09 seconds.


Solution:4

Even simpler:

avprobe file.mp4 -show_format_entry duration  


Solution:5

Adding to pers solution, this can be used on an entire directory:

for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,//  | tr -d "\n" && echo " $f"; done  

it can even be extended by | sort to have the files sorted by their length.

you can add this to .bashrc or .bash_aliases in order to be able to do lsvlength | sort on a directory

alias lsvlength='for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,//  | tr -d "\n" && echo " $f"; done'  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »