###標準出力の文字列の中から特定の情報を抽出したいです
現在、Linux(Raspberry Pi)でffmpegを利用して音声ファイル変換をしています。そのときコマンドラインに、自動的にファイルの変換情報が出力されるのですが、この中から変換後のファイルの再生時間である「time=〇〇」の〇〇の部分だけを抜き出したいです。(出力の下から2行目です)
発生している問題
ffmpegのコマンドをパイプでsed, awk, grepコマンドなどと繋げば取得可能かと思い試してみたのですが、強制的に全ての情報が出力されてしまいます。
問題の出力
ffmpeg
1一部抜粋 2Input #0, s16be, from 'spch.raw': 3 Duration: 00:00:02.99, bitrate: 255 kb/s 4 Stream #0:0: Audio: pcm_s16be, 16000 Hz, mono, s16, 256 kb/s 5Output #0, wav, to 'speech2.wav': 6 Metadata: 7 ISFT : Lavf57.56.101 8 Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, mono, s16, 256 kb/s 9 Metadata: 10 encoder : Lavc57.64.101 pcm_s16le 11Stream mapping: 12 Stream #0:0 -> #0:0 (pcm_s16be (native) -> pcm_s16le (native)) 13Press [q] to stop, [?] for help 14size= 93kB time=00:00:02.98 bitrate= 256.2kbits/s speed= 343x 15video:0kB audio:93kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.081537%
試したこと
ffmpeg -y -f s16be -ar 16000 -ac 1 -i spch.raw -ar 16000 -ac 1 -acodec pcm_s16le speech.wav | [ここに次のようなコマンドを入力しました]
コマンド:
sed -n 2p (この行数は適当) rep “time” tail -2
また、subprocess.run()などを使った簡易的なプログラムも作ってみましたが、うまく動かすことができませんでした。
なお、ffprobeを利用して既存のwaveファイルからの情報取得はできました。
ffprobe -i speech.wav -loglevel quiet -show_entries format=duration | sed -n 2p | sed -e "s/duration=//"
これと同様のことをffmpegで実装したいです。変換した後に情報を取得すると時間がかかる上、二度手間になってしまうと考えたため、変換時にまとめて行えるようしたいです。
解決策を教えていただけると助かります。どうぞよろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/26 01:15