python - 更改 mp4ize.py 以在 Windows 上工作

标签 python windows linux winapi fcntl

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

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

If you provide more details about the fcntl calls people can find windows equivalents.

由于我一直没有尝试自己重写代码,所以我想在这里问一下。

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

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

参见 here获取完整的源代码。

最佳答案

此命令设置标准错误文件描述符的 NONBLOCK 选项。这允许它在全部数据写入之前传递数据。

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

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

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

关于python - 更改 mp4ize.py 以在 Windows 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6799693/

相关文章:

python - 将 numpy.array 存储在 Pandas.DataFrame 的单元格中

python - python中这个 "POST for loop"是怎么回事? ——Python菜鸟

c++ - boost 进程间互斥并检查放弃

php - Mysql:每个socket地址的用法

linux - I/O 绑定(bind)与 CPU 绑定(bind)取决于内核?

c - 如何在 Linux 2.6.29 中解码 ioctl() 系统调用中的 arg 指针?

python - python 3 中的 Expat 解析

python - 为什么这不起作用(sqlite,python)

c++ - 是否可以仅使用过滤器处理程序来扩展 Windows 搜索索引?

linux - 在 Linux 上刷新数据缓存