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オプションを有効にしています。
コメント
[…] Python で ffprobe が出力する動画の情報から音声コーデックを取得する | 迷惑… […]