Изменение mp4ize.py для работы в Windows - PullRequest
1 голос
/ 23 июля 2011

Mp4ize (python) - это утилита для преобразования видеофайлов в mp4 для использования на iPhone и iPod. Я пытаюсь заставить его работать на Windows.

Сценарий python использует библиотеку fcntl , и, согласно другому вопросу (замена fcntl в 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,
)

См. здесь для полного исходного кода.

1 Ответ

2 голосов
/ 23 июля 2011

Эта команда устанавливает параметр NONBLOCK стандартного дескриптора файла ошибок. Это позволяет передавать данные до того, как в них будут записаны все данные.

Патч на http://pastebin.com/Zr5LN8Ui будет работать с индикаторами прогресса в Windows. Однако иногда он сообщает о плохом кодировании, даже если кодирование было хорошим.

Он использует решение из Неблокирующее чтение для подпроцесса. PIPE в python , чтобы разрешить неблокирующий ввод-вывод, и исправляет параметр pad (ваша версия не работала для моего тестового файла) и прогресс бар для современного FFMpeg.

Обратите внимание, что жестко кодируется использование связанного метода, когда FFMpeg передается 3 или более параметров командной строки, поскольку он ошибается при первом вызове FFMpeg, который получает разрешение входного файла.

...