python - Python从视频(音频/视频)中获取流列表
问题描述
我有一个视频文件,我想从中获取流列表。例如,我可以通过执行一个简单的 `ffprobe video.mp4 来查看所需的结果:
....
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661) ......
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), ......
....
但是我需要使用在 Windows 和 Ubuntu 上都可以工作的 python 和代码,而不需要执行外部进程。
我的真正目标是检查视频中是否有任何音频流(简单的是/否就足够了),但我认为获取额外信息可能有助于解决我的问题,所以我要询问整个流
编辑:澄清我需要避免执行一些外部进程,而是在进程中寻找一些 python 代码/库来执行它。
解决方案
import os
import json
import subprocess
file_path = os.listdir("path to your videos folder")
audio_flag = False
for file in file_path:
ffprobe_cmd = "ffprobe -hide_banner -show_streams -print_format json "+file
process = subprocess.Popen(ffprobe_cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE, shell=True)
output = json.loads(process.communicate()[0])
for stream in output["streams"]:
if(stream['codec_type'] == 'audio'):
audio_flag = True
break;
if(audio_flag):
print("audio present in the file")
else:
print("audio not present in the file")
# loop through the output streams for more detailed output
for stream in output["streams"]:
for k,v in stream.items():
print(k, ":", v)
注意:确保您的视频文件夹路径仅包含有效的视频文件,因为我没有在上面的代码片段中包含任何文件验证。此外,我已经针对包含一个视频流和一个音频流的视频文件测试了此代码。
推荐阅读
- haskell - Haskell 少输入测试样板
- c - 如何在两个不同的独立进程中使用信号量?
- java - 错误:更新或删除表“课程”违反了表“教师课程”上的外键约束“fk998yb1badftsiklfh13bcw3ol”
- c# - 控制台不显示但第一行
- electron - Electron IpcRendrer 未将数据从 Main 发送到 HTML
- flutter - 如何在 Flutter 中将图标与背景颜色正确居中?
- azure - Azure sql 数据库建议
- python - 如何编写返回数据帧的函数,该数据帧排除指定列中的值超过 max_value 或小于 min_value 的行
- flutter - 如何使用 onGenerateRoute 函数将参数传递给屏幕,如 Flutter 中使用 Getx 的示例
- css - R Studio CSS 文件难以辨认