私はコマンドラインにあまり精通していないので、うまくいけばこれは質問の愚かではありません。
私が実行した場合:
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」を出力するコマンドにのみ興味がある場合、どうすればよいですか?
出力を正規表現にパイプし、実行する必要があると思いますか?それを行う方法がわかりません。ありがとう!
Ffmpegでビデオ解像度を取得します。
ffmpeg -i filename 2>&1 | grep -oP 'Stream .*, \K[0-9]+x[0-9]+'
出力(例):
640x480
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 を参照してください。
exiftool -b metavideo.mp4 -ImageWidth
exiftool -b metavideo.mp4 -ImageHeight
grep
sなしでジョブを実行します
ワンライナーは次のようになります。
exiftool -b metavideo.mp4 -ImageSize
それはあなたが探していたWxH文字列を返します。
ここではexiftool
を使用し、その出力を解析するサンプルのみを表示していますが、これは奇妙な選択のようです。 exiftool
を直接使用して解像度(および他のほとんどのメタデータ)を取得できます。
exiftool -ImageSize -s3 filename
WIDTHxHEIGHT
(eq:1280×720
)の形式で出力されます
注:-s3
は、exiftoolに 最短の出力形式 (タグ名、引用符などなし)を生成するよう指示します
正規表現とffmpeg
を使用してこれを行うことができますが、 exiftool
の一部を使用することをお勧めします 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
かどうかを確認しますprint $2
)を印刷します。代替バージョンは次のとおりです。
awk '/^Image Size/{print $4}'
Image
、Size
、:
および1242x480
はすべて異なるフィールドです。^
)をImage Size
に一致させることにより、正しい行を取得します。Image
、Size
および:
が最初の3つのフィールドであるため)。少し難解mediainfo
を使用すると、単純なワンライナーを使用した後の形式で幅と高さを簡単に抽出できます。私のシステムで次の例を見てください:
andrew@illium~$ mediainfo --Inform="Video;%Width%x%Height%" test.mp4
1920x1080
この方法で使用できるさまざまなパラメータは、mediainfo --Info-Parameters
で見ることができますが、おそらくこの単純な使用法だけで十分です。
ファイルのディレクトリから解像度を抽出するために、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;