【问题标题】:OSError: [Errno 63] File name too longOSError: [Errno 63] 文件名太长
【发布时间】:2021-06-28 09:45:23
【问题描述】:

我有一个简短的脚本,需要每晚将多个 MKV 文件合并为一个。

import os, glob
import subprocess

concatenated_files = ""

os.chdir("/cams/")
for index, file in enumerate(glob.glob("*.mkv")):
    if index == 0:
        concatenated_files = file
    else:
        concatenated_files += " + " + file

# print(concatenated_files)

returncode = subprocess.call("mkvmerge -o out.mkv " + concatenated_files)

只有几个文件出现以下错误

OSError: [Errno 63] File name too long: 'mkvmerge -o out.mkv video21-06-28_09-12-08-51.mkv + video21-06-28_07-55-36-80.mkv + video21-06-28_09-52-05-79.mkv + video21-06-28_08-47-56-69.mkv + video21-06-28_09-15-04-34.mkv + video21-06-28_09-32-43-25.mkv

我计划合并数百个,所以不确定如何使用 Python 对这种情况进行排序。它在 shell 中运行良好。

【问题讨论】:

  • concatenated_files += " + " + file -> concatenated_files += " " + file?
  • 我需要在文件@TuanChau之间添加一个+号
  • @voronoy:subprocess.call("mkvmerge -o out.mkv " + concatenated_files, shell=True) 工作吗?
  • 在终端中运行mkvmerge -o out.mkv video21-06-28_09-12-08-51.mkv + video21-06-28_07-55-36-80.mkv + video21-06-28_09-52-05-79.mkv + video21-06-28_08-47-56-69.mkv + video21-06-28_09-15-04-34.mkv + video21-06-28_09-32-43-25.mkv 会发生什么?运行成功了吗?
  • @MauriceMeyer 确实如此!非常感谢。

标签: python


【解决方案1】:

也许使用只有三行代码的shell脚本更简单明了:

ls /cams/ | grep -E ".+\.mkv$" | while read filename; do
  filenames="${filenames} ${filename}"
done
mkvmerge -o out.mkv ${filenames}

【讨论】:

  • 考虑到当文件列表太长时,它不会处理它,这就是我目前正在摆脱的。
  • 什么意思是文件列表太长了,grep -E ".+\.mkv$"文件你想要合并的文件,就像python脚本glob.glob("*.mkv")一样。
  • 如果你的问题解决了可以使用python脚本进行合并,这只是一个选择。
【解决方案2】:

subprocess.call() 第一个参数“args”是一个列表

所以我觉得大概应该是这样的:

  import os, glob
  import subprocess

  concatenated_files = ""

  os.chdir("/cams/")
  args = ["mkvmerge"]
  for index, file in enumerate(glob.glob("*.mkv")):
     args.append(file)


  args.append("-o")        
  args.append("out.mkv")        


  returncode = subprocess.call(args)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 2020-04-08
    • 2020-03-07
    相关资源
    最近更新 更多