2008年7月27日日曜日

端末で動画のフォーマットを確認する の続き

一昨日のエントリで、端末からffmpegで動画のフォーマットを確認できることを確認したが、ffmpegのhelpなど余計なのも出力されてしまっていた。

「grepすればいいじゃん。何言ってんの?」とは言わないで欲しい。
だって、
$ ffmpeg -i smile.mp4 |grep Stream
FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2007 Fabrice Bellard, et al.
configuration: --enable-gpl --enable-pp --enable-swscaler --enable-pthreads --enable-libvorbis --enable-libtheora --enable-libogg --enable-libgsm --enable-dc1394 --disable-debug --enable-libmp3lame --enable-libfaadbin --enable-libfaad --enable-libfaac --enable-xvid --enable-x264 --enable-liba52 --enable-amr_nb --enable-amr_wb --enable-shared --prefix=/usr
libavutil version: 1d.49.3.0
libavcodec version: 1d.51.38.0
libavformat version: 1d.51.10.0
built on Jul 16 2008 19:54:40, gcc: 4.2.3 (Ubuntu 4.2.3-2ubuntu7)

Seems stream 0 codec frame rate differs from container frame rate: 119.88 (120000/1001) -> 30.58 (367/12)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'smile.mp4':
Duration: 00:09:50.0, start: 0.000000, bitrate: 531 kb/s
Stream #0.0(und): Video: h264, yuv420p, 512x384, 30.58 fps(r)
Stream #0.1(und): Audio: aac, 44100 Hz, stereo
Must supply at least one output file
$

こうなっちゃうんだもの。

どうしてかなぁと思ってたのだが、「ffmpeg 標準出力」でググったらこの理由が分かった。
ffmpegが出力するこの文字列、実は標準出力ではなく標準エラー出力で吐き出されているそうなのだ。パイプで繋いでも標準エラー出力はgrepに渡ってくれず、標準エラー出力はそのまま表示されていたという訳。
ここまで分かれば簡単、標準エラー出力を標準出力にリダイレクションしてやればいいので、
$ ffmpeg -i smile.mp4 2>&1 | grep Stream
Stream #0.0(und): Video: h264, yuv420p, 512x384, 30.58 fps(r)
Stream #0.1(und): Audio: aac, 44100 Hz, stereo
$

これでOK。

つか、やっぱり同じことを考えてる先達はいた訳だけど、「ffmpeg 動画 情報」とかでググっても出てこなかったのが、「ffmpeg 標準出力」で一発だったのが泣ける。

<追記>
grepよりtailのほうがいいかも。
$ ffmpeg -i input.mp4 2>&1 | tail -n 5

0 件のコメント: