将mp4ize.py更改为在Windows上运行

时间:2011-07-23 10:06:15

标签: python windows linux winapi fcntl

Mp4ize (python)是一个实用程序,用于将视频文件转换为mp4,以便在iPhone和iPod上使用。我试图让它在Windows上运行。

python脚本依赖于库fcntl,根据另一个问题(fcntl substitute on Windows),Windows等价物是win32api。另一个问题也说:

  

如果您提供有关fcntl调用的更多详细信息,人们可以找到等效的Windows。

因为我自己试图重写代码没有运气,我想我会在这里问。

如何在Windows上重写以下代码?

fcntl.fcntl(
    p.stderr.fileno(),
    fcntl.F_SETFL,
    fcntl.fcntl(p.stderr.fileno(), fcntl.F_GETFL) | os.O_NONBLOCK,
)

有关完整的源代码,请参阅here

1 个答案:

答案 0 :(得分:2)

此命令设置标准错误文件描述符的NONBLOCK选项。这使得它可以在整个数据写入之前传递数据。

http://pastebin.com/Zr5LN8Ui上的补丁可以在Windows上使用进度指示器。但是,即使编码良好,它有时也会报告错误的编码。

它使用Non-blocking read on a subprocess.PIPE in python中的解决方案来允许非阻塞IO,并修复pad选项(您的版本不适用于我的测试文件)和现代FFMpeg的进度条。

请注意,当FFMpeg传递3个或更多命令行选项时,使用链接方法是硬编码的,因为它会混淆第一次调用FFMpeg来获取输入文件的分辨率。