ffmpeg устанавливает шаблон имени файла, используя подпроцесс python - PullRequest
1 голос
/ 29 января 2020

При работе в командной строке я использую этот код:

ffmpeg -i video-frame-%06d.png -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4

Но я пытаюсь запустить его внутри python скрипта, и я получаю нет такого файла или ошибки каталога и я думаю, что из-за типа форматирования числовых имен файлов изображений -%06d

Как я могу объединить или использовать тот же шаблон файла, который я запускаю в командной строке, чтобы использовать его в моем python script

subprocess.Popen(['ffmpeg -i dir/video-frame-%06d.png -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4', shell=True])

пример файла изображения изображения внутри папки:

  1. video-frame-00001.png
  2. video-frame-00002 .png
  3. video-frame-00003.png

Ответы [ 2 ]

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

Вы должны использовать полный путь вместо относительного пути. Например: на основе пути вашего Python файла:

dir_of_imgs = os.path.join(os.path.realpath(os.path.dirname(__file__)), "dir")

И используйте эту переменную для определения пути к изображению:

img_path = os.path.join(dir_of_imgs, "video-frame-%06d.png")

Это означает, что ваша команда должна быть похожа например:

subprocess.Popen(['ffmpeg -i {} -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4'.format(img_path), shell=True])

ПРИМЕЧАНИЕ:

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

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

Я считаю, что если вы хотите запустить подпроцесс, у вас есть 2 варианта:

  • однострочная команда и использование shell = True, что не рекомендуется.
  • или используйте правильный список.

попробуйте это:

cmd = 'ffmpeg -i dir/video-frame-%06d.png -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4'
subprocess.run(cmd.split())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...