pythonでffprobeが出力する動画の情報から音声コーデックを取得する

python コンピュータ

ffmpegに含まれているffprobeというコマンドを使うと動画の情報を出力することが出来ます。

コンソール上に表示される情報をプログラムで取り込めると、いろいろ活用できるのでPythonで試してみたいと思います。

スポンサーリンク

ソース

#!/usr/bin/env python3

# 外部コマンドの標準出力を取得

import os
import subprocess
import sys
import json
from collections import OrderedDict


move_file = '/var/share/Video/HS3003C.mp4'

cmd = ['ffprobe','-hide_banner','-show_streams','-of','json', move_file]
proc = subprocess.run(cmd, stdout=subprocess.PIPE,stderr=subprocess.PIPE,text=True)
data = json.loads(proc.stdout)

print(data['streams'][1]['codec_name'])
# aac

ffprobeをオプションなしで実行すると標準エラーに情報が出力されます。はじめこちらを正規表現などで解析加工をしようと思いましたが、ffprobeにはxmlやjsonで出力するオプションがありそちらは標準出力で出力してくれます。

pythonの外部コマンド実行のsubprocessですが、オプションにtext=Trueを指定しないと標準出力が文字配列では無くbyte配列になります。スクリプト言語だったらデフォルトは文字列だろうと安易に考えていて見事にハマりました。今回は文字列のほうが都合が良いのでtext=Trueオプションを有効にしています。

コメント