Последние записи
- Посимвольное чтение из файла. Посимвольная запись в файл
- Разделить строку с сохранением разделителя
- Свой прогресс в консоли при выполнении команды ffmpeg
- HttpWebRequest выдаёт много ошибок при неудачном соединении
- Как обратиться к последней ячейке не связанного диапазона
- Управление громкостю MediaPlayer
- Как использовать java для бэкенда веб-сайтов и веб-скриптов?
- Некорректная работа гиперссылок Microsoft Word 2010
- Функция рисования для печати на принтере ScanLine
- Функция CharInSet (множества) не работает для русских букв
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
25th
Июл
Свой прогресс в консоли при выполнении команды ffmpeg
Posted by obzor under Python
import subprocess as sub
from tqdm import tqdm
process = sub.Popen("ffmpeg -i /240.mp4 -c:v libaom-av1 -pix_fmt yuv420p /output.mkv", shell=True, stdout=sub.PIPE, stderr=sub.PIPE, text=True)
with tqdm(total=100, desc="Processing", unit="%", ncols=100) as pbar:
output = process.stdout.readline()
error = process.stderr.readline()
print(output)
Как выполнить прогресс в своем шаблоне?
В данном примере команда выполняется, но никакого прогресса не наблюдается. Просто зависает в консоле
Processing: 0%| | 0 /100 [00:00<?, ?%/s]
И так до окончания…
Чтобы прогресс шел, нужно вызывать pbar.update с нужным значением. По запросу «ffmpeg and tqdm» нашлось несколько сниппетов и библиотек. Например, сниппет — изучите функцию ffmpeg_to_tqdm. Или библиотека ffmpeg-progress-yield — изучите пример с использованием tqdm. Или библиотека ffmpeg-python — изучите пример отображения прогресса (похоже, только для Linux).
import subprocess as sub
from tqdm import tqdm
import re
re_duration = re.compile("Duration: ((?:\d+:)+\d+)")
re_time = re.compile("\stime=((?:\d+:)+\d+)")
def strtime_to_seconds(s):
hours, minutes, seconds = (float(_) for _ in s.split(':'))
return (hours * 60 + minutes) * 60 + seconds
process = sub.Popen("ffmpeg -y -i input.mp4 -c:v libaom-av1 -pix_fmt yuv420p output.mkv", shell=True, stdout=sub.PIPE, stderr=sub.STDOUT, text=True)
for s in process.stdout:
m = re_duration.search(s)
if m:
duration = strtime_to_seconds(m.group(1))
break
previous_span = 0
with tqdm(total=duration, desc="Processing", unit="%") as pbar:
for s in process.stdout:
ms = [*re_time.finditer(s)]
if ms:
in_seconds = strtime_to_seconds(ms[-1].group(1)) - previous_span
previous_span += in_seconds
pbar.update(in_seconds)
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту

пеллетные котлы

Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)

