ビデオ(mp4)がシェルを使用している時間を確認する方法は?


16

シェルを使用して、長さが4分を超えるディレクトリ内のすべてのmp4ファイルをftpでアップロードする必要があります。動画の長さを確認するスクリプトが見つかりません。誰もそれを行う方法を知っていますか?

どうもありがとうございました!


1
この参照stackoverflow.com/questions/3844430/...を :-)これが役に立てば幸い
harish.venkat

回答:


23

これにより、ビデオの長さがわかります。

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

リモートビデオのURLでも機能します(例:ffmpeg -i " instagram.fewr1-1.fna.fbcdn.net/t50.2886-16/… " 2>&1 | grep Duration | カット-d '' -f 4 | sed s /、//
skidadon

FFmpegログメッセージの形式は保証されていますか?そうでない場合、私はこれがあまり好きではありません-どのリリースでも動作しなくなる可能性があります。
オンドラŽižka19年

7

Mediainfoは、この目的のための高速ツールです。

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

より詳細な回答でより多くのオプションを見つけることができます。

私のテストでffprobeは、0.3秒とmediainfo0.09秒かかります。


これにより、2679600のような奇妙な結果mediainfo --Inform="Video;%Duration/String%" [inputfile]が得られます... 使用する方が良い... 43分50秒の
ロバートリード

5

avconvコマンドを使用してみてください。

最初にインストールする必要があります:

ソフトウェアセンターからインストールする

フラグ-iを指定してコマンドを入力すると、ビデオに関する情報が表示されます。

avconv -i test.mp4

出力には、というフィールドがあります 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

これで、コマンドを使用して、フィールドDurationの値のみを取得できます。

タイプ:

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

私の場合、結果は次のとおりです。

00:58:28.05

58分と28.05秒。

これが役立つことを願っています!


1
これも使用できますavprobe-の必要はありませんが-i、それ以外はまったく同じように機能します。またはffprobe、@ perの回答用。
evilsoup

4

exiftool(元々の画像ファイルからカメラのメタデータを読み取るためのものではなく、後で読みとするために、拡張書き込みメタデータ、ほとんどのすべてのメディアファイルの種類)このために使用することは非常に便利です。以下で実行します:

exiftool FILE.mp4 | grep Duration

おそらくexiftool最初にインストールする必要がありますが、これは次のコマンドで簡単に実行できます(DebianおよびUbuntuなどの派生物で)。

apt install libimage-exiftool-perl

もちろん、この答えは別の選択肢にすぎません。他の回答の多くも良いです。:)



1

persソリューションに追加すると、これはディレクトリ全体で使用できます。

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

さらに拡張することもできます | sortファイルをその長さでソートするます。

これをディレクトリに追加し.bashrcたり、ディレクトリで.bash_aliases実行できるようにすることができます lsvlength | sort

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'

1

ffprobeffmpeg出力パスが指定されていない場合にエラーをスローするよりもエレガントなソリューションです。

ffprobe video.mp4 2>&1 | grep -E '^ +Duration' | cut -d':' -f2- | cut -d, -f1

0

ディレクトリ内のいくつかのビデオの長さを表示したい場合は、次のコマンドを使用できます

exiftool * | grep ^ Duration | カット-d '' -f 26


1
grepなどを使用する必要はありません。単純にexiftool -T -Duration *.mkv(または任意のファイルパターン)
PerlDuck

0

ご覧のとおり、これを実現する方法は多数あります。 ffprobe mediafile -show_entries format=format=duration 2>&1 | grep DURATIONここで、mediafileはファイルの名前で、以下のような出力を提供します。1つ目は最初のストリームの長さ(通常はビデオ)で、2つ目は2つ目のストリームの長さ(通常はオーディオ)です。

  DURATION        : 00:21:40.132000000
  DURATION        : 00:21:40.062000000
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.