首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按比特率排序视频

按比特率排序视频
EN

Ask Ubuntu用户
提问于 2014-10-12 08:03:27
回答 4查看 1.5K关注 0票数 1

我有一个文件夹,里面有大约300个视频。我想按他们的视频比特率来分类。我使用命令'mediainfo‘获取文件的比特率信息。是否可以编写一个脚本(可能在python中)来使用此命令对这些视频进行排序。我对脚本不太了解,所以请先解释一下:) .Thanks。

EN

回答 4

Ask Ubuntu用户

回答已采纳

发布于 2014-10-12 09:56:39

我快速地创建了一个python脚本,它为搜索条件中的每个文件调用mediainfo进程并进行排序,然后通过排序条件并输出结果。根据你自己的需要修改。

这将对值使用纯字符串排序。如果需要,还可以为排序方法添加reverse=True,或者对代码执行任何其他操作。此脚本要求您传递与“围绕它们”的参数。排序条件参数可以是mediainfo从文件返回的任何值。

代码语言:javascript
复制
import os, sys, glob
import pprint

# Call: python mediainfo_sort.py 'search_criteria' 'sort_criteria'
# Call example: python mediainfo_sort.py '*.avi' 'Bit rate'

files = glob.glob(sys.argv[1])
criteria = sys.argv[2]

# Will have data in format: {'file_path': {'Media Attribute', 'Value'}}
file_datas = {}

# Contruct data by calling mediainfo for all files in 
for file_path in files:
    mediainfo = os.popen('mediainfo "%s"' % file_path).read()
    file_data = {}
    infos = mediainfo.splitlines()
    for info in infos:
        if ':' in info:
            info_split = info.split(':')
            file_data[info_split[0].strip()] = info_split[1].strip()
        file_datas[file_path] = file_data

# function for sorted, uses Media attribute (sort_criteria) value as sorting key
def getKey(item):
    return item[1][criteria]

sorted_files = sorted(file_datas.items(), key=getKey)

# In the end just join the keys (filenames) with newline and print
print '\n'.join([x[0] for x in sorted_files])
票数 1
EN

Ask Ubuntu用户

发布于 2014-10-12 08:24:39

您可能会发现查看这条线很有帮助。

以下是评论中所建议的一个简短摘要:

1)用sudo apt-get install python-nautilus python-mutagen安装python和python。

2)按照这里指令设置PYTHONPATH变量。

3)在~/..nautilus中创建一个名为python-扩展名的目录。

4)下载这个python脚本并将其粘贴到~/..nautilus/python-扩展中

( 5)用$ nautilus -q && nautilus &重新启动诺氏

尽管如此,我还是建议大家阅读一下这篇文章,其中有很多有用的信息。

票数 1
EN

Ask Ubuntu用户

发布于 2014-10-12 18:58:47

正如我在评论中提到的,mediainfo命令非常非常慢。我认为还有更好的选择。

话虽如此,这里是我版本的python脚本,它应该完成任务(python3):

代码语言:javascript
复制
#!/usr/bin/env python3

import os
import subprocess

directory = "/path/to/files"

# list the files in the directory
files_tosort = os.listdir(directory)

filedata = []
for file in files_tosort:
    # combine filepath and file, take care of the whitespaces
    filepath = directory+"/"+file; command = "mediainfo "+"'"+filepath+"'"
    # get the file's data
    data = subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")
    # extract the bitrate from the output
    bitrate = [line[line.find(":")+2:].replace("Kbps", "").replace(" ", "") \
               for line in data.splitlines() if "Bit rate" in line][0]
    # add the found bitrate+filename to he list
    filedata.append((int(bitrate), file))

# sort the list by the bitrate
filedata.sort(key=lambda item: item[0])
# print out
for item in filedata:
    print("bitrate: "+str(item[0])+" Kbps\t file: "+item[1])

它创建一个输出,如下所示:

代码语言:javascript
复制
bitrate: 606 Kbps    file: film1.avi
bitrate: 731 Kbps    file: film10.avi
bitrate: 790 Kbps    file: film4.avi
bitrate: 802 Kbps    file: film3.avi
bitrate: 845 Kbps    file: film6.avi
bitrate: 919 Kbps    file: film7.avi
bitrate: 984 Kbps    file: film5.avi
bitrate: 1023 Kbps   file: film2.avi
bitrate: 1088 Kbps   file: film8.avi

注:

如果存在不可读文件的风险,则应该在脚本中内置一个"try / the“,以传递这些情况。

如何使用:

与任何脚本一样,将脚本复制到空文件中,设置脚本开头文件的路径,将其保存为sort_video.py并通过命令运行:

代码语言:javascript
复制
python3 /path/to/sort_video.py
票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/536091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档