GNU/Linux >> Linux の 問題 >  >> Linux

Linuxコマンドラインでビデオのフレーム数を取得するにはどうすればよいですか?

ffprobe メディア ファイルに関する情報を取得するために使用できます:

ffprobe -select_streams v -show_streams input.avi

ストリームに関する詳細が表示されます:

nb_frames=159697

nb_frames を探します grep で :

ffprobe -select_streams v -show_streams input.avi 2>/dev/null | grep nb_frames | sed -e 's/nb_frames=//'

これはavi、mp4などで機能します。一部のコンテナでは、有効な値が表示されません。 mpeg.

その場合、これは動作します ffprobe -show_packets a.mpg 2>/dev/null | grep video | wc -l


これは恐ろしく、愚かで、遅いですが、うまくいくようです:

ffmpeg -i foo.avi -vcodec copy -f rawvideo -y /dev/null 2>&1 | tr ^M '\n' | awk '/^frame=/ {print $2}'|tail -n 1

また、切り詰められたファイルや生のストリームでも正しく機能します (.vob ファイルでは何も得られないのはそのためです)


これを別の質問に投稿しました。 tcprobe の使用 ツール (transcode から) パッケージ)、フレーム数は情報に含まれています。 -i を使用 ファイルから情報ダンプを取得するように切り替えます:

$ tcprobe -i foo.avi
[tcprobe] RIFF data, AVI video
[avilib] V: 29.970 fps, codec=XVID, frames=38630, width=512, height=384
[avilib] A: 48000 Hz, format=0x55, bits=16, channels=2, bitrate=128 kbps,
[avilib]    53707 chunks, 21768720 bytes, VBR
[tcprobe] summary for foo.avi, (*) = not default, 0 = not detected
import frame size: -g 512x384 [720x576] (*)
       frame rate: -f 29.970 [25.000] frc=4 (*)
      audio track: -a 0 [0] -e 48000,16,2 [48000,16,2] -n 0x55 [0x2000] (*)
                   bitrate=128 kbps
           length: 38630 frames, frame_time=33 msec, duration=0:21:28.954

ここでは、フレーム数が 2 行 (2 番目の出力行と最後の出力行) で指定されていることに注意してください。


Linux
  1. Linux –パピーリナックスラコをコマンドラインで起動する方法は?

  2. Linuxコマンドラインでファイルの特定の行を表示する方法

  3. UNIX/Linux システムで実行中のプロセスにコマンドライン引数を渡す方法は?

  1. Cを使用してLinuxでCPUの数を取得するには?

  2. Linux のコマンドラインからビデオのビットレートを取得するにはどうすればよいですか?

  3. コマンドラインから Dropbox ファイルの URL を取得するには?

  1. Linuxコマンドラインからソフトウェアをインストールする方法

  2. コマンドラインを使用してLinuxでtar.gzファイルを抽出する方法

  3. コマンドラインを使用してLinuxでユーザーを削除する方法