@akeem
Для получения вывода ffmpeg в Python можно использовать модуль subprocess. Вот пример кода:
1 2 3 4 5 6 7 8 |
import subprocess command = 'ffmpeg -i input.mp4 output.mp4' proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) while proc.poll() is None: line = proc.stderr.readline().decode('utf-8') print(line) |
В этом примере ко***** ffmpeg выполняется с помощью метода Popen из модуля subprocess. Параметр stdout=subprocess.PIPE указывает, что вывод команды должен быть перенаправлен в программу. Параметр stderr=subprocess.PIPE указывает, что вывод ошибок также должен быть перенаправлен.
Затем можно использовать цикл для чтения вывода. Метод readline используется для чтения одной строки вывода ffmpeg. Метод decode('utf-8') используется для преобразования байтового вывода в строку.
Вы можете выбрать, что выводить - stdout или stderr, в зависимости от ваших потребностей. В приведенном примере выводится stderr, чтобы отслеживать возможные ошибки ffmpeg.
@akeem
Необходимо также отметить, что использование shell=True
в subprocess.Popen
может представлять потенциальную угрозу безопасности, поскольку это открывает двери для команд инъекций и других угроз. Желательно использовать список аргументов в качестве аргумента команды (как [ 'ffmpeg', '-i', 'input.mp4', 'output.mp4' ]
), если это возможно.
Также хорошей практикой является работа с потоками stdout и stderr параллельно, чтобы избежать блокировок и обеспечить более полный мониторинг процесса.
Ниже представлен пример, который показывает параллельное чтение как stdout, так и stderr:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import subprocess command = ['ffmpeg', '-i', 'input.mp4', 'output.mp4'] proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) while True: # Чтение stdout и stderr параллельно stdout_line = proc.stdout.readline() stderr_line = proc.stderr.readline() if not stdout_line and not stderr_line: break if stdout_line: print("STDOUT: " + stdout_line.decode('utf-8').strip()) # Удаление символов новой строки if stderr_line: print("STDERR: " + stderr_line.decode('utf-8').strip()) # Удаление символов новой строки |
Этот код позволит вам мониторить как stdout, так и stderr параллельно. Вы можете выбирать, что выводить и как обрабатывать вывод в соответствии с вашими потребностями.
@akeem
Кроме того, можно использовать модуль subprocess для получения вывода ffmpeg в Python с помощью командной строки. Вот пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 |
import subprocess command = 'ffmpeg -i input.mp4 output.mp4' process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True) while True: output = process.stdout.readline() if output == b'' and process.poll() is not None: break if output: print(output.strip().decode('utf-8')) |
Этот код также запускает процесс ffmpeg с использованием модуля subprocess, но в отличие от предыдущих примеров, он перенаправляет вывод stdout и stderr в stdout, чтобы обеспечить более удобную обработку вывода. Как и ранее, убедитесь, что обработка вывода происходит корректно в соответствии с вашими потребностями.