web-dev-qa-db-ja.com

ビデオ(mp4)がシェルを使用している時間を確認するにはどうすればよいですか?

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

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

16
Thomas

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

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

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

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

より徹底的な回答 でさらにオプションを見つけることができます。

私のテストでは、ffprobeは0.3秒かかり、mediainfoは0.09秒かかります。

7
qubodup

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

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

Install via the software center

フラグ-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秒。

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

5
Roman Raguet

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

exiftool FILE.mp4 | grep Duration

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

apt install libimage-exiftool-Perl

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

4
zrajm

さらに簡単:

avprobe file.mp4 -show_format_entry duration

pers solution に追加すると、これはディレクトリ全体で使用できます。

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
mcnesium

ffprobeは、出力パスが指定されていない場合にエラーをスローするffmpegよりも洗練されたソリューションです。

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

ご覧のとおり、これを実現する方法は多数あります。 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
0
Elder Geek

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

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

0
meisamhakimi