1

videofileclip() を使いたいのですが、UnicodeDecodeError が発生します。ビデオファイルには、日本語の漢字または特殊文字が含まれています。

私のコード例:

#-*- coding: utf-8 -*-
import sys  
from moviepy.editor import VideoFileClip

reload(sys)  
sys.setdefaultencoding('utf-8')

a='H:\\kittens.mkv'
clip1=VideoFileClip(a)

b='H:\\“ēī①”.mp4'
clip2=VideoFileClip(b)

if clip1.fps >= clip2.fps:
    os.remove(b)
else:
    os.remove(a)        

「a」は正常に機能します:

>>> a='H:\\kittens.mkv'
>>> clip=VideoFileClip(a)
>>> 

しかし、「b」は機能しません:

>>> b='H:\\“ēī①”.mp4'
>>> clip=VideoFileClip(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\moviepy\video\io\VideoFileClip.py", line 5
5, in __init__
    reader = FFMPEG_VideoReader(filename, pix_fmt=pix_fmt)
  File "C:\Python27\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 3
2, in __init__
    infos = ffmpeg_parse_infos(filename, print_infos, check_duration)
  File "C:\Python27\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 2
70, in ffmpeg_parse_infos
    filename, infos))
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa1 in position 54: invalid
start byte
>>> b
'H:\\\xa1\xb0??\xa8\xe7\xa1\xb1.mp4'
>>> print b
H:\“??①”.mp4
>>> print b.decode('cp949')
H:\“??①”.mp4
>>>

私はこれを試しましたが、これもうまくいきません。

b=b.decode('cp949')
b=b.decode('cp949').encode('utf-8')
b=unicode(b.decode('cp949'))

Windows 7 は Unicode ファイル名 (日本語の漢字または特殊文字) をサポートしていると思いますが、Python (2.x) の文字セット (cp949) は特殊文字をサポートしていません。この問題に対して何ができますか?

4

1 に答える 1

0

pywin32拡張機能を使用した回避策を次に示します。基本的に、関数を使用して、Unicode パスからGetShortPathNameレガシー8.3 ファイル名を生成します。

# -*- coding: utf-8 -*-

import os
import win32api
from moviepy.editor import VideoFileClip


def short_path(unicode_path):
    return win32api.GetShortPathName(unicode_path)


v1 = '“ēī①”.mp4'
print os.path.isfile(v1)  # False

v2 = u'“ēī①”.mp4'
print os.path.isfile(v2)  # True

# clip = VideoFileClip(v1)  # IOError
# clip = VideoFileClip(v2)  # UnicodeEncodeError
clip = VideoFileClip(short_path(v2))  # OK
print clip.duration
于 2016-09-20T16:50:45.163 に答える