преобразование сложной команды ffmpeg в python3 - PullRequest
1 голос
/ 09 января 2020

У меня есть сложная команда ffmpeg, которая принимает аудио и изображения в качестве входных данных и экспортирует видео c.

ffmpeg -loop 1 -framerate 2 -i "front.png" -i "testWAVfile.wav" \
    -vf "scale=2*trunc(iw/2):2*trunc(ih/2),setsar=1,format=yuv420p" \
    -c:v libx264 -preset medium -tune stillimage \
    -crf 18 -c:a aac -shortest -vf scale=1920:1080  "outputVideo.mp4"

Я пытаюсь написать python3 программу cmdMusicVideo.py который будет запускать эту команду в чистом виде Python. Я знаю, что для запуска этой команды вам нужна программа ffmpeg, я пытаюсь написать ее в чистом виде python3, где я не просто создаю отдельный процесс для запуска команды bash, где пользователь должен ffmpeg установлен.

Я рассмотрел различные решения для запуска ffmpeg в python3, и они либо:

  • A: Просто запустить Команда ffmpeg в качестве подпроцесса, где пользователю необходимо установить ffmpeg
  • или B: Пип-программа ffmpeg, например ffmpeg-python

Библиотеки пипсов оформить заказ все используют невероятно различное форматирование, и я не нашел способ повторить мою команду ffmpeg. Я искал команду loop в документации к пакету python, и она нигде не появляется.

Есть ли способ преобразовать мою команду ffmpeg в программу python3, где пользователь не нужно уже иметь ffmpeg на своем компьютере?

План состоит в том, чтобы в конечном итоге превратить это в собственный пакет pip, и меня беспокоит то, что, если я использую метод A , будет случай, когда кто-нибудь попытается выполнить мою команду pip но на его терминале не установлено ffmpeg (может быть, с помощью терминала python3 speci c?)

1 Ответ

0 голосов
/ 14 января 2020

Есть ли способ преобразовать мою команду ffmpeg в программу python3, где пользователю не нужно уже устанавливать ffmpeg на свой компьютер?

Краткий ответ: нет.

План состоит в том, чтобы в конечном итоге превратить это в свой собственный пакет пипсов, и меня беспокоит то, что, если я буду использовать метод А, будет может быть случай, когда кто-то пытается запустить мою команду pip, но на его терминале не установлена ​​программа ffmpeg (возможно, с использованием терминала python3 speci c?)

Вы должны добавить проверку во время шаг установки, чтобы убедиться, что пользователь / система имеет двоичный файл ffmpeg на своем пути, и, если нет, выдать ошибку (и указать пользователю URL-адрес с инструкциями по установке ffmpeg). Не существует «лучшего» способа сделать это, это зависит от того, как вы устанавливаете программу пользователем. Вот три варианта:

Makefile

Если вы используете Makefile, вы можете добавить что-то вроде этого в начало Makefile:

ifeq ($(shell which ffmpeg),)
$(error Please install ffmpeg using "apt-get install ffmpeg")
endif

Это будет ошибка перед выполнением любых команд make, если двоичный файл ffmpeg не установлен.

только setup.py

Если вы используете только один файл setup.py без Makefile , вы можете добавить что-то вроде этого в верхней части вашего setup.py (до того, как вы позвоните setup()):

import subprocess
try:
    subprocess.run(["ffmpeg","--help"], check=True)
except subprocess.CalledProcessError:
    print('Please install ffmpeg using "apt-get install ffmpeg"')

conda

Это на самом деле один из случаев использования conda , которая предназначена для того, чтобы предоставить пользователям простой инструмент для установки вещей (например, pip), но также иметь возможность создавать и устанавливать не-1044 * двоичные файлы (в отличие от pip). Вы можете видеть, что ffmpeg доступен через conda:

$ conda search ffmpeg
Loading channels: done
# Name                       Version           Build  Channel
ffmpeg                           3.4      h766ddd1_0  pkgs/main
ffmpeg                           3.4      h8a2ae75_0  pkgs/main
ffmpeg                           4.0      h01ea3c9_0  pkgs/main
ffmpeg                           4.0      hc84425e_0  pkgs/main
ffmpeg                           4.2      h677a3f5_0  pkgs/main

, поэтому вместо того, чтобы упаковать свою программу и сделать ее доступной в Pypi, вы можете вместо этого создать рецепт conda. Подробности смотрите в создании рецептов conda , но в основном вы должны указать ffmpeg в качестве требования в файле meta.yml:

requirements:
  host:
    - ffmpeg 4.2.*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...