惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
P
Proofpoint News Feed
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
博客园 - Franky
V
V2EX
爱范儿
爱范儿
J
Java Code Geeks
小众软件
小众软件
Last Week in AI
Last Week in AI
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
酷 壳 – CoolShell
酷 壳 – CoolShell
The Register - Security
The Register - Security
GbyAI
GbyAI
Vercel News
Vercel News
Y
Y Combinator Blog
腾讯CDC
F
Fortinet All Blogs
I
InfoQ
N
Netflix TechBlog - Medium
B
Blog RSS Feed
D
Docker
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
量子位
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog
Microsoft Security Blog
Microsoft Security Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
云风的 BLOG
云风的 BLOG
A
About on SuperTechFans
Scott Helme
Scott Helme
T
Tor Project blog
U
Unit 42
Google Online Security Blog
Google Online Security Blog
PCI Perspectives
PCI Perspectives
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
NISL@THU
NISL@THU
D
Darknet – Hacking Tools, Hacker News & Cyber Security
aimingoo的专栏
aimingoo的专栏
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Stack Overflow Blog
Stack Overflow Blog
Security Archives - TechRepublic
Security Archives - TechRepublic

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Бесплатный фото-хостинг на Youtube, Rutube, Telegram, Max
xenon · 2026-06-24 · via Все публикации подряд на Хабре

Простой

5 мин

0

TL;DR: https://github.com/yaroslaff/smugglerjpg . Из фото делаем слайдшоу видео и его заливаем (можно unlisted/private, чтобы никто не видел). Затем, если надо - скачиваем видео и извлекаем фото.

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

Казалось бы, сервисов, где можно хранить фотки (особенно за деньги) - достаточно. И тут я никого не агитирую - если вам что-то нравится и удобно - то и ладушки. Но почему мне это не очень подходит:

  • Ну, во первых - я люблю халяву! Настолько, что ради халявы - не жалко никаких сил и никаких денег!

  • Отечественные сервисы как-то неоднократно дискредитировали себя в моих глазах тем, что на долгой дистанции склонны менять правила игры, как технические, так и тарифы (в том числе обещания, которые дают “навечно”). А фотки - они ведь как заложники. Ты уже не можешь так легко куда-то переехать - они тяжелые, сам переезд будет очень трудоемким.

  • С зарубежными - и этот же аспект остается (хоть и не в такой мере, но все-таки, я еще помню, как хранение на Google Photos было безлимитным и бесплатным). А сейчас, в дополнение, есть сложности с оплатой и санкциями. Нет, я конечно, имею зарубежную карту, но ведь сами понимаете. Сегодня она работает, завтра не работает. Или продлить не получится или пополнить или антифрод не пройдет. Или все пройдет, но скажут, пацан, ты с какого района, мы тут таким не рады - и все.

  • Не храните все яйца в одной корзине! Хоть мы храним, конечно, не яйца (а лишь иногда фото яиц), тем не менее. Но оплачивать 2-3 платных фотохостинга уж точно обидно, а два-три бесплатных - да почему бы и нет?

Сервисов, куда можно заливать фотки (тот же Телеграм или Макс) - достаточно. Однако, вот приехал я с отпуска, привез несколько сотен фото… Во-первых, заливать их тяжело. А во-вторых - если потребуется обратно, то будет ведь еще тяжелее скачивать.

Решение: делаем из фоток - слайдшоу, причем таким образом, чтобы потом было удобно нарезать на фотки обратно (либо без потери в качестве, либо с небольшой потерей).

Ты должен сделать добро из зла, потому что его больше не из чего делать

Раз уж у нас есть Макс и Рутуб и мы все равно их оплатили налогами - почему бы не использовать их как фотохостинги? Хоть на что-то сгодятся.

SmugglerJPG - пакуем галерею в одно видео

Будем использовать вот этот мой проектик - smugglerjpg.

Ставим

pipx install smugglerjpg

Если нет pipx - apt install pipx. Если вы на Windows - наверное, тоже как-то можно поставить. Не пробовал. Еще потребуется ffmpeg на линуксе.

Делаем видео

smugglerjpg create /tmp/testgallery/ -a ~/tmp/bgmusic/ -o out.mp4

-a - можно добавить музыку (тогда можно будет даже самому смотреть и почти не скучно)

-d - продолжительность каждого слайда. (по-умолчанию, 5 секунд)

Если хотите чтобы фото шли в определенном порядке, можно указать либо --sort name / --sort mtime , либо -f filelist.txt

Дальше заливаем его куда хотим.

Распаковываем нашу контрабанду обратно

Скачиваем наше видео, или из студии, или прямо через yt-dlp . Распаковываем:

smugglerjpg extract out-ytdlp.webm -o /tmp/extracted/

И у нас снова те же картинки (с небольшой потерей в качестве, на мой глаз - не заметно).

Контроль качества

Исходное фото для примера:

mediainfo testgallery/IMG20260513193409.jpg
$ mediainfo testgallery/IMG20260513193409.jpg
General
Complete name                            : testgallery/IMG20260513193409.jpg
Format                                   : JPEG
File size                                : 10.8 MiB

Image
Format                                   : JPEG
Width                                    : 3 072 pixels
Height                                   : 4 096 pixels
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Compression mode                         : Lossy
Stream size                              : 10.8 MiB (100%)
ColorSpace_ICC                           : RGB

Наш локальный видеофайл:

mediainfo out.mp4
$ mediainfo out.mp4 
General
Complete name                            : out.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 18.8 MiB
Duration                                 : 35 s 0 ms
Overall bit rate                         : 4 517 kb/s
Frame rate                               : 30.000 FPS
Writing application                      : Lavf61.7.103

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : Constrained Baseline@L5.1
Format settings                          : 1 Ref Frames
Format settings, CABAC                   : No
Format settings, Reference frames        : 1 frame
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 35 s 0 ms
Bit rate                                 : 4 378 kb/s
Width                                    : 3 840 pixels
Height                                   : 2 160 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 30.000 FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.018
Stream size                              : 18.3 MiB (97%)
Writing library                          : x264 core 165
Encoding settings                        : cabac=0 / ref=1 / deblock=0:0:0 / analyse=0:0 / me=dia / subme=0 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=0 / me_range=16 / chroma_me=1 / trellis=0 / 8x8dct=0 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=0 / threads=6 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=0 / weightp=0 / keyint=250 / keyint_min=25 / scenecut=0 / intra_refresh=0 / rc=crf / mbtree=0 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=0
Codec configuration box                  : avcC

Audio
ID                                       : 2
Format                                   : AAC LC
Format/Info                              : Advanced Audio Codec Low Complexity
Codec ID                                 : mp4a-40-2
Duration                                 : 34 s 993 ms
Source duration                          : 35 s 16 ms
Bit rate mode                            : Constant
Bit rate                                 : 132 kb/s
Channel(s)                               : 2 channels
Channel layout                           : L R
Sampling rate                            : 44.1 kHz
Frame rate                               : 43.066 FPS (1024 SPF)
Compression mode                         : Lossy
Stream size                              : 564 KiB (3%)
Source stream size                       : 565 KiB (3%)
Default                                  : Yes
Alternate group                          : 1

Файл после yt-dlp с youtube:

mediainfo out-ytdlp.webm
$ mediainfo out-ytdlp.webm 
General
Complete name                            : out-ytdlp.webm
Format                                   : WebM
Format version                           : Version 4
File size                                : 12.3 MiB
Duration                                 : 35 s 48 ms
Overall bit rate                         : 2 941 kb/s
Frame rate                               : 30.000 FPS
Writing application                      : Lavf61.7.103
Writing library                          : Lavf61.7.103

Video
ID                                       : 1
Format                                   : AV1
Format/Info                              : AOMedia Video 1
Format profile                           : Main@L5.0
Codec ID                                 : V_AV1
Duration                                 : 35 s 0 ms
Width                                    : 3 840 pixels
Height                                   : 2 160 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 30.000 FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Title                                    : ISO Media file produced by Google Inc.
Default                                  : Yes
Forced                                   : No
Color range                              : Limited
Color primaries                          : BT.709
Transfer characteristics                 : BT.709
Matrix coefficients                      : BT.709
VENDOR_ID                                : [0][0][0][0]

Audio
ID                                       : 2
Format                                   : Opus
Codec ID                                 : A_OPUS
Duration                                 : 35 s 41 ms
Channel(s)                               : 2 channels
Channel layout                           : L R
Sampling rate                            : 48.0 kHz
Bit depth                                : 32 bits
Compression mode                         : Lossy
Delay relative to video                  : 7 ms
Language                                 : English
Default                                  : Yes
Forced                                   : No

Параметры извлеченной картинки:

mediainfo /tmp/extracted/extracted_slide_003.jpg
$ mediainfo /tmp/extracted/extracted_slide_003.jpg 
General
Complete name                            : /tmp/extracted/extracted_slide_003.jpg
Format                                   : JPEG
File size                                : 967 KiB

Image
Format                                   : JPEG
Width                                    : 1 620 pixels
Height                                   : 2 160 pixels
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Compression mode                         : Lossy
Stream size                              : 967 KiB (100%)

Замечания, советы

  1. Видео на ютубе можно хранить как unlisted или private. Или вообще как Draft!

  2. Разрешение видео на практике - все-таки одно на всю продолжительность видео. Таким образом, если мы в видео держим одновременно и вертикальные и горизонтальные фотки - потери качества будут выше. С другой стороны, сейчас в телефонах столько мегапикселей что я после этой процедуры не замечаю разницы.

  3. Делалось LLM’кой, так что, сами понимаете.

Пользуйтесь, и храните свои приятные воспоминания!