LINUX.ORG.RU

Получить вывод ffprobe в python3

 , ,


0

1

Команда

ffprobe -show_streams -show_entries "format:stream" -of flat -v quiet path_to_file

в терминале отрабатывает на 5. В питоне опять что-то не могу завести это все (уже хапнул горя с этим питоном и его странными вызовами внешних команд… надо было перл что-ли брать..?).

    cmd = ["ffprobe",
           "-show_streams",
           "-show_entries",
           "\"format:stream\"",
           "-of",
           "flat",
           "-v",
           "quiet",
           "/path/to/file"]
    ffprobe = subprocess.run(cmd, capture_output=True)
    print(ffprobe)

Всегда пустой вывод. Если добавить shell=True, то показывает

You have to specify one input file.
Use -h to get full help or, even better, run 'man ffprobe'

Я уже и напрямую путь указывал, и PosixPath давал через pathlib, не кушает. Что не так? На том же СО куча примеров с ffmpeg и ffprobe в питоне, везде такое прокатывало. Глаз, наверное, замылился у меня, не вижу очевидное.

https://gist.github.com/hiwonjoon/035a1ead72a767add4b87afe03d0dd7b так тоже пробовал (функция get_video_info). Так же ошибка.



Последнее исправление: Entmatix (всего исправлений: 1)

Что за бред сумасшедшего (в плане кода) я только что прочитал? Иди, раскуривай как правильно всякую лапшу из питона дёргать.

ЗЫ

stdout, stderr = process.communicate()

Кто делать будет?

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от peregrine

По ссылке те же самые два способа для subprocess, что я использовал, только без capture_output=True, но с stdout=subprocess.PIPE. Что там раскуривать - не понял. Скопировал оттуда точную команду subprocess.run/Popen+process.communicate() - та же ошибка. ffprobe не видит инпут.

Entmatix
() автор топика
Последнее исправление: Entmatix (всего исправлений: 1)
Ответ на: комментарий от Entmatix

Полный код давай того что получилось

И да, что там у тебя в /path/to/file лежит

ЗЫ

сделай себе print(stdout) и print(stderr) и смотри что в них лежит.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 3)

"\"format:stream\""

Проблема вот здесь. ffprobe не понимает кавычек, которые ты ему передаёшь в параметре. Когда вызываешь команду из питона, кавычки ты передаёшь принудительно. Но когда вызываешь то же самое из командной оболочки, кавычки съедает оболочка, и в ffprobe попадает format:stream уже без кавычек.

Замени "\"format:stream\"" на "format:stream".

i-rinat ★★★★★
()

Для получения вывода в модуле уже есть удобная обертка subprocess.check_output.

Ещё, уже давно необязательно писать python 3: python 2 уже настолько устарел, что даже в legacy кодовых базах его уже сложно встретить.

В жизни с python 2 можно встретиться только на исторических раскопках.

emorozov
()
Последнее исправление: emorozov (всего исправлений: 1)
Ответ на: комментарий от i-rinat

Так и есть. Я же говорю, глаз замылился. Спасибо.

@peregrine, спасибо за помощь.

Entmatix
() автор топика
Ответ на: комментарий от emorozov

Я его пробовал еще до этого на других процессах. Там что-то коряво обрабатывалось, не помню точно. Поэтому пришел к простому run.

Entmatix
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.