0

我有很多视频存储在不同的子文件夹中。所有视频都有奇怪的文件名,例如f4vd5sd1b5dsd41s415d. 我有一个文本文件,其中有每个文件的正确文件名。为了知道哪个视频与哪个标题对应,我添加了我想要与标题对应的视频的文件持续时间,所以在我的文本文件中有:

第 1 行:视频 1 的名称

第2行:视频1的视频长度

第 3 行:视频 2 的名称

第 4 行:视频 2 的视频长度

为了更好地解释它,这是我手动完成的一些工作:

前:

后:

我的脚本是:

import os
import shutil
from moviepy.editor import VideoFileClip

# parses the renaming rules described in your text file
# returns a dictionary where:
#    key represents the duration to match
#    value represents the name to rename the video file to
def parse_rules(path):
  with open(path) as file:
    lines = file.readlines()
    rules = { lines[i+1]: lines[i] for i in range(0, len(lines), 2)}
  return rules # structure { duration: rename_to, ... }

# gets the duration of the video file
def duration(file):
  return VideoFileClip(file).duration

 # determines whether the durations are close enough to   be considered similar
def is_close_enough(duration1, duration2):
  return duration1 == duration2

# makes a copy of source file according to the renaming rules specified and puts the resulting file in the destination folder 
def rename_by_rules(src_file, dst_dir, rules):
  for k, rename_to in rules.items():
    if is_close_enough(k, duration(src_file)):
      shutil.copy2(src_file, os.path.join(dst_dir, rename_to)) 

# begins renaming your video files matched by duration according to the rules in your text file
rules = parse_rules('<replace with your text file>')
for base, dirs, files in os.walk('<replace with your source director>'):
  for file in files:
    if file.endswith('mp4'):
      rename_by_rules(os.path.join(base, file), '<replace   by dest dir>', rules)

我的 Python 版本是 3.6.1,我有 Windows 7 64 位。回溯调用是:

"F:\Dossier Gros Nain\Python\Python 3.6.1\python.exe" "F:/Dossier Gros Nain/Pluralsight courses/1h Fundamentals of Arnold for Maya/Videos dupli - Copie/supreme script of death.py"
Traceback (most recent call last):
  File "F:/Dossier Gros Nain/Pluralsight courses/1h Fundamentals of Arnold for Maya/Videos dupli - Copie/supreme script of death.py", line 45, in <module>
    rules)
  File "F:/Dossier Gros Nain/Pluralsight courses/1h Fundamentals of Arnold for Maya/Videos dupli - Copie/supreme script of death.py", line 33, in rename_by_rules
    if is_close_enough (k, duration (src_file)):
  File "F:/Dossier Gros Nain/Pluralsight courses/1h Fundamentals of Arnold for Maya/Videos dupli - Copie/supreme script of death.py", line 20, in duration
    return VideoFileClip (file).duration
  File "F:\Dossier Gros Nain\Python\Python 3.6.1\lib\site-packages\moviepy\video\io\VideoFileClip.py", line 81, in __init__
    fps_source=fps_source)
  File "F:\Dossier Gros Nain\Python\Python 3.6.1\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 68, in __init__
    self.initialize()
  File "F:\Dossier Gros Nain\Python\Python 3.6.1\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 103, in initialize
    self.proc = sp.Popen(cmd, **popen_params)
  File "F:\Dossier Gros Nain\Python\Python 3.6.1\lib\subprocess.py", line 594, in __init__
    _cleanup()
  File "F:\Dossier Gros Nain\Python\Python 3.6.1\lib\subprocess.py", line 205, in _cleanup
    res = inst._internal_poll(_deadstate=sys.maxsize)
  File "F:\Dossier Gros Nain\Python\Python 3.6.1\lib\subprocess.py", line 1025, in _internal_poll
    if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
OSError: [WinError 6] Descripteur non valide

Process finished with exit code 1

是movie.py的问题吗?如果是,我该如何删除它?如果没有其他方法,我可以使用 ffprobe 吗?

4

0 回答 0