Python - [45] :: Прикладное программирование :: Компьютерный форум Ru.Board
Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Python

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48

Открыть новую тему     Написать ответ в эту тему

Adm10



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здесь обсуждается всё, что связано с использованием Python: программирование, библиотеки, ресурсы и другие вопросы

Python


Python - высокоуровневый язык программирования общего назначения с динамической типизацией и автоматическим управлением памятью, ориентированный на повышение производительности разработчика, читаемости кода и его качества, а также на обеспечение переносимости написанных на нём программ

С чего начать?
Простой, понятный и вместе с тем грамотный ресурс на русском языке: pythonworld.ru + самоучитель
Библия PEP8

Всего записей: 35 | Зарегистр. 13-10-2006 | Отправлено: 15:48 16-06-2007 | Исправлено: Lin1980, 22:13 27-01-2025
U235

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LZAA на офф. сайте https://trac.ffmpeg.org/wiki/Capture/Desktop

Всего записей: 1003 | Зарегистр. 14-12-2005 | Отправлено: 16:31 04-02-2025
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

     С этим я тоже попробую разобраться. Спасибо за информацию.
     Но сценарий Phyton тоже надо 'до ума довести'. Надо с 'cv2.VIDEOWRITER_PROP_QUALITY' разобраться.

Всего записей: 2511 | Зарегистр. 09-01-2010 | Отправлено: 17:18 04-02-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LZAA

Цитата:
 Надо с 'cv2.VIDEOWRITER_PROP_QUALITY' разобраться.

я же написал.
 
 
self.sct = mss()
self.vid = cv2.VideoWriter('output.mkv', cv2.VideoWriter_fourcc(*'XVID'), ...)
self.vid.set(cv2.VIDEOWRITER_PROP_QUALITY, 95)

Всего записей: 16249 | Зарегистр. 20-09-2014 | Отправлено: 19:31 04-02-2025
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

      Большое спасибо за помощь!  
 

Код:
self.sct = mss()
self.vid = cv2.VideoWriter(
    'output.mkv',
    cv2.VideoWriter_fourcc(*'XVID'),
    fps=fps,
    frameSize=(
        self.monitor['width'],
        self.monitor['height']
    )
)
self.vid.set(cv2.VIDEOWRITER_PROP_QUALITY, 95)

 
     Это работает. С количеством процентов я ещё поэкспериментирую.  
     Например, 'FFmpeg' применяет 'crf'('Constant Rate Factor') таким образом:
     ,,The range of the quantizer scale is 0-51: where 0 is lossless (for 8 bit only, for 10 bit use -qp 0), 23 is default, and 51 is worst possible.
        Consider 17 or 18 to be visually lossless".
 
    crf=17-23=33-45% от 51
    Я не знаю какая логика у шкалы качества '0..100%' VIDEOWRITER, но это можно установить опытным путём и сопоставить размер сохранённого 'output' с тем, что выдаёт FFmpeg по-умолчанию.
    Про 'мытарства'.
    Я случайно удалил в коде одну букву
 
    cv2.VideoWriter_fourc(*'XVID'),
 
   и поэтому попытки дописать в код 'cv2.VIDEOWRITER_PROP_QUALITY, 95' не давали желаемого результата.

Всего записей: 2511 | Зарегистр. 09-01-2010 | Отправлено: 22:30 04-02-2025
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

       К сожалению, 'VIDEOWRITER_PROP_QUALITY' не помагает. Проверял на разных процентах - разница в 'bit rat' между 1% и 100% ничтожная. Ну да ладно.
       Ещё я попробовал кодек поменять. Но тут - тоже не всё гладко.
       С 'DX50' сценарий работает.
       С 'AVC1' пишет:
 

Код:
[ WARN:0@0.110] global cap.cpp:781 cv::VideoWriter::open VIDEOIO(CV_IMAGES): raised OpenCV exception:
 
OpenCV(4.11.0) D:\x\opencv-python\opencv-python\opencv\modules\videoio\src\cap_images.cpp:415: error: (-215:Assertion failed) !filename_pattern.empty() in function 'cv::CvVideoWriter_Images::CvVideoWriter_Images'

 
       С 'X264' пишет:
 

Код:
Failed to load OpenH264 library: openh264-1.8.0-win64.dll
        Please check environment and/or download library: https://github.com/cisco/openh264/releases
 
[libopenh264 @ 00000136556e8f00] Incorrect library version loaded
[ERROR:0@0.003] global cap_ffmpeg_impl.hpp:3264 open Could not open codec libopenh264, error: Unspecified error (-22)
[ERROR:0@0.003] global cap_ffmpeg_impl.hpp:3281 open VIDEOIO/FFMPEG: Failed to initialize VideoWriter
[ WARN:0@0.117] global cap.cpp:781 cv::VideoWriter::open VIDEOIO(CV_IMAGES): raised OpenCV exception:
 
OpenCV(4.11.0) D:\x\opencv-python\opencv-python\opencv\modules\videoio\src\cap_images.cpp:415: error: (-215:Assertion failed) !filename_pattern.empty() in function 'cv::CvVideoWriter_Images::CvVideoWriter_Images'

 
    Чем это можно объяснить? Сам сценарий так написан или нужно что-то установить?
     Например
     
Цитата:
Incorrect library version loaded

Всего записей: 2511 | Зарегистр. 09-01-2010 | Отправлено: 00:52 06-02-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LZAA

Цитата:
С 'AVC1' пишет:

чего то не хватает в сборке библиотеки.
 

Цитата:
Чем это можно объяснить? Сам сценарий так написан или нужно что-то установить?

скорее всего нужен путь к полной ffmpeg
https://github.com/opencv/opencv/issues/25831

Всего записей: 16249 | Зарегистр. 20-09-2014 | Отправлено: 01:21 06-02-2025
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

       Немного разобрался.
 
    1. Код:
 
 
Код:
           'output.mkv',
            cv2.VideoWriter_fourcc(*'AVC1')

 
     Причиной ошибки вида - 'filename_pattern.empty' является именно расширение файла 'output'. Кодек 'AVC1' (https://fourcc.org/avc1/) является очень 'узконаправленным' - он работает только с 'output.mp4v'. А в контейнер он просто так не 'запихивает'.
 
    2. Код:
 
 
Код:
           'output.mkv',
            cv2.VideoWriter_fourcc(*'X264')

 
        Здесь всё ещё интереснее. Если с 'GitHub' скачать 'openh264-1.8.0-win64.dll', то библиотека 'подхватывается' и ошибки нет. Для удобства путь можно в 'Path' записать.
        Но почему 'Incorrect library version loaded ? Почему так?
        А вот почему. Если написать 'output.mp4v', то ошибки нет и без 'openh264-1.8.0-win64.dll'. То есть 'openh264' есть, но он 'делает' только 'mp4v'. А для 'создания' контейнера нужен 'openh264-1.8.0-win64.dll'. Причём работает только с '1.8.0'. Чудеса программирования!

Всего записей: 2511 | Зарегистр. 09-01-2010 | Отправлено: 01:01 07-02-2025
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

     Ещё с таким затруднением столкнулся.
     Код:

Код:
            self.vid = cv2.VideoWriter(
                'v.mp4',
                cv2.VideoWriter_fourcc(*'avc1')

 
    При исполнении сценария файл 'v.mp4' сохраняется в директорию сценария. Но если сделать пакетный файл для запуска сценария и запускать его с повышенными правами, то файл 'v.mp4' на диск не сохраняется. Происходит это потому, что в таком режиме система не видит файлы и нужно в команде указывать путь к файлу или директорию файла в Path' записывать. Я пробовал в сценарии писать ' Path to v.mp4' но это не помагает. Скажите, пожалуйста, как в этом сценарии прямо указать директорию сохранения файла 'v.mp4'?

Всего записей: 2511 | Зарегистр. 09-01-2010 | Отправлено: 14:15 08-02-2025
zzz528

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
пробовал в сценарии писать ' Path to v.mp4'  

косые двойные соблюдал?
типа  'С:\\bebebe\\v.mp4' работает, а 'С:\bebebe\v.mp4'  не работает.

Всего записей: 2109 | Зарегистр. 20-06-2005 | Отправлено: 15:25 08-02-2025
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

      Отлично! С 'С:\\bebebe\\v.mp4' работает!

Всего записей: 2511 | Зарегистр. 09-01-2010 | Отправлено: 16:17 08-02-2025
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

        Windows 10.
 
       Есть сценарии, которые просто выводят данные в 'cmd'. Например:
 
       print(f"The time now is:  {current_time}")
 
       Как сделать так, чтобы сценарий сохранял текст 'The time now is:  xxxx' в файл?

Всего записей: 2511 | Зарегистр. 09-01-2010 | Отправлено: 11:04 27-02-2025
U235

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно сделать перенаправление вывода:
 python.exe my_script.py > out.txt
для дозаписи использовать >>

Всего записей: 1003 | Зарегистр. 14-12-2005 | Отправлено: 16:20 27-02-2025 | Исправлено: U235, 16:21 27-02-2025
MBK2

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LZAA
https://stackoverflow.com/questions/7152762/how-to-redirect-print-output-to-a-file

Всего записей: 5330 | Зарегистр. 18-09-2018 | Отправлено: 17:24 27-02-2025
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
                               
                             MBK2
 
         Я так и не понял, как текст 'The time now is:  xxxx' из stdout сохранить в файл 'x.txt'.
         Какой должен быть код?
 
                             U235
 
         Я про это знаю. Но есть проблема:
         http://forum.ru-board.com/topic.cgi?forum=5&topic=51420&start=660#6 [?]
 

Всего записей: 2511 | Зарегистр. 09-01-2010 | Отправлено: 19:15 27-02-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LZAA

Цитата:
Какой должен быть код?

показали же. пофиг какой код, если он выводит что то в stdout.
тогда

Цитата:
python.exe my_script.py > out.txt

весь stdout пишет в файл out.txt
 

Цитата:
Я про это знаю. Но есть проблема:

которая заключается в чем? если перенос строки генерится вашим питон кодом, то как вы его в коде создаете? в редакторе текста (в котором пишете код) можно обычно указать какой код использовать для переноса строки - \n как никсах, либо \r\n, как в Windows, если перенос создается в строке клавишей Enter, а не программно.
 
ps: и не добавляйте ненужные пробелы в свой текст - неудобно цитировать.
 

Код:
import datetime
current_time = datetime.datetime.now()
print(f"The time now is: {current_time}")

 

Цитата:
>python.exe py.py
The time now is: 2025-02-27 19:23:38.810987

 

Цитата:
>python.exe py.py > out.txt
>cat out.txt
The time now is: 2025-02-27 19:24:28.257172

Всего записей: 16249 | Зарегистр. 20-09-2014 | Отправлено: 19:20 27-02-2025 | Исправлено: Mavrikii, 19:28 27-02-2025
MBK2

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
весь stdout пишет в файл out.txt

Ну там несколько вариантов указали: и полностью stdout в программе на время переопределить, и каждому printу свой файл для вывода назначить.

Всего записей: 5330 | Зарегистр. 18-09-2018 | Отправлено: 19:26 27-02-2025
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
                              MBK2
      'Там' показали. Но я не программист и не могу это сделать сам. Мне нужен готовый код.
                               Mavrikii
        Я не создаю код. Я хочу изменить существующий и посмотреть на результат.
        Пример кода:
 

Код:
import time
 
t = time.localtime()
current_time = time.strftime("%Y-%m-%d %H:%M:%S", t)
 
 
 
timestamp = input("Enter the timestamp \n>")
my_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(timestamp)))
 
 
print(f"The time now is:  {current_time}")
if "1970" in my_time:
    my_time = time.strftime('%H:%M:%S', time.localtime(int(timestamp)))
    print(f"h:m:s remaining:  {my_time}")
else:
    print(f"The timestamp is: {my_time}")

 
    Я не знаю какое значение имеет способ переноса строки при его сохранении в текстовом редакторе. Мне надо, чтобы сценарий сам сохранял текст 'The time now is:  xxxx' из stdout в файл 'x.txt'. После этого я смогу посмотреть что у него там 'внутри'.
       
 
 

Всего записей: 2511 | Зарегистр. 09-01-2010 | Отправлено: 19:45 27-02-2025
MBK2

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LZAA
Ну что ж вы ленивый такой, лень даже пару постов прочитать

Код:
 
with open('out.txt', 'w') as f:
    print(f"The time now is:  {current_time}", file=f)  # Python 3.x
 

примерно так

Всего записей: 5330 | Зарегистр. 18-09-2018 | Отправлено: 19:55 27-02-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LZAA

Цитата:
Пример кода:

в вашем примере не нужно все перекидывать в файл, так как скрипт интерактивный и спрашивает дату. а значит текст
Цитата:
timestamp = input("Enter the timestamp \n>")
нужно вывести.
как записать отдельный вывод в файл - показали.
 

Цитата:
Я не знаю какое значение имеет способ переноса строки при его сохранении в текстовом редакторе.

я вам написал о вашей ссылке на "проблему".

Цитата:
Я про это знаю. Но есть проблема:

и спросил - какая конкретно проблема?

Всего записей: 16249 | Зарегистр. 20-09-2014 | Отправлено: 20:11 27-02-2025 | Исправлено: Mavrikii, 20:17 27-02-2025
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
                                   MBK2
      Это уже кое что для начала. Сценарий для 'timestamp' является лишь примером. Мне для него 'x.txt' не нужен. Поэтому приведу в качестве пртимера другой код. Он заканчивается:
 
   
Код:
 print(decrypt_key(x))

 
  В этом случае 'f' не нужно. Если записать:
 
   
Код:
 with open('out.txt', 'w'):
         print(decrypt_key(x))

 
    то 'out.txt' создаётся, но он 'пустой'. То есть данные из stdout не сохраняются.
 
                            Mavrikii
      Проблема такая.
      Код:
     
Код:
x.py > x.txt

     При этом к данным добавляются символы 'CRLF' или 'CR'. Подозреваю, что это OS для чего-то делает.
      Если это делает OS, то надо попробовать создать файл 'x.txt' самим сценарием и посмотреть на результат.
 
 
     

Всего записей: 2511 | Зарегистр. 09-01-2010 | Отправлено: 22:47 27-02-2025 | Исправлено: LZAA, 22:48 27-02-2025
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Python


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru