web-dev-qa-db-ja.com

1つのライナーffmpeg(またはその他)で解像度のみを取得しますか?

私はコマンドラインにあまり精通していないので、うまくいけばこれは質問の愚かではありません。

私が実行した場合:

ffmpeg -i videofile.avi

次のような出力が得られます。

ffmpeg version git-2013-11-21-6a7980e Copyright (c) 2000-2013 the FFmpeg develop    ers
  built on Nov 21 2013 12:06:32 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
  configuration: --prefix=/home/user/ffmpeg_build --extra-cflags=-I/home/user/ffmpeg_build/include --extra-ldflags=-L/home/user/ffmpeg_build/lib --b        indir=/home/user/bin --extra-libs=-ldl --enable-gpl --enable-libass --enable    -libfdk-    aac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-l    ibx264 --enable-    nonfree
  libavutil      52. 53.100 / 52. 53.100
  libavcodec     55. 44.100 / 55. 44.100
  libavformat    55. 21.100 / 55. 21.100
  libavdevice    55.  5.100 / 55.  5.100
  libavfilter     3. 91.100 /  3. 91.100
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100
Input #0, avi, from 'videofile.avi':
  Metadata:
    encoder         : Lavf52.68.0
  Duration: 00:23:07.68, start: 0.000000, bitrate: 2390 kb/s
    Stream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 640x480     [SAR 1:1 DAR 4:3], 23.98 fps, 23.98 tbr, 23.98 tbn, 1199 tbc
    Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 44100 Hz, stereo, s16p, 128 k    b/s

「640x480」を出力するコマンドにのみ興味がある場合、どうすればよいですか?

出力を正規表現にパイプし、実行する必要があると思いますか?それを行う方法がわかりません。ありがとう!

8
bcsteeve

Ffmpegでビデオ解像度を取得します。

ffmpeg -i filename 2>&1 | grep -oP 'Stream .*, \K[0-9]+x[0-9]+'

出力(例):

 640x480 
8
Cyrus

Ffmpegパッケージのffprobeを使用:

$ ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 input.mp4
  1280x720

詳細については、 ffprobe documentation および FFmpeg Wiki:ffprobe tips を参照してください。

9
llogan
exiftool -b metavideo.mp4 -ImageWidth
exiftool -b metavideo.mp4 -ImageHeight

grepsなしでジョブを実行します

ワンライナーは次のようになります。

exiftool -b metavideo.mp4 -ImageSize

それはあなたが探していたWxH文字列を返します。

4
Alex Dolgov

ここではexiftoolを使用し、その出力を解析するサンプルのみを表示していますが、これは奇妙な選択のようです。 exiftoolを直接使用して解像度(および他のほとんどのメタデータ)を取得できます。

exiftool -ImageSize -s3 filename

WIDTHxHEIGHT(eq:1280×720)の形式で出力されます

注:-s3は、exiftoolに 最短の出力形式 (タグ名、引用符などなし)を生成するよう指示します

3
Juicy Scripter

正規表現とffmpegを使用してこれを行うことができますが、 exiftool の一部を使用することをお勧めします libimage-exiftool-Perl Install libimage-exiftool-Perl パッケージ:

$ exiftool some/video.ogv | awk -F' *: *' '$1 == "Image Size"{print $2}'
1242x480

なぜexiftoolなのか?

  • ffmpeg/avprobeユーティリティーは、フォームAAAxBBBの1つ以上の値が可能なStream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 640x480の行を印刷します(例でわかるように)。どちらを解決するかを決定するのは難しいかもしれません。
  • 一方、exiftoolは、Type : Valueという形式のデータを出力します。したがって、正確なフィールド、つまりImage Sizeを取得する方が簡単です。さらに、フィールドの指定方法(コロンと空白で区切られている)を考えると、値を簡単に抽出できます。

awk コマンドの機能は次のとおりです。

  • フィールド区切り文字を' *: *'-任意の数のスペースで囲まれたコロン:に設定します。
  • 最初のフィールド($1)がImage Sizeかどうかを確認します
  • そして、2番目のフィールド(print $2)を印刷します。

代替バージョンは次のとおりです。

awk '/^Image Size/{print $4}'
  • デフォルトでは、awkは空白を使用してフィールドを分割するため、ImageSize:および1242x480はすべて異なるフィールドです。
  • 行の先頭(^)をImage Sizeに一致させることにより、正しい行を取得します。
  • そして、4番目のフィールドを印刷します(ImageSizeおよび:が最初の3つのフィールドであるため)。
2
muru

少し難解mediainfoを使用すると、単純なワンライナーを使用した後の形式で幅と高さを簡単に抽出できます。私のシステムで次の例を見てください:

andrew@illium~$ mediainfo --Inform="Video;%Width%x%Height%" test.mp4
1920x1080

この方法で使用できるさまざまなパラメータは、mediainfo --Info-Parametersで見ることができますが、おそらくこの単純な使用法だけで十分です。

1
andrew.46

ファイルのディレクトリから解像度を抽出するために、1ライナーforループを作成しました。

for i in $(ls "/root/vidz/dollabillz/"*); do eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=width,height "$i"); size=${streams_stream_0_width}x${streams_stream_0_height}; echo $i $size; done;
0