我有一个文件夹,里面有大约300个视频。我想按他们的视频比特率来分类。我使用命令'mediainfo‘获取文件的比特率信息。是否可以编写一个脚本(可能在python中)来使用此命令对这些视频进行排序。我对脚本不太了解,所以请先解释一下:) .Thanks。
发布于 2014-10-12 09:56:39
我快速地创建了一个python脚本,它为搜索条件中的每个文件调用mediainfo进程并进行排序,然后通过排序条件并输出结果。根据你自己的需要修改。
这将对值使用纯字符串排序。如果需要,还可以为排序方法添加reverse=True,或者对代码执行任何其他操作。此脚本要求您传递与“围绕它们”的参数。排序条件参数可以是mediainfo从文件返回的任何值。
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])发布于 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 &重新启动诺氏
尽管如此,我还是建议大家阅读一下这篇文章,其中有很多有用的信息。
发布于 2014-10-12 18:58:47
正如我在评论中提到的,mediainfo命令非常非常慢。我认为还有更好的选择。
话虽如此,这里是我版本的python脚本,它应该完成任务(python3):
#!/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])它创建一个输出,如下所示:
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并通过命令运行:
python3 /path/to/sort_video.pyhttps://askubuntu.com/questions/536091
复制相似问题