Два дні провів за конфігуруванням Ffmpeg задля знаходження оптимального набору параметрів для конвертації фото, відео, gif, аудіо файлів. Докладніше про проблему…
Сайт розташовано на початковому плані, на хостінгу ukraine.com.ua, доречі можу рекомендувати цей хостінг як гнучкий, на якому є доступ до багатьох утіліт (ssh, ffmpeg), та у якого дуже адекватна підтримка.
Ffmpeg – це утіліта яка може конвертувати будь який медіа-фомат в інший медіа-формат. Це комбайн, який підтримує купу кодеків, форматів і має багацько опцій.
До цього моменту я лише декілька разів запускав ffmpeg, тобто знань про медіа-формати практично ноль.
Розгорнув ffmpeg в докері, знайшов в Google декілька прикладів для кожного кейсу: jpeg/png > jpg, gif > mp4, mov/avi/mp4 > mp4, wav > mp3. Запустив локально – працює. Я вже записав собі перемогу над форматами і зайнявся налаштуванням деплоя на сервер.
Яке було здивування, коли на сервері виявилася стара версія ffmpeg 4.2, яка не підтримувала взагалі жодної написаної мною команди. Довелося більш детально розбиратися в ffmpeg.
Основною проблемую стла нестабільна робота кодеку libx264, тобто я не зміг зрозуміти логіку роботи ffmpeg, щоб заставити цей кодек працювати у 100% випадків. Це дуже виснажило, тому що не вдавалося обробити тільки декілька файлів, а коли міняв опції щоб працювало на цих файлів – відвалювалися геть інші.
Розумію, що для того щоб подалати цю проблему треба було зрозуміти роботу каналів, внутрішніх стрімів, розібратися з бітрейтом. І думаю, що з цим ще доведеться повозитися.
Але, врешті решт я почав пробувати інші кодеки і зупинився на libvpx-vp9, при тестуванні якого поклав хостінг-ноду (можливо, ви бачили проблеми з доступом до сайту). І цей кодек врешті решт дав стабільну конвертацію відео в webm формат.
Тож команда конвертації у обгортці виглядає приблизно так:
$this->file = $this->execFfmpeg($input, $outputFile, [
'-t 60', // максимальний час відео 1 хвилина
], [
'-fs 20MB', // максимальний розмір вихідного файлу 20MB
'-f webm', // формат
'-c:v libvpx-vp9', // кодек
'-b:a 128k', // бітрейт аудіо
'-c:a libopus', // аудіо-кодек
'-crf 30', // режим кодуваня (впливає на якість)
'-sn', // вимкнути субтітри
'-cpu-used -5',
'-deadline realtime', // встановлює швидкість обробки
'-movflags faststart', // потрібно щоб відео швидше стартувало
'-vf "scale=\'iw*min(1,min(640/iw,640/ih))\':-2,setsar=1"', // розміри відео
]);
Подібні команди прописані для обробки графіки, gif та аудіо. Ще для аудіо малюється звукова хвиля:
Взагалом мне влаштовує поточний код сервіса, можно сказати що він дописаний до першої релізної версії і задеплоєн.
Подивитися на фронтенд сервісу з прикладами вставок можно за посиланням: https://resources.ujournal.com.ua/.
Тепер я переходжу до написання сервіса Тексти, в якому будуть знаходитися лонгріди або статті, або просто тексти з форматуванням.
Основна стрічка буде відображати тільки простий контент – тексти до 1К символів без заголовків. Це потрібно щоб можно було генерувати велику кількість постів і вони були схожі на звичайні повідомлення в месенджері (або пости в твіттері).
Таке спрощення буде корисне для роботи і бази даних і ботів і трафіку між сервером та ботом. Боти будуть вичитувати пости зі стрічки, які повинні мати невеликий обʼєм інформації для ефективної роботи бота.
На цьому поки всі новини. Переходжу до написання сервісу Текстів, за ним йде сервіс Опитування, далі робота над Таймлайном.
Ідея для боту: Бот «Тиждень» – має набор тем для тижнів. Тема складається з питань для кожного дня тижня. Бот публікує кожного дня пост: «Тиждень шутерів: Напиши назву улюбленого шутера», «Тиждень шутерів: Напиши назву улюбленого YouTube-каналу про шутери»… Наприкінці тижня бот створює опитування з 5 тем на наступний тиждень. Можна додати теми через команду (@week-bot /add [Назва теми]). Бот буде сприяти обміну інформацією про ігри та інші теми.
@himarstime Хочеться зробити для початку щось просте. Тим паче новий формат сайту (за моїми очікуваннями) буде більш схожий на телеграм, тобто самі пости будуть невеликі (сайт буде коменто-орієнтовним). Тому хочеться щоб люди сильно не готувалися до створення посту, а користувалися сайтом як публічним чатом, або форумом (дивись Совєтчіцу – https://sovet.kidstaff.com.ua/). Формат – вкидання питання/голосувалки та короткі відповіді. Для початку це може стати рушієм двіжухи, а якщо формат буде сприйнятий з любовью – згодом придумати додатковий формат "конкурс текстів" який запускається та супроводжується ботом. Типу "текст тижня" + якісь бонуси на наступний тижень. Ідея теж класна.
@lemmy краще зробити складніше. Бот дає першу тему, а далі користувачі повинні створювати пости на задану тему з посиланням або згадуванням бота. Далі бот рахує кількість підвищень або переглядів на постах користувачів, і користувач з найбільш популярними постами матиме право або вигадати пул тем серед яких спільнота голосуванням обере одну і бот запостить пост на обрану тему, або ж бот запропонує список тем користувачу переможцю, і він просто обере ту, яка йому до вподоби.
Знаю звучить пиздець важко в реалізації, але думаю така штука стимулюватиме людей створювати пости, і буде такий собі дух змагання. Це шось схоже на те, коли ми тут вгадували фільми по намальованому кадру в пейнті
Я так розумію ресурси прикрутиш до сайту вже з новою версією
@himarstime Зараз коментарі відносяться до контенту поста і індексуються як доповнення до тексту поста. Коли переведу коментарі у пости, змінеться структура сторінки. Зникнуть заголовки, тобто заголовки залишаться, але будуть тільки у постів, у котрих є Тексти.
Мабуть, заголовки постам треба буде давати на вибір:
Можливо, я вигадую велосипед і вже є семантична розмітка під соціальні мережі. Швидкий пошук нічого не дав – тема СЕО дуже переспамлена. Важко знайти рекомендації. Знаю тільки що треба використовувати https://schema.org/SocialMediaPosting щоб розмітити пост. Я вже використав цю схему для розмітки Ресурсів. Планую теж саме зробити з постами.
@lemmy а коментарі індексуються? Ну типу кількість постів явно впливає на видачу в Гугл, коли ти переробиш на сервісну структуру де коментарі теж перетворяться на пости, вони напевно ідексуватимуться. А зараз коментарі індексуються?
@himarstime Так точно. Планую зробити вже всі базові Сервіси, перенести контент в них, додати Таймлайн та інтегрувати сервіси в таймлайн.