gpt4 book ai didi

python - 确定视频比特率 Python

转载 作者:行者123 更新时间:2023-12-04 23:20:31 28 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Getting FFProbe Information With Python

(7 个回答)



How to extract the bitrate and other statistics of a video file with Python

(2 个回答)


5个月前关闭。




我从 Telegram 下载了一个视频,我需要确定它的比特率。
我有moviepy(pip install moviepy,不是开发者版本)。
另外,我有ffmpeg,但我不知道如何在python中使用它。
此外,任何其他图书馆都可以为我工作。

最佳答案

这是使用 FFprobe 的解决方案:

  • 执行ffprobe (命令行工具)作为子进程读取stdout的内容.
    使用参数 -print_format json用于获取 JSON 格式的输出。
    仅获取 bit_rate条目,添加参数 -show_entries stream=bit_rate .
  • 使用 dict = json.loads(data) 将返回的字符串转换为字典.
  • 从字典中获取比特率并将其转换为int : bit_rate = int(dict['streams'][0]['bit_rate']) .

  • 代码示例创建一个示例视频文件进行测试(使用 FFmpeg),并获取比特率(使用 FFprobe):
    import subprocess as sp
    import shlex
    import json

    input_file_name = 'test.mp4'

    # Build synthetic video for testing:
    ################################################################################
    sp.run(shlex.split(f'ffmpeg -y -f lavfi -i testsrc=size=320x240:rate=30 -f lavfi -i sine=frequency=400 -f lavfi -i sine=frequency=1000 -filter_complex amerge -vcodec libx264 -crf 17 -pix_fmt yuv420p -acodec aac -ar 22050 -t 10 {input_file_name}'))
    ################################################################################

    # Use FFprobe for
    # Execute ffprobe (to get specific stream entries), and get the output in JSON format
    data = sp.run(shlex.split(f'ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate -print_format json {input_file_name}'), stdout=sp.PIPE).stdout
    dict = json.loads(data) # Convert data from JSON string to dictionary
    bit_rate = int(dict['streams'][0]['bit_rate']) # Get the bitrate.

    print(f'bit_rate = {bit_rate}')

    笔记:
  • 对于 MKV 等一些视频容器,没有 bit_rate信息,因此需要不同的解决方案。
  • 代码示例假定 ffmpeg 和 ffprobe(命令行工具)在执行路径中。

  • 没有 bit_rate 的容器的解决方案信息(如 MKV):
    基于以下 post ,我们可以将所有视频包的大小相加。
    我们还可以总结所有数据包的持续时间。
    平均比特率等于: total_size_in_bits / total_duration_in_seconds .
    这是计算 MKV 视频文件的平均比特率的代码示例:
    import subprocess as sp
    import shlex
    import json

    input_file_name = 'test.mkv'

    # Build synthetic video for testing (MKV video container):
    ################################################################################
    sp.run(shlex.split(f'ffmpeg -y -f lavfi -i testsrc=size=320x240:rate=30 -f lavfi -i sine=frequency=400 -f lavfi -i sine=frequency=1000 -filter_complex amerge -vcodec libx264 -crf 17 -pix_fmt yuv420p -acodec aac -ar 22050 -t 10 {input_file_name}'))
    ################################################################################

    # https://superuser.com/questions/1106343/determine-video-bitrate-using-ffmpeg
    # Calculating the bitrate by summing all lines except the last one, and dividing by the value in the last line.
    data = sp.run(shlex.split(f'ffprobe -select_streams v:0 -show_entries packet=size,duration -of compact=p=0:nk=1 -print_format json {input_file_name}'), stdout=sp.PIPE).stdout
    dict = json.loads(data) # Convert data from JSON string to dictionary

    # Sum total packets size and total packets duration.
    sum_packets_size = 0
    sum_packets_duration = 0
    for p in dict['packets']:
    sum_packets_size += float(p['size']) # Sum all the packets sizes (in bytes)
    sum_packets_duration += float(p['duration']) # Sum all the packets durations (in mili-seconds).

    # bitrate is the total_size / total_duration (multiply by 1000 because duration is in msec units, and by 8 for converting from bytes to bits).
    bit_rate = (sum_packets_size / sum_packets_duration) * 8*1000

    print(f'bit_rate = {bit_rate}')

    关于python - 确定视频比特率 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67833685/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com