Обновить
25
0.3
Ingref@Ingref

Пользователь

Отправить сообщение

Проф. курьеры - это те, кто доставляет на дальние расстояния. По тротуарам в таком случае гонять нет смысла. В этом есть смысл только для тех, кто доставляет по району. Я понимаю, что есть те, кто гоняет по тротуарам. Я не говорил, что их нет.

От района зависит, наверное. Питер - это деревеньки, разделённые между собой путепроводами. В каждой люди живут как в своём мирке.

А пешеходы как переходили дорогу на красный свет, так и переходят. И что с того?

Никто не говорит, что нужно гонять по тротуарам. Все проф. курьеры давно ездят на электро-скутерах по проезжей части по всем правилам. Загуглите у Деда Вадима интервью 17-летнего парня из Питера, который 200к делает минимум.

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

Это называется мультизаказ. Вполне может быть в один дом / парадную /этаж. А иногда - вообще 2 заказа одному клиенту (например, Пятёрочка и аптека). Там у него помимо шортсов есть полноценные видео, где он показывает, как ездит. Собственно, я выше уже писал - кто не верит, пробует сам и проверяет (кстати, прецедент на Хабре уже был).

Да никто не ходит по 14-16 часов, разве что реально походники (бывают такие люди выносливые, да). Там попросту мозоли натрёшь + колени. Смысла в этом ноль.

"На 50% дешевле" - это в 2 раза дешевле, а не в полтора. Например, если кофе стоит 100 рублей, то с 50%-й скидкой оно будет стоить 50 рублей. И речь в исходной статье про пеших курьеров, а не про всех курьеров. Пешие курьеры не работают по 12 часов без выходных.

65к - это зарплата курьера на Яндекс Байке при работе по 6 часов в день 5 дней в неделю в спальном районе Питера. Если работать по 12 часов с 1 выходным и ближе к центру, то это в районе 200к. И это даже не Москва. Другое дело, что программист одинаковую зарплату получает на протяжении всего года, а курьерка - это работа сезонная.

Пешком 12 часов с грузом могут ходить только профессиональные походники. Курьеры-пешеходы не работают по 12 часов.

Надо не ютуб смотреть, а самому попробовать. Благо, увольняться с основной работы для этого не требуется. А страшилки в ютубе просто больше просмотров набирают.

Да просто мало предложили. С Цукерберга надо пример брать, вот кто умеет делать предложения, от которых не отказываются.

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

Так-то я с вами согласен, но в таком случае и SIP-провайдеры тоже услуг связи не оказывают. Но по факту они обложены лицензированием.

Всё то же самое можно впаять любому организатору ВПН, не исполняющему ограничения РКН.

Крайне маловероятна ситуация, когда запрещают доступ к зарубежным ИП адресам, но оставляют рабочим ВПН.

Это понятно, но заблокировать 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 раз услышать.

Вроде Manus AI такое может.

Я понимаю попросить написать, потом проверить, изменить, подправить, потестировать

Попробуйте Cursor (или аналог). Делает примерно так, только не работает 24/7 в отличие от Clawd, ну и не проявляет инициативу, больше контроля вам оставляет. А то вы немного застряли в 2022-23 годах, когда агентов ещё не было, а были только чат-боты (которым вы даёте задачи, требующие агентских способностей).

1
23 ...

Информация

В рейтинге
2 486-й
Зарегистрирован
Активность