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


9

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

実行した場合:

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」を出力するコマンドだけに関心がある場合、どうすればよいですか?

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

回答:


10

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

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

出力(例):

640x480

muruの答えは確かに十分以上でしたが、これは質問されたとおりの質問(具体的にはffmpegを使用)に答えます。回答を選択する際のプロトコルは何なのかわかりません。この場合、Cyrusの回答がより的確である一方で、Muruの回答がより役立つと思います。申し訳ありませんが、どちらの方法を
とるかはわかり

1
注意してください。質問に示されている例では、grepは2つの一致を生成します(最初0x44...と2番目は解像度です)。
muru

DVDからの入力など、入力に複数のビデオストリームが含まれている場合、この回答はwidth x heightビデオストリームごとに複数の行で出力されます。これは、必要に応じてffprobe、またはhead -n 1回答のコマンドに追加することで回避できます。
llogan


4
exiftool -b metavideo.mp4 -ImageWidth
exiftool -b metavideo.mp4 -ImageHeight

greps なしで仕事をします

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

exiftool -b metavideo.mp4 -ImageSize

これにより、探していたWxH文字列が返されます。


これは厳密にはワンライナーではありません。
David Foerster

私はそれが要求されたワンライナーであることに気づいていません、とにかく同じ幅を実行すると-ImageSizeパラメータはWxH文字列を返します。
Alex Dolgov

質問のタイトルをもう一度見てください!;-)とにかく+1
David Foerster、

3

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

exiftool -ImageSize -s3 filename

ウィル形式で出力結果WIDTHxHEIGHT(EQ: 1280×720

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


2

正規表現とを使用してこれを行うことができますffmpegが、私exiftoollibimage-exiftool-perllibimage-exiftool-perlをインストールするパッケージの一部であるを使用したいと思います。

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

なんでexiftool

  • ffmpeg/ avprobeユーティリティは、フォームの行に印刷Stream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 640x480形式の1つ以上の値がAAAxBBB(あなたがあなたの例で見ることができるように)可能ですが。どちらが解決策であるかを判別するのは難しい場合があります。
  • 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つのフィールドです)。

ありがとう!例を編集して、「Ubuntu_Free_Culture_Showcase / How \ fast.ogg」をより一般的なものに変更することをお勧めします。最初は、ファイル名として認識できなかったため、文字通り使用していました。もちろん、2秒後にエラーが表示され、ソリューションは適切に機能します。
bcsteeve 2015年

@bcsteeveこれは、Ubuntuデスクトップにインストールされているサンプルコンテンツの一部であるため使用しました(を参照/usr/share/example)。:D
muru

1

やや難解なの使用はmediainfo、単純なワンライナーを使用した後のフォーマットで幅と高さを簡単に抽出します。私のシステムで次の例を確認してください。

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

この方法で使用できるその他のさまざまなパラメーターを確認できますmediainfo --Info-Parametersが、おそらくこの単純な使用法だけで十分です...


0

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

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;

3
解析lsはうまく終了しません...引用は混乱を修正しません
Zanna

10万回のエンコード後もまだ失敗していません
Kevin Dollabillz '25
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.