Як я створив зручний медіа-завантажувач для Mac та Windows і переміг проблему з кодеками QuickTime
Кожен із нас час від часу стикається з потребою завантажити відео — лекцію з YouTube у дорогу, референс із Instagram Reels для роботи, звук для монтажу чи ролик із TikTok без водяного знака.
Що ми зазвичай робимо? Йдемо в гугл і відкриваємо перший-ліпший онлайн-сервіс. А там:
- Тонни сміття та реклами: банери сумнівних казино, агресивні спливаючі вікна (pop-ups), редіректи та ризик підхопити малварь.
- Обмеження та пейволи: «купіть Premium за $9.99/міс, щоб завантажити вище 720p».
- Консольний
yt-dlp: потужний інструмент, але не всім зручно щоразу відкривати термінал і згадувати потрібні прапорці командного рядка (особливо друзям-гуманітаріям або колегам-дизайнерам). - Важкі Electron-додатки: програми, які важать 400+ МБ і споживають пів гігабайта оперативки заради простого викачування відео.
Хотілося чогось легкого, красивого, безпечного і щоб працювало за принципом «1 клік — і готово».
⚙️ Що під капотом
Я обрав зв’язку Python + yt-dlp + FFmpeg + QuickJS:
- Автоматичний буфер обміну: програма сама бачить скопійоване посилання при запуску — достатньо просто натиснути
Enter. - Вибір аудіодоріжки: для YouTube-відео утиліта автоматично парсить доступні мовні доріжки, тож можна завантажити ролик одразу з українським дубляжем.
- Нативні сповіщення системи: macOS Notification Center та Windows Tray Notifications сигналізують, коли файл завантажено в папку
Downloads. - Жодного Electron: мінімалістичний та швидкий CLI/TUI інтерфейс з фірмовою кольоровою естетикою.
🍏 Головний челендж: чому QuickTime на Mac відмовлявся відкривати файли
З YouTube усе працювало ідеально: завантажувач брав найкраще відео та аудіо й зшивав їх через FFmpeg у звичний H.264/AAC.
Але коли ми почали тестувати Instagram Reels та TikTok, виліз неприємний баг: на Mac завантажені файли не відкривалися в QuickTime Player та через пробіл (QuickLook). macOS видавала помилку: «Цей файл не підтримується QuickTime».
У чому виявилася причина:
- Instagram та TikTok віддають уже готовий файл
.mp4. - Стандартний параметр
yt-dlp --recode-video mp4має оптимізацію: якщо вхідний файл уже має розширення.mp4, він просто пропускає обробку FFmpeg («already is in target format mp4»). - Але що всередині цього MP4? Перевірка через
ffmpeg -iпоказала, що Meta та TikTok масово стискають відео сучасними кодеками VP9 (vp09) або AV1 (av01), та ще й безfaststart(moov atom записано в кінці файлу). - QuickTime Player на macOS історично не підтримує VP9/AV1 всередині MP4 контейнера.
Як це було вирішено:
Я реалізував модуль постобробки:
# Автоматична перевірка кодеків та стандартизація під Apple QuickTime probe = probe_media(filepath) if probe["vcodec«] not in [«h264», «avc1»] or probe["pix_fmt«] != «yuv420p» or probe["acodec«] not in [«aac», «mp3»]: # Перекодування в Apple H.264 (yuv420p) + AAC 192k + faststart moov atom convert_to_quicktime_h264(filepath) else: # Якщо це вже чистий H.264 — миттєвий безвтратний ремукс (+faststart) за 0.05 сек remux_faststart(filepath)
Тепер 100% завантажених відео відкриваються на Mac нативно, миттєво стартують через пробіл та імпортуються у Final Cut чи DaVinci Resolve без жодних сторонніх плеєрів.
📦 Як запаковано проєкт
- Для macOS: зібрано
.appбандл з усіма залежностями всередині, підписаний кодом, плюс додано.commandскрипт швидкого запуску для обходу карантинних міток Gatekeeper при завантаженні з браузера. - Для Windows: портативна збірка з вбудованим ізольованим Python-середовищем та
ffmpeg.exe(працює без необхідності встановлювати Python у систему). - Сайт: легкий двомовний лендінг на Firebase Hosting.
🔗 Де спробувати та як підтримати
Програма повністю безкоштовна, без реклами і збиралася «як для себе». Але якщо раптом захочете підтримати — на сайті є банка)
- 🌐 Сайт проєкту (завантажити для Mac / Windows): media-downloader-web.web.app
Буду дуже вдячний за тест, конструктивний фідбек, багрепорти та ідеї щодо нових фіч у коментарях!
10 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівГарна спроба, товаріщ полковник ФСБ, але ніт. :-D
На сайті вказано Open Source, але посилання на сорси я так і не знайшов.
Чувак — анонім з одгним постом. По стилю, схоже, той же самий мамкін хакер, який букваль місяць тому тут викладав таке ж саме вірусне смиття :)
Перепрошую, як тільки доберусь до компа все відкрию.
Як буду біля пк відкрию перепрошую
Перепрошую, уже усе добавив є посилання на git та код на самому сайті.
Корисна штука, дякую. Одна порада з власних граблів, якщо ви ffmpeg кладете в збірку: зафіксуйте його версію і не тягніть «останній». У ffmpeg 9 викинули -vsync (тепер -fps_mode), і в нас через це мовчки посипались скрипти, які роками працювали — портативна збірка з оновленим ffmpeg.exe зламається так само, а користувач побачить лише «щось пішло не так». Ще дрібниця по вашому ж кейсу: коли кодек уже h264, окрім ремуксу з +faststart варто примусово чистити нестандартний pix_fmt (yuvj420p з деяких джерел) — Final Cut його ковтає, а QuickLook знову малює чорний прев’ю.
Дуже дякую за відгук та пораду. Вже додав перевірку колірного діапазону в probe: тепер, якщо прилітає yuvj* або pc-range, відео примусово нормалізується через scale=in_range=auto:out_range=limited,format=yuv420p з правильними BT.709 NCLX тегами (-color_range tv -colorspace bt709).
Збірки на сайті вже оновив. Ще раз спасибі за допомогу зробити інструмент якіснішим! 🤝
Оце ти прям круто підготувався! Цілих два акаунта зарегав і з першого навіть пару каментів написав, щоб тут зробити вигляд, що хтось це вірусне лайно поставив і спробував :-D
подивітся будь ласка сайт там уже є відкритий код