为什么ffmpeg-python在这里抛出编解码器错误?

时间:2019-10-11 14:07:44

标签: python ffmpeg

我第一次尝试使用ffmpeg-python,并且很早就发现了一个看起来像复杂错误的东西。

这是我完整的代码:

from tkinter import filedialog
import ffmpeg

sourceFile = filedialog.askopenfile()
targetFile = filedialog.asksaveasfilename()

stream = ffmpeg.input(sourceFile, ss=0, format='mov')
stream = ffmpeg.output(stream, targetFile, format='mp4')
ffmpeg.run(stream)

在我看来,这应该很简单。用户浏览到现有的MOV文件(“正常” FFmpeg.exe在Windows命令行上可以正常处理的标准h264文件),然后选择要保存的MP4的输出文件,然后调用FFmpeg并生成MP4文件是从MOV转换而来的。

但是,无论我选择哪个源文件,我总是遇到此错误:

  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\ffmpeg\_ffmpeg.py", line 85, in output
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages\ffmpeg\_run.py", line 285, in run_async
    args, stdin=stdin_stream, stdout=stdout_stream, stderr=stderr_stream
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\subprocess.py", line 775, in __init__
    restore_signals, start_new_session)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\subprocess.py", line 1119, in _execute_child
    args = list2cmdline(args)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\subprocess.py", line 530, in list2cmdline
    needquote = (" " in arg) or ("\t" in arg) or not arg
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 41: character maps to <undefined>

位置号根据文件而变化,但是错误始终是'charmap'编解码器无法解码位置[x]中的字节0x90:字符映射到

请有人能指出我在这个问题上可能出什么问题吗?我觉得答案正盯着我,但我没看到。

1 个答案:

答案 0 :(得分:0)

为了将来找到这篇文章的任何人的利益-我找到了我的答案,它的确是在盯着我。

代码的第三行应该是sourceFile = filedialog.askopenfile().name-我错过了.name()部分,并试图将文件对话框返回的FFmpeg对象而不是文件名专门提供给FFmpeg。一旦意识到这一点,我就能继续前进。

(我立即遇到了FFmpeg找不到自己的库文件之类的其他问题,但这是另一篇文章的故事。)