LINUX.ORG.RU

Сообщения Desmond_Hume

 

Пакетная обработка видеофайлов с помощью ffmpeg. Что-то идёт не так ...

Есть коллекция видеофайлов из 1023 штук. Все лежат в одной папке. У меня такая вот задача: сделать скриншот на 7 секунде из каждого файла и поместить их в папку folder, которая лежит в той же папке, где хранятся эти видеофайлы. Пробовал решить задачу двумя способами. Точнее одним, а на втором экспериментировал, экспериментировал, но так удобоваримого результата не получил.
Первый вариант сделан в стиле python-zen, то есть я по максимуму сделал упрощение, примитивизировал решение, поделил его на кучу «простых» задач.
Во втором варианте, я решил немного поиграть в кулхацкера и замахнулся даже на владение приёмами regex. Получилось краткое решение, мне оно нравится, почему-то. Люблю краткость. Но вот незадача, почему-то скрипт работает менее эффективно. То есть, вместо 1023 штук скриншотов он делает 900 штук.
В общем-то, такой вариант меня бы тоже устроил, но хотелось бы понять, в чём моя ошибка. Может быть я с синтаксисом намудрил? Переборщил с regex? Первый вариант работает на ура, делает 1015 штук - меня это устраивает вполне.
То, что ни тот, ни другой вариант не делает все 1023 штуки скриншотов - меня устраивает, потому что некоторые скрины, судя по логам, цепляются с какими-то ошибками и отказами и т.п., то есть ffmpeg «решает» их пропускать. Это не проблема.
Проверьте, пожалуйста, второй вариант. Может быть, незамыленный глаз увидит лучше.

Вариант №1

#!/bin/bash

# Папка для сохранения превьюшек должна находится в той же папке, в которой находятся видеофайлы!!
# Статья, где я взял команду по ffmpeg находится здесь: https://annimon.com/article/4008
folder_to_save="folder"

# 1. Находим скриншоты для mp4-файлов
for file in *.mp4; do
	ffmpeg -i "${file}" -ss 00:00:07 -frames:v 1 "${folder_to_save}/${file%.mp4}_${RANDOM}.jpeg"
done

# 2. Находим скриншоты для avi-файлов
for file in *.avi; do
	ffmpeg -i "${file}" -ss 00:00:07 -frames:v 1 "${folder_to_save}/${file%.avi}_${RANDOM}.jpeg"
done

# 3. Находим скриншоты для rmvb-файлов
for file in *.rmvb; do
	ffmpeg -i "${file}" -ss 00:00:07 -frames:v 1 "${folder_to_save}/${file%.rmvb}_${RANDOM}.jpeg"
done

# 4. Находим скриншоты для 3gp-файлов
for file in *.3gp; do
	ffmpeg -i "${file}" -ss 00:00:07 -frames:v 1 "${folder_to_save}/${file%.3gp}_${RANDOM}.jpeg"
done

# 5. Находим скриншоты для mov-файлов
for file in *.mov; do
	ffmpeg -i "${file}" -ss 00:00:07 -frames:v 1 "${folder_to_save}/${file%.mov}_${RANDOM}.jpeg"
done

# 6. Находим скриншоты для mpg-файлов
for file in *.mpg; do
	ffmpeg -i "${file}" -ss 00:00:07 -frames:v 1 "${folder_to_save}/${file%.mpg}_${RANDOM}.jpeg"
done

# 7. Находим скриншоты для flv-файлов
for file in *.flv; do
	ffmpeg -i "${file}" -ss 00:00:07 -frames:v 1 "${folder_to_save}/${file%.flv}_${RANDOM}.jpeg"
done

# 8. Находим скриншоты для mkv-файлов
for file in *.mkv; do
	ffmpeg -i "${file}" -ss 00:00:07 -frames:v 1 "${folder_to_save}/${file%.mkv}_${RANDOM}.jpeg"
done

# 9. Находим скриншоты для mpeg-файлов
for file in *.mpeg; do
	ffmpeg -i "${file}" -ss 00:00:07 -frames:v 1 "${folder_to_save}/${file%.mpeg}_${RANDOM}.jpeg"
done

# 10. Находим скриншоты для mp-файлов
for file in *.mp; do
	ffmpeg -i "${file}" -ss 00:00:07 -frames:v 1 "${folder_to_save}/${file%.mp}_${RANDOM}.jpeg"
done

# 11. Находим скриншоты для wmv-файлов
for file in *.wmv; do
	ffmpeg -i "${file}" -ss 00:00:07 -frames:v 1 "${folder_to_save}/${file%.wmv}_${RANDOM}.jpeg"
done

Вариант №2

#!/bin/bash

# Упрощённый вариант (получилось всего 900 картинок, а надо было 1023)
for file in {*.mp4,*.avi,*.rmvb,*.3gp,*.mov,*.mpg,*.flv,*.mkv,*.mpeg,*.mp,*.wmv}; do
	ffmpeg -i "${file}" -ss 00:00:07 -frames:v 1 "folder/${file%.[mp4,avi,rmvb,3gp,mov,mpg,flv,mkv,mpeg,mp,wmv]}_${RANDOM}.jpeg"
done

Перемещено hobbit из general

 , ,

Desmond_Hume
()

Откуда такой синтаксис в Bash: 1> и 0<

В интернетах пишут, что разницы между 1> и >, а также между 0< и <, нет никакой. По факту выполнения команд - так и есть. Но какой из них более правильный?
И вообще, почему писали раньше так, а теперь так?
Если это так «модно», то есть ещё подобные аналоги команд, которые были сокращены со временем?

 

Desmond_Hume
()

Необычное поведение crontab и cron

Имеется такой вот скрипт, для теста:

#!/usr/bin/bash

notify-send "Hi there!"

Давно не пользовался cron. Как-то не сложилась у меня с ним судьба — уже создавал когда-то тему с подобной проблемой, но так и не отложилась логика поведения, нет чёткого понимания до сих пор. Есть вещи, которые понятны как дважды-два, а есть … как кот Шрёдингера — то ли живым считать, то ли мёртвым, не поймёшь: ведь, по идее, он мёртв, потому что живой, когда умер, будучи ещё живым.

Если бы не старая тема, бился бы ещё долго головой об интернет, чтобы понять, в чём проблема. Хорошо, понятно, что нужно было добавить глобальную переменную $DISPLAY в cron-запись:

50 11 * * * DISPLAY=:0 /home/pushistiq/Desktop/my-cron.job

Без этой переменной, скрипт не отрабатывается, уведомление «Hi there!» не появляется. Это первая странность, которую я хотя бы как-то могу ещё объяснить тем, что, якобы, скрипт запускается от другого пользователя, с другим графическим окружением, несмотря на то, что и пользователя указывал:

50 11 * * * pushistiq /home/pushistiq/Desktop/my-cron.job)

— так тоже не работает, пока не добавишь DISPLAY. Пришла мысль: а может под текущим пользователем другой $DISPLAY? Но нет, если в терминале набрать команду «echo $DISPLAY» - показывает тот же :0

Это первая странность.

Вторая странность. Разный внешний вид уведомлений. Если запускать скрипт из терминала, то появляется уведомление вверху посередине такого вида. А если срабатывает cron (c указанием DISPLAY, естественно), то уведомление появляется такого вида с правого края экрана.

Почему это всё странно? Потому что куча страниц по настройке cron через crontab заявляют, что всё работает без DISPLAY. Я ни одного руководства не увидел с указанием DISPLAY. Может это только для уведомлений? Не знаю. Но всё это так неочевидно. Да ещё этот разный вид уведомлений … мистика.

 , ,

Desmond_Hume
()

Минимальный элемент не минимальный ... или ...

Всем привет! Хеллоуворлдинг продолжается. Привёз вам вот такой код на разбор:

test_list = ["test", "together", "plus", "four", "ranger", "twelve", "sun", 'two']
print(min(test_list))

Результатом выполнения скрипта будет «four»

Странно? Хорошо, поменяем элементы. Может с «two» не заладилось. Выполняю следующее:

test_list = ["train", "tor", "plus", "five", "rangers", "fourteen", "sun", "one"]
print(min(test_list))

И получаю результат … «five».

Я понимаю, что на тексте пробовать функцию, которая скорее всего предполагалась для чисел, это некоторое извращение, но хотелось понять бы принцип, по которому выбирается в первом случае «four», а во втором «five» (почему не, например, «two» или, во втором случае, «one»??). Есть догадки?

 , ,

Desmond_Hume
()

Модуль sys странно себя ведёт

У меня Ubuntu 22.04. Выполняю в консоли такой вот код:

import sys
sys.stdout.write('Hello')

Получаю результат «Hello5». Откуда эта «5» на конце берётся? Это нормально или баг?

 , , ,

Desmond_Hume
()

Эмуляция печати с помощью модуля keyboard в Python

Ковыряю тут модуль keyboard, в надежде создать какой-нибудь хеллоуворлдный доступный для понимания новичку скрипт, который бы печатал символ одинарных кавычек, чтобы потом его повесить на горячую клавишу. Создал скрипт такого содержания:

#!/usr/bin/python

import keyboard
keyboard.write("''", delay=0.04)

Работает он неплохо, правда задержка как-то не радует. Вы, наверное, спросите, зачем я сделал два раза cимвол ’ — дело в том, что с одним этот код не работает. Он ничего не печатает. Только при добавлении второй ’, и указании задержки в 0.04 - печатается один (!!) символ ’. Всё это выяснил случайно, эмпирическим методом (регулировал задержку сначала, а потом добавил ещё один символ ’ - а вдруг сработает? и сработало! но не так, как хотелось бы).

Вопрос в следующем: что в моём коде не так и почему этот модуль работает так неочевидно, хотя казалось бы, запросы довольно просты, я не делаю какую-то сверхзадачу. И да, если не напечатать два раза ’ ’, никакое значение задержки не решит задачу. Будет печататься пустота. То есть, дело не совсем в задержке … а в чём?

 ,

Desmond_Hume
()

Авторизации на сайтах слетают при перезапуске Firefox

Когда закрываю Firefox, все авторизации вылетают: снова авторизовываться на youtube, linux.org.ru, google и проч. В Google Chrome такой проблемы нет - открываешь и сразу получаешь сайты в авторизованном виде. Где что включить, не пойму? Уже давно не пользовался Firefox.

 

Desmond_Hume
()

На ноутбуке MSI GS73VR 7RG одновременный вывод звука и глюки с регулировкой звука

Обнаружил следующие проблемы на этом ноуте:

  1. Одновременный вывод звука

    Подключаю наушники обычные проводные - звук идёт и в наушниках, и из динамиков ноутбука.

  2. Регулировка звука

    Звук идёт из динамиков. Подключаю наушники - звук сбрасывается на 0, начинаю добавлять до 1% звук появляется, добавлю ещё - звук не меняется, и только когда добавлю до 100% звук обычный становится, с 1 до 100% изменений звука не происходит, если регулировать звук.

Настройки звука выглядят вот так. Такое ощущение, что не хватает драйверов для корректной работы .. Но на сайте производителя нет драйверов для звука под Linux.

Были ли у кого проблемы со звуком в данной модели ноутбука? Как решили?

 , , , ,

Desmond_Hume
()

Не работает звук выбранного уведомления в Lightning Calendar

Выставил тут звук уведомления в формате wav. Уведомление выходит, но звука нет. Пробовал и mp3 — то же самое.

Кто как решал? Обшерстил все заморские форумы, но наводок не обнаружил.

 , , ,

Desmond_Hume
()

Лаги после пауз при воспроизведении видеофайлов в SMPlayer

При просмотре видео в SMPlayer, когда ставлю на паузу, а затем продолжаю просмотр, замечаю микрозадержки. Кадр будто фризится на микросекунду, потом снова нормально — и так раз 5-7, а потом всё нормально воспроизводится. Затем ещё раз ставлю на паузу — и всё повторяется снова.
Долго искал причину методом научного тыка, не мог обнаружить. Полез на форумы, оказывается из-за pulse в настройках аудиодрайвера в медиаплеере. Поменял на alsa и всё стало нормально.
Может кто-то знает, как заставить работать pulse не хуже alsa? Ведь это дефолтная настройка SMPlayer, видимо, разработчики считают, что pulse нормален, раз не меняют его на дефолтную alsa.

 , , ,

Desmond_Hume
()

Автоматическое включение NumLock при загрузке Ubuntu

Система установлена на зашифрованный диск (LUKS). В сеансе Gnome - это решается утилитой numlockx. Но до загрузки графической части, на этапе ввода пароля LUKS NumLock всегда отключён. Как сделать так, чтобы он был включён постоянно? Подозреваю, что рыться надо где-то в районе grub …

Решение нашёл тут

 , ,

Desmond_Hume
()

Не слишком ли много предсказывает Ричард Столлман?

Помните как все ржали над RMS, когда он говорил про «швободу» и проч.? А ведь он в очередной раз оказался прав … события с Трампом доказали лишний раз. YouTube, Google, Twitter - не прошли проверку на вшивость. Будущее за децентрализованными сервисами. В каком-то лохматом году, помню, слушал интервью с Ричардом Столлманом и мысли были такие, типа, «ну, дядька совсем уже в фольгу готов зарыться … а зачем? мир ведь открыт и свободен и так!»

 , , , ,

Desmond_Hume
()

Не видно USB 3.0 устройства в Virt-Manager (KVM)

В виртуальной винде (7) не могу увидеть содержимое флешки 3.0, хотя флешки 2.0 отлично читаются ей через встроенный в virt-manager usb-фильтр. Порты usb перебрасывал, добавлял usb 3.0 … ничего не помогает. Естественно, флешка подключается к USB 3.0 порту ноутбука и отображается в основной ОС без проблем. Работаю в связке «xubuntu 20.04(host)-win7(guest)».

В чём может быть проблема?

 , , ,

Desmond_Hume
()

Запуск процессов под другими пользователями

Есть два пользователя в Linux Mint: user1 и user2. Работа основная ведётся под user1, Syncthing настроен на user2. Как запустить Syncthing под пользователем user2, работая в user1, без переключения пользвателей, в сессии user1?

 , ,

Desmond_Hume
()

При удалении файлов из корзины - постоянные обращения I/O к HDD

И снова Ubuntu 20.04.

Нет, в этот раз не поломали какую-то очередную горячую клавишу. В этот раз сломали что-то в «механизме» удаления файлов из корзины через Nautilus.

Описание проблемы

Удаляю с раздела HDD некоторые файлы в Корзину. Захожу через интерфейс Nautilus в Корзину и нажимаю кнопочку «Очистить корзину». Файлы будто бы удаляются - исчезают визуально, НО …:

  1. размер диска через df -h не меняется;

  2. идут постоянные обращения к диску - без перерыва горит индикатор на системнике

Ещё странно то, что несмотря на постоянное обращение к HDD, на быстроте работы это никак не сказывается. Система работает так же ровно, без лагов и торможений, хотя раньше, если когда такое случалось (не при удалении файлов из корзины, а при индексации, например …), то система начинала подлагивать, фризиться. То есть, ещё раз, этот процесс обращений к HDD не тормозит систему, но работает постоянно. Ждал минут 15. Не выдержал, перезагрузился - прошло. Ещё раз удаляю файлы - такая же история.

Лайфхак, способы обхода проблемы

Если кто обнаружил такую же фигню у себя, рекомендую установить пакет trash-cli и удалять файлы из Корзины через терминал при помощи команды trash-empty. Когда удаляю файлы таким способом: индикация обращений к HDD не горит, размер HDD сразу же меняется. Как это обычно бывает «искал одно, а нашёл другое», очень понравился этот пакет. Даже немного благодарен этому глюку Ubuntu, что познакомил меня с trash-cli. Но, всё же, осадок остался …

 , , , ,

Desmond_Hume
()

Crontab ... да, опять

Создал в папке пользователя скрипт bash следующего содержания:

#!/bin/bash

firefox

Затем забил в планировщик пользователя такую строчку:

* * * * * /home/username/crontask.sh

То есть, по идее, каждую минуту должен запускаться браузер Firefox. Сам скрипт bash рабочий, запускал через терминал под пользователем - браузер открывается. Жду уже 10 минут появления Firefox. Тишина. ЧЯДНТ?

 , , , ,

Desmond_Hume
()

В Ubuntu 20.04 поломали клавишу Super (Обзор)

В GNOME клавиша Super скукоживает все открытые пользователем окна, вне зависимости от того, свёрнуты они или развёрнуты, — и показывает их наглядно пользователю. Помимо этого, удобно через клавишу Super запускать разные приложения: вводишь название и, по мере набора, появляется искомый ярлычок нужного приложения.

В латинской раскладке всё работает, в кириллице — не работает.

До обновления, в 18.04 версии, всё работало: хоть на кириллице, хоть на латинице ..

Интересно, на Fedora, OpenSUSE, Arch Linux и других дистрибутивах, где есть GNOME 3.36, такая же проблема с Super’ом на Обзоре?

 , , , ,

Desmond_Hume
()

В Ubuntu 20.04 поломали Clipit

Обновился c 18.04 на 20.04, не выдержал. И получил сразу же — неработающим Clipit’ом. Точнее, даже, не то чтобы совсем не работающим, а словил глюк. Проверял воспроизводимость глюка на 2 устройствах (ноутбуке и ПК, с разными видеокартами и процессорами) — поведение глюка одинаково.

Как его получаю:

  1. Нажимаю горячую клавишу «Ctrl + Alt + h», чтобы просмотреть Историю буфера обмена. Ничего не происходит, хотя раньше выходил список всего, что было недавно копировано в буфер обмена.
  2. Нажимаю на значок Clipit в трее и выбираю Preferences (Настройки) — получаю сразу же «чёрный квадрат Малевича» в верхнем левом углу, который закреплён поверх окон, и никак его не закрыть. Помогает только терминальная команда killall clipit. Всё это воспроизводится в обычном сеансе Gnome. Сейчас попробую Wayland. Всё, попробовал в Wayland - там вообще Clipit не работает. В терминале, в режиме Wayland, clipit выдаёт сообщение «segmentation fault», с ядром беда, короче …

Что делать? Как дальше жить? Это страшнее коронавируса для меня, если честно …

Решение проблемы описано в этом комментарии.

 , , , ,

Desmond_Hume
()

Дилемма передачи паролей

Никто из нас не вечен. Мы все когда-нибудь умрём, вопрос времени, так сказать. У всех нас есть люди, которых мы бы не хотели оставить ни с чем после нашей смерти (родственники, близкие друзья …). Понятно, что нам будет уже всё равно, кому достанется наше имущество, когда мы умрём. Об этом надо думать только будучи живым.

Но вот дилемма. Передав пароль от всех своих секретов, будучи живым, мы ставим под угрозу нашу безопасность, а также родственников, близких друзей, которые будут обладать такими секретами. Предположим, что у нас имущества на миллиарды долларов, какие-нибудь крутые изобретения, которые пока не запатентованы, лежат в набросках в наших зашифрованных базах данных. Это уже технические нюансы, кто что представит.

Однако и не передать, будучи живыми, мы тоже рискуем, что наше имущество не достанется тем людям, хотя бы уже после нашей смерти.

Вам не кажется, что тут какие-то «взаимоисключающие параграфы»? Как разрешить эту проблему? В голову приходят безумные идеи о каких-то там датчиках: допустим, мы умираем, сердце останавливается и пароль каким-то образом появляется в голове наших родственников и т. д. Это просто фантазия на тему. Но если отойти от фантазий, как разрешить данное противоречие?

P. S. Тема навеяна недавней новостью о том, как один богатый японец умер, но не передал или не успел передать пароль от криптокошелька своим родственникам. Таких случаев, думаю, очень много. Это довольно распространённая проблема … какие у вас на этот счёт мысли? Как можно передать пароль, находясь в живых, таким образом, чтобы при твоей жизни тебя не касались проблемы безопасности (при хорошем пароле и дисциплине - себя вы почти на 100% не скомпрометируете, чего нельзя сказать про третьих лиц)?

Перемещено leave из general

 , , , ,

Desmond_Hume
()

Что-то странное с кэшем в Linux-дистрибутивах

Я не знаю, как вы, но я давно заметил, что некоторые дистрибутивы (Ubuntu, Fedora, Linux Mint) не умеют обращаться с кэшем памяти. Я не шибко знаток этой темы, но кэш просто заполняется до отказа, пока система не фризится жёстко (только перезагрузка помогает). Есть ли хотя бы какие-то вменяемые костыли, чтобы это не происходило? Знаю про решение с освобождением кэша командой «sudo sync; echo 3 > /proc/sys/vm/drop_caches», но оно настолько костыльное, что просто ощущаешь себя реальным инвалидом.

Решение

Не рекомендую делать реиндексацию. Комп тупо не справится (у меня 8 ядер, 16 Гб ОЗУ - не потянул). Проще скачать блокчейн заново.

 , , , ,

Desmond_Hume
()

RSS подписка на новые темы