Как экспортировать FFMPEG в мою программу на Python? - PullRequest
0 голосов
/ 30 мая 2019

Я написал программу на Python для Windows 10, которая конвертирует аудиофайлы из любого поддерживаемого формата в .flac, и использует кодировку FFMPEG.

FFMPEG установлен на моем компьютере, поэтому при запуске программы на моем компьютере проблем не возникает.

Я использовал PyInstaller для экспорта своей программы в .exe, и теперьЯ хочу включить FFMPEG в дистрибутив, чтобы людям не приходилось загружать его отдельно для запуска моего скрипта.

Могу ли я обернуть / включить FFMPEG в свою программу и автоматически установить / использовать его при необходимости?Как?

1 Ответ

0 голосов
/ 17 июля 2019

Если вы хотите использовать внешние файлы с вашим проектом, вам нужно связать его с выходным исполняемым файлом. Который всякий раз, когда исполняется ваш исполняемый файл, он извлекает все зависимости во временный каталог и использует его в вашем коде. Для этого вы можете add-data flag.

Сначала скачайте скомпилированные двоичные файлы из здесь . Затем извлеките содержимое в папку с именем ffmpeg (рядом с файлом скрипта). В приведенном ниже примере приложение (script.py) пытается воспроизвести пример видео с ffplay. Я предполагал, что путь входного видео будет передан программе в качестве внешнего аргумента.

import subprocess
import os
import sys


def resource_path(relative_path):
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath("."), relative_path)


def play():
   ffplay_path = "./ffmpeg/ffplay.exe"
   if len(sys.argv) > 1:
      file_path = sys.argv[1]
      p = subprocess.Popen([resource_path(ffplay_path), file_path])
   else:
      print("No file passed as argument!")


if __name__ == "__main__":
   play()

Используйте команду ниже для генерации исполняемого файла:

pyinstaller -F --add-data "./ffmpeg/*;./ffmpeg/" script.py

И используйте программу так:

script.exe sample.mp4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...