Интересная история про то, как программисты для программирования наняли другого программиста, а для заработка $200/h применили свои иные способности.
Жаль только, что такой скепсис по поводу нейросетей. Как они кодили 2 года назад и как они кодят сейчас - это большая разница. И несмотря на то, что сейчас они выдают продукт низкого качества, ещё через 2 года результат может быть уже другого уровня.
Стива, конечно, можно и пожалеть. Но стоит ли жалеть человека, который может себе позволить разбрасываться деньгами...
Радует, что Сбер продолжает придерживаться принципа выкладки своих наработок в open source! И всё-таки интересно, когда уже можно будет лицезреть их физическое воплощение в виде курьеров /грузчиков / сборщиков и т. п.? Потому что лучше один раз увидеть, чем 100 раз прочитать. А то ваш робототехнический конкурент только коробки на колёсиках показывает. Но они хотя бы работают в реальных условиях...
Странно, что никто в упор не видит надвигающийся прорыв в области полноценной генерации видео нейросетями real-time. В качестве примеров уже были Doom и Counter-Strike - это просто эксперименты на малых мощностях. Но уже сейчас какой-нибудь Kling 3 напрочь стирает грань между генерацией и реальностью:
YouTube
Осталось только начать генерировать это непрерывно в реальном времени, и вуаля - весь этот многоэтажный зоопарк технологий начала 2000-х станет никому не нужен примерно так же, как в своё время стали ненужными (по-своему гениальные) технологии паровозов, ЭЛТ-мониторов и диалап-модемов.
Собсна, когда человека в чём-то обвиняют, то это обвиняющая сторона должна предоставлять доказательства виновности, а не наоборот. Это называется "презумпция невиновности" (придумали ещё в Древнем Риме).
Да он просто пытается спровоцировать Цукерберга на дискуссию. Тем самым получив внимание гораздо большей аудитории, чем в случае отсутствия таковой дискуссии. Ну и в целом он просто человек такой, он же и раньше язвительно высказывался в отношении многих более авторитетных людей, чем он сам.
Идея без реализации ничего не стоит. Он правильно реализовал чужие идеи - в этом и есть его заслуга. Если кто-то считает, что надо сделать как-то по-другому, - берёт и делает.
Если для себя - можно. Если для других - в принципе, тоже можно, если просто оказал помощь в настройке. Ну а если транслируешь модифицированный у себя трафик друзьям - тут уже "услуги передачи данных" / "телематические услуги" со всеми вытекающими.
Крайне маловероятна ситуация, когда запрещают доступ к зарубежным ИП адресам, но оставляют рабочим ВПН.
Это понятно, но заблокировать IP-адрес куда проще, чем ВПН, с учётом целого зоопарка разных протоколов, в том числе устойчивых к детектированию. Вот если прям нейросетями все-все-все возможности организации ВПН прикроют, тогда задача посложнее будет, да.
#!/usr/bin/env bash
# Скрипт: transcode_to_hevc.sh
# Полностью рабочий, самодостаточный. Рассчитывает видеобитрейт так, чтобы итог <= TARGET_MB (по умолчанию 1024),
# сохраняет оригинальные аудиодорожки и субтитры, поддерживает backend: cpu (libx265, 2-pass), nvenc (NVidia), amf (AMD).
# Использование:
# ./transcode_to_hevc.sh input.mp4 [output.mkv] [cpu|nvenc|amf] [TARGET_MB]
# Примеры:
# ./transcode_to_hevc.sh input.mp4
# ./transcode_to_hevc.sh input.mp4 output.mkv nvenc 1024
set -euo pipefail
########## Параметры по умолчанию ##########
INPUT="${1:-}"
if [[ -z "$INPUT" ]]; then
echo "Использование: $0 input.mp4 [output.mkv] [cpu|nvenc|amf] [TARGET_MB]"
exit 2
fi
OUTPUT="${2:-}"
BACKEND="${3:-auto}"
TARGET_MB="${4:-1024}" # целевой размер в мегабайтах (по умолчанию 1024 MB = 1 GiB)
# Если не указан выходной — сформируем из имени
if [[ -z "$OUTPUT" ]]; then
base="${INPUT%.*}"
OUTPUT="${base}_hevc.mkv"
fi
# Считаем в байтах
TARGET_BYTES=$(awk -v mb="$TARGET_MB" 'BEGIN{print (mb * 1024 * 1024)}')
# Файловая система NULL (поддержка cygwin/msys на Windows не гарантируется, предполагается Unix-like)
NULLDEV="/dev/null"
# Проверки
command -v ffmpeg >/dev/null 2>&1 || { echo "ffmpeg не найден в PATH"; exit 1; }
command -v ffprobe >/dev/null 2>&1 || { echo "ffprobe не найден в PATH"; exit 1; }
# Автоподбор backend, если указан 'auto'
if [[ "$BACKEND" == "auto" ]]; then
if ffmpeg -hide_banner -encoders 2>/dev/null | grep -q 'hevc_nvenc'; then
BACKEND="nvenc"
elif ffmpeg -hide_banner -encoders 2>/dev/null | grep -q 'hevc_amf'; then
BACKEND="amf"
else
BACKEND="cpu"
fi
fi
# Вычисляем длительность в секундах (целое)
DURATION_SEC=$(ffprobe -v error -select_streams v:0 -show_entries format=duration \
-of default=noprint_wrappers=1:nokey=1 "$INPUT" | awk '{printf("%.0f",$1)}')
if [[ -z "$DURATION_SEC" || "$DURATION_SEC" -le 0 ]]; then
echo "Не удалось определить длительность видео."
exit 1
fi
# Собираем суммарный аудиобитрейт (бит/с). Если битрейт для дорожки отсутствует — используем 128k (128000 бит/с).
AUDIO_TOTAL_BPS=0
mapfile -t AUDIOS < <(ffprobe -v error -select_streams a -show_entries stream=index,bit_rate \
-of csv=p=0 "$INPUT" || true)
if [[ ${#AUDIOS[@]} -eq 0 ]]; then
AUDIO_STREAMS=0
else
AUDIO_STREAMS=${#AUDIOS[@]}
fi
for s in "${AUDIOS[@]}"; do
# Формат: index,bit_rate
bit=$(echo "$s" | awk -F, '{print $2}')
if [[ -z "$bit" || "$bit" == "N/A" ]]; then
bit="128000" # 128 kb/s по умолчанию
fi
# на случай, если ffprobe вернул в kb/s (маловероятно) — оставим как есть (обычно в бит/с)
AUDIO_TOTAL_BPS=$((AUDIO_TOTAL_BPS + bit))
done
# Если нет аудиодорожек — оставляем 0
if [[ -z "${AUDIO_TOTAL_BPS}" ]]; then
AUDIO_TOTAL_BPS=0
fi
# Учтём небольшой оверхед для контейнера/метаданных (4 MB) и страховой мультипликатор (0.98)
OVERHEAD_BYTES=$((4 * 1024 * 1024))
SAFETY_NUMERATOR=98
SAFETY_DENOMINATOR=100
# Расчёт видеобитрейта в бит/с:
# video_bps = ((TARGET_BYTES - OVERHEAD - estimated_audio_bytes) * 8 / DURATION_SEC) * safety_factor
# estimated_audio_bytes = AUDIO_TOTAL_BPS * DURATION_SEC / 8 (но AUDIO_TOTAL_BPS уже в бит/с, так что аудио_битов = AUDIO_TOTAL_BPS*DURATION_SEC)
# Перепишем аккуратно:
# total_target_bits = (TARGET_BYTES - OVERHEAD_BYTES) * 8
# audio_bits = AUDIO_TOTAL_BPS * DURATION_SEC
# video_bps_raw = (total_target_bits - audio_bits) / DURATION_SEC
# video_bps_safe = video_bps_raw * SAFETY_NUMERATOR / SAFETY_DENOMINATOR
total_target_bits=$(awk -v tb="$TARGET_BYTES" -v ov="$OVERHEAD_BYTES" 'BEGIN{print (tb - ov) * 8}')
audio_bits=$(awk -v abps="$AUDIO_TOTAL_BPS" -v dur="$DURATION_SEC" 'BEGIN{print abps * dur}')
video_bps_raw=$(awk -v t="$total_target_bits" -v a="$audio_bits" -v dur="$DURATION_SEC" 'BEGIN{v=(t - a)/dur; if(v<0) v=0; print v}')
video_bps_safe=$(awk -v v="$video_bps_raw" -v n="$SAFETY_NUMERATOR" -v d="$SAFETY_DENOMINATOR" 'BEGIN{print v * n / d}')
# Минимальный разумный видеобитрейт (бит/с)
MIN_VIDEO_BPS=80000 # 80 kb/s — на случай чрезвычайно долгих/багнутых файлов
if (( $(awk -v v="$video_bps_safe" -v m="$MIN_VIDEO_BPS" 'BEGIN{print (v<m)}') )); then
video_bps_safe=$MIN_VIDEO_BPS
fi
# Переводим в kbps (целое) и формируем ffmpeg-параметр, например 900k
VIDEO_KBPS=$(awk -v v="$video_bps_safe" 'BEGIN{printf("%.0f", v/1000)}')
if [[ "$VIDEO_KBPS" -le 0 ]]; then VIDEO_KBPS=100; fi
FF_B_V="${VIDEO_KBPS}k"
# Информация для пользователя (и лог)
echo "Input: $INPUT"
echo "Output: $OUTPUT"
echo "Backend: $BACKEND"
echo "Target size (MB): $TARGET_MB"
echo "Duration (sec): $DURATION_SEC"
echo "Audio streams: ${AUDIO_STREAMS:-0}"
echo "Audio total bps: ${AUDIO_TOTAL_BPS} bit/s"
echo "Computed video: ${VIDEO_KBPS} kb/s (ffmpeg: -b:v ${FF_B_V})"
echo "Safety overhead: $(($OVERHEAD_BYTES / 1024 / 1024)) MB"
echo ""
# Общие опции для сохранения аудио/субтитров/прочего
COMMON_MAP="-map 0"
COMMON_AUDIO="-c:a copy"
COMMON_SUB="-c:s copy"
COMMON_ATTACH="-c:t copy" # attachments (cover art)
# Формирование и выполнение команд для каждого backend
case "$BACKEND" in
cpu)
# 2-pass libx265
# passlogfile: используем временный файл
PASSLOG="/tmp/ffmpeg_x265_passlog_$$"
echo "Запуск CPU (libx265) 2-pass..."
ffmpeg -y -i "$INPUT" $COMMON_MAP -c:v libx265 -preset slow -b:v "$FF_B_V" \
-x265-params pass=1 -an -f null "$NULLDEV" -passlogfile "$PASSLOG"
ffmpeg -i "$INPUT" $COMMON_MAP -c:v libx265 -preset slow -b:v "$FF_B_V" \
-x265-params pass=2 $COMMON_AUDIO $COMMON_SUB $COMMON_ATTACH "$OUTPUT" -passlogfile "$PASSLOG"
# очистка логов pass
rm -f "${PASSLOG}-0.log" "${PASSLOG}.log" || true
;;
nvenc)
# NVENC: делаем 2-pass если поддерживается; иначе 1-pass ABR.
echo "Запуск NVENC (hevc_nvenc) — 2-pass где возможно..."
# опции NVENC: -rc vbr/const, используем CBR-like with two-pass ABR
ffmpeg -y -i "$INPUT" $COMMON_MAP -c:v hevc_nvenc -preset p6 -rc vbr -b:v "$FF_B_V" \
-maxrate "$FF_B_V" -bufsize "$((VIDEO_KBPS * 2))k" -an -f null "$NULLDEV" -pass 1
ffmpeg -i "$INPUT" $COMMON_MAP -c:v hevc_nvenc -preset p6 -rc vbr -b:v "$FF_B_V" \
-maxrate "$FF_B_V" -bufsize "$((VIDEO_KBPS * 2))k" $COMMON_AUDIO $COMMON_SUB $COMMON_ATTACH "$OUTPUT" -pass 2
;;
amf)
echo "Запуск AMF (hevc_amf) — 2-pass где возможно..."
ffmpeg -y -i "$INPUT" $COMMON_MAP -c:v hevc_amf -quality quality -b:v "$FF_B_V" \
-maxrate "$FF_B_V" -bufsize "$((VIDEO_KBPS * 2))k" -an -f null "$NULLDEV" -pass 1
ffmpeg -i "$INPUT" $COMMON_MAP -c:v hevc_amf -quality quality -b:v "$FF_B_V" \
-maxrate "$FF_B_V" -bufsize "$((VIDEO_KBPS * 2))k" $COMMON_AUDIO $COMMON_SUB $COMMON_ATTACH "$OUTPUT" -pass 2
;;
*)
echo "Неизвестный backend: $BACKEND (ожидалось cpu|nvenc|amf|auto)"
exit 2
;;
esac
# Финальная проверка размера
OUT_SIZE_BYTES=$(stat -c%s "$OUTPUT" 2>/dev/null || ls -l --block-size=1 "$OUTPUT" | awk '{print $5}')
OUT_SIZE_MB=$(awk -v b="$OUT_SIZE_BYTES" 'BEGIN{printf("%.2f", b/1024/1024)}')
echo ""
echo "Готово. Размер выходного файла: ${OUT_SIZE_MB} MB"
# Если превысил цель — сообщаем и даём совет
if (( $(awk -v out="$OUT_SIZE_BYTES" -v tgt="$TARGET_BYTES" 'BEGIN{print (out>tgt)}') )); then
echo "ВНИМАНИЕ: размер больше целевого ${TARGET_MB} MB."
echo "Рекомендации:"
echo " - Для CPU: увеличьте CRF (если хотите CRF, замените двухпроходный режим на CRF, например -crf 28)."
echo " - Для GPU: уменьшите целевой битрейт (вызовите скрипт с меньшим TARGET_MB) или используйте CPU x265 2-pass."
exit 0
fi
exit 0
Вот код, который выдал GPT 5.2 Thinking Mini по вашему промпту: "мне нужно перекодировать с помощью ffmpeg видео mp4 h.264 в mkv h.265, битрейт подбери так чтобы размеры видео не превышали 1 гигабайт, звук оставь в оригинале, нужны варианты для перекодировки на cpu, видеокарте nvidia и amd".
Если брать обычный, не Mini, то, наверное, результат будет лучше.
попробую, но 22-23 годы вы наверное ошиблись? чатгпт представлен в конце 22 года, я его впервые попробовал в 2025 или чатгпт это тоже не то?
Есть обычные чат-боты и рассуждающие (reasoning, thinking). Конкретно у дипсика оно называется "глубокое мышление" - чтобы оно включилось, на него нужно нажать. У чатгпт для включения режима рассуждений надо нажать на плюсик слева от чата, там выбрать лампочку (в русском интерфейсе оно называется "Думаю"). А обычные, нерассуждающие чатботы, это именно 22-23 годы (ну сейчас они получше стали, конечно).
Чем более сложная задача, тем больше она требует ресурсов. Соответственно, нейронки стараются эти ресурсы экономить, и без явного указания особо не вдумываются в задачу. Агенты в том числе правильно формулируют промпты к языковым моделям, чтобы те не "ленились". И дебаггинг проводят, если надо.
Вы бы попробовали уже, потому что лучше один раз увидеть, чем 100 раз услышать.
Я понимаю попросить написать, потом проверить, изменить, подправить, потестировать
Попробуйте Cursor (или аналог). Делает примерно так, только не работает 24/7 в отличие от Clawd, ну и не проявляет инициативу, больше контроля вам оставляет. А то вы немного застряли в 2022-23 годах, когда агентов ещё не было, а были только чат-боты (которым вы даёте задачи, требующие агентских способностей).
Просто могут, например, закрыть доступ к зарубежным IP-адресам. Это выглядит закономерным вариантом перед тем, который описываете вы. Тогда схема автора будет на коне.
Интересная история про то, как программисты для программирования наняли другого программиста, а для заработка $200/h применили свои иные способности.
Жаль только, что такой скепсис по поводу нейросетей. Как они кодили 2 года назад и как они кодят сейчас - это большая разница. И несмотря на то, что сейчас они выдают продукт низкого качества, ещё через 2 года результат может быть уже другого уровня.
Стива, конечно, можно и пожалеть. Но стоит ли жалеть человека, который может себе позволить разбрасываться деньгами...
Радует, что Сбер продолжает придерживаться принципа выкладки своих наработок в open source! И всё-таки интересно, когда уже можно будет лицезреть их физическое воплощение в виде курьеров /грузчиков / сборщиков и т. п.? Потому что лучше один раз увидеть, чем 100 раз прочитать. А то ваш робототехнический конкурент только коробки на колёсиках показывает. Но они хотя бы работают в реальных условиях...
Странно, что никто в упор не видит надвигающийся прорыв в области полноценной генерации видео нейросетями real-time. В качестве примеров уже были Doom и Counter-Strike - это просто эксперименты на малых мощностях. Но уже сейчас какой-нибудь Kling 3 напрочь стирает грань между генерацией и реальностью:
YouTube
Осталось только начать генерировать это непрерывно в реальном времени, и вуаля - весь этот многоэтажный зоопарк технологий начала 2000-х станет никому не нужен примерно так же, как в своё время стали ненужными (по-своему гениальные) технологии паровозов, ЭЛТ-мониторов и диалап-модемов.
И потом все ваши домены банят по подозрению в проведении лотерей. Примерно в этом и состоит ситуация в статье.
Собсна, когда человека в чём-то обвиняют, то это обвиняющая сторона должна предоставлять доказательства виновности, а не наоборот. Это называется "презумпция невиновности" (придумали ещё в Древнем Риме).
Так вот Илон и отписался по результатам этой проверки)
Вы поменьше шумите, чтоб не было новых проверок.
Была на эту тему статья - https://habr.com/ru/articles/940830/
Да он просто пытается спровоцировать Цукерберга на дискуссию. Тем самым получив внимание гораздо большей аудитории, чем в случае отсутствия таковой дискуссии. Ну и в целом он просто человек такой, он же и раньше язвительно высказывался в отношении многих более авторитетных людей, чем он сам.
Идея без реализации ничего не стоит. Он правильно реализовал чужие идеи - в этом и есть его заслуга. Если кто-то считает, что надо сделать как-то по-другому, - берёт и делает.
Да просто мало предложили. С Цукерберга надо пример брать, вот кто умеет делать предложения, от которых не отказываются.
Если для себя - можно. Если для других - в принципе, тоже можно, если просто оказал помощь в настройке. Ну а если транслируешь модифицированный у себя трафик друзьям - тут уже "услуги передачи данных" / "телематические услуги" со всеми вытекающими.
Так-то я с вами согласен, но в таком случае и SIP-провайдеры тоже услуг связи не оказывают. Но по факту они обложены лицензированием.
Всё то же самое можно впаять любому организатору ВПН, не исполняющему ограничения РКН.
Это понятно, но заблокировать IP-адрес куда проще, чем ВПН, с учётом целого зоопарка разных протоколов, в том числе устойчивых к детектированию. Вот если прям нейросетями все-все-все возможности организации ВПН прикроют, тогда задача посложнее будет, да.
Вот код, который выдал GPT 5.2 Thinking Mini по вашему промпту: "мне нужно перекодировать с помощью ffmpeg видео mp4 h.264 в mkv h.265, битрейт подбери так чтобы размеры видео не превышали 1 гигабайт, звук оставь в оригинале, нужны варианты для перекодировки на cpu, видеокарте nvidia и amd".
Если брать обычный, не Mini, то, наверное, результат будет лучше.
Есть обычные чат-боты и рассуждающие (reasoning, thinking). Конкретно у дипсика оно называется "глубокое мышление" - чтобы оно включилось, на него нужно нажать. У чатгпт для включения режима рассуждений надо нажать на плюсик слева от чата, там выбрать лампочку (в русском интерфейсе оно называется "Думаю"). А обычные, нерассуждающие чатботы, это именно 22-23 годы (ну сейчас они получше стали, конечно).
Чем более сложная задача, тем больше она требует ресурсов. Соответственно, нейронки стараются эти ресурсы экономить, и без явного указания особо не вдумываются в задачу. Агенты в том числе правильно формулируют промпты к языковым моделям, чтобы те не "ленились". И дебаггинг проводят, если надо.
Вы бы попробовали уже, потому что лучше один раз увидеть, чем 100 раз услышать.
Вроде Manus AI такое может.
Попробуйте Cursor (или аналог). Делает примерно так, только не работает 24/7 в отличие от Clawd, ну и не проявляет инициативу, больше контроля вам оставляет. А то вы немного застряли в 2022-23 годах, когда агентов ещё не было, а были только чат-боты (которым вы даёте задачи, требующие агентских способностей).
Эксперимент автора (как и коммент, на который я отвечал) предполагает гипотетическую ситуацию, которая может возникнуть в будущем.
Просто могут, например, закрыть доступ к зарубежным IP-адресам. Это выглядит закономерным вариантом перед тем, который описываете вы. Тогда схема автора будет на коне.