Pull to refresh
-20
0.2
Алексей Смирнов@pol_pot

User

Send message

Попросил гпт переделать с помощью mediainfo. Вроде работает, но это не точно, не очень понял зачем это нужно вообще.

$ mdurmi ~/tmp
Общая длительность: 00:07:36
 Файлов: 11

Длительность  Имя файла
----------  ---------
00:00:05    /home/ubuntu/tmp/1111/videos/IMG_4820.MP4
00:00:11    /home/ubuntu/tmp/1111/videos/IMG_4683.MP4
00:00:13    /home/ubuntu/tmp/1111/videos/m2-res_1280p (36).mp4
00:00:12    /home/ubuntu/tmp/1111/videos/IMG_7808.MOV
00:00:09    /home/ubuntu/tmp/1111/videos/video_2025-08-01_11-18-28.mp4
00:00:10    /home/ubuntu/tmp/1111/videos/123.flv
00:01:28    /home/ubuntu/tmp/1111/videos/Встретились два одиночества #скорая #скораяпомощь #первыекторядом #смп #03 #скорая помощь #103 [YgwvtN3bG_Q].webm
00:02:45    /home/ubuntu/tmp/1111/videos/video_2025-08-01_11-18-43.mp4
00:00:17    /home/ubuntu/tmp/1111/videos/video_2025-08-01_11-19-01.mp4
00:00:10    /home/ubuntu/tmp/1111/videos/video_2025-08-01_11-19-05.mp4
00:01:56    /home/ubuntu/tmp/1111/videos/IMG_1385.MOV

$ mdurmi -v -f -s d ~/tmp
Найдено файлов: 11
Читаю: /home/ubuntu/tmp/1111/videos/IMG_4820.MP4
Читаю: /home/ubuntu/tmp/1111/videos/IMG_4683.MP4
Читаю: /home/ubuntu/tmp/1111/videos/m2-res_1280p (36).mp4
Читаю: /home/ubuntu/tmp/1111/videos/IMG_7808.MOV
Читаю: /home/ubuntu/tmp/1111/videos/video_2025-08-01_11-18-28.mp4
Читаю: /home/ubuntu/tmp/1111/videos/123.flv
Читаю: /home/ubuntu/tmp/1111/videos/Встретились два одиночества #скорая #скораяпомощь #первыекторядом #смп #03 #скорая помощь #103 [YgwvtN3bG_Q].webm
Читаю: /home/ubuntu/tmp/1111/videos/video_2025-08-01_11-18-43.mp4
Читаю: /home/ubuntu/tmp/1111/videos/video_2025-08-01_11-19-01.mp4
Читаю: /home/ubuntu/tmp/1111/videos/video_2025-08-01_11-19-05.mp4
Читаю: /home/ubuntu/tmp/1111/videos/IMG_1385.MOV
Общая длительность: 00:07:36
 Файлов: 11

Длительность  Формат  Имя файла
----------  ------        ---------
00:02:45    MPEG-4        /home/ubuntu/tmp/1111/videos/video_2025-08-01_11-18-43.mp4
00:01:56    MPEG-4        /home/ubuntu/tmp/1111/videos/IMG_1385.MOV
00:01:28    WebM          /home/ubuntu/tmp/1111/videos/Встретились два одиночества #скорая #скораяпомощь #первыекторядом #смп #03 #скорая помощь #103 [YgwvtN3bG_Q].webm
00:00:17    MPEG-4        /home/ubuntu/tmp/1111/videos/video_2025-08-01_11-19-01.mp4
00:00:13    MPEG-4        /home/ubuntu/tmp/1111/videos/m2-res_1280p (36).mp4
00:00:12    MPEG-4        /home/ubuntu/tmp/1111/videos/IMG_7808.MOV
00:00:11    MPEG-4        /home/ubuntu/tmp/1111/videos/IMG_4683.MP4
00:00:10    Flash Video   /home/ubuntu/tmp/1111/videos/123.flv
00:00:10    MPEG-4        /home/ubuntu/tmp/1111/videos/video_2025-08-01_11-19-05.mp4
00:00:09    MPEG-4        /home/ubuntu/tmp/1111/videos/video_2025-08-01_11-18-28.mp4
00:00:05    MPEG-4        /home/ubuntu/tmp/1111/videos/IMG_4820.MP4
#!/usr/bin/env bash
set -uo pipefail

VERSION="0.7"
RECURSIVE=true
VERBOSE=false
SHOW_FORMAT=false
SORT_KEY=""
TYPES=""
MI_TIMEOUT="10s"

print_help() {
  cat <<EOF
mdurmi v$VERSION — суммирует длительность медиафайлов через mediainfo.

Использование:
  mdurmi [опции] [ПУТЬ]
Опции:
  -r    только текущая папка (без рекурсии)
  -s d  сортировка по длительности (desc)
  -t l  фильтр по расширениям: mp4,mov,mp3
  -f    показывать формат (контейнер)
  -v    подробный режим
  -h    помощь
EOF
}

seconds_to_hms() {
  local s=${1%.*}
  s=$((10#$s))
  local h=$((10#$s / 3600))
  local m=$(((10#$s % 3600) / 60))
  local c=$((10#$s % 60))
  printf "%02d:%02d:%02d" "$h" "$m" "$c"
}

require_tools() {
  if ! command -v mediainfo >/dev/null 2>&1; then
    echo "Ошибка: mediainfo не найден" >&2
    exit 127
  fi
}

TIMEOUT_CMD=""
if command -v timeout >/dev/null 2>&1; then
  TIMEOUT_CMD="timeout"
elif command -v gtimeout >/dev/null 2>&1; then
  TIMEOUT_CMD="gtimeout"
fi

run_mi() {
  # $1 = inform, $2 = file
  if [[ -n "$TIMEOUT_CMD" ]]; then
    "$TIMEOUT_CMD" "$MI_TIMEOUT" mediainfo --Inform="$1" "$2" 2>/dev/null | tr -d '\r'
  else
    mediainfo --Inform="$1" "$2" 2>/dev/null | tr -d '\r'
  fi
}

probe_file() {
  local file="$1"
  local dur_ms fmt

  dur_ms=$(run_mi "General;%Duration%" "$file" || true)
  if [[ -z "$dur_ms" || "$dur_ms" == "0" ]]; then
    dur_ms=$(run_mi "Video;%Duration%" "$file" || true)
    if [[ -z "$dur_ms" || "$dur_ms" == "0" ]]; then
      dur_ms=$(run_mi "Audio;%Duration%" "$file" || true)
    fi
  fi

  if $SHOW_FORMAT; then
    fmt=$(run_mi "General;%Format%" "$file" || true)
  else
    fmt=""
  fi

  if [[ -z "$dur_ms" ]] || ! [[ "$dur_ms" =~ ^[0-9]+([.][0-9]+)?$ ]] || [[ "$dur_ms" == "0" ]]; then
    $VERBOSE && echo "  Ошибка: нет валидной длительности: $file" >&2
    echo -e "ERR\t${fmt}\t${file}"
    return 1
  fi

  local dur_s
  dur_s=$(awk -v ms="$dur_ms" 'BEGIN{printf "%.0f", ms/1000}')
  echo -e "${dur_s}\t${fmt}\t${file}"
  return 0
}

while getopts ":rs:t:fvh" opt; do
  case "$opt" in
    r) RECURSIVE=false ;;
    s) SORT_KEY="$OPTARG" ;;
    t) TYPES="$OPTARG" ;;
    f) SHOW_FORMAT=true ;;
    v) VERBOSE=true ;;
    h) print_help; exit 0 ;;
    \?) echo "Неизвестная опция: -$OPTARG" >&2; exit 2 ;;
    :) echo "Опция -$OPTARG требует аргумент" >&2; exit 2 ;;
  esac
done
shift $((OPTIND-1))

TARGET="${1:-.}"
require_tools

# Дефолтные расширения
if [[ -z "$TYPES" ]]; then
  TYPES="mp4,mov,m4v,mkv,avi,flv,webm,mp3,flac,wav,aac,ogg,m4a"
fi

shopt -s nullglob dotglob
declare -a files
skip_suffix=".filepart"

collect_recursive() {
  IFS=, read -r -a exts <<<"$TYPES"
  find_expr=()
  for e in "${exts[@]}"; do
    e="${e#.}"
    find_expr+=(-iname "*.${e}")
    find_expr+=(-o)
  done
  unset 'find_expr[${#find_expr[@]}-1]' || true
  while IFS= read -r -d '' f; do
    [[ "$f" == *"$skip_suffix" ]] && continue
    files+=("$f")
  done < <(find "$TARGET" -type f \( "${find_expr[@]}" \) -print0)
}
collect_shallow() {
  if [[ -d "$TARGET" ]]; then
    IFS=, read -r -a exts <<<"$TYPES"
    for e in "${exts[@]}"; do
      e="${e#.}"
      for f in "$TARGET"/*."$e"; do
        [[ -e "$f" ]] || continue
        [[ "$f" == *"$skip_suffix" ]] && continue
        files+=("$f")
      done
    done
  else
    [[ "$TARGET" == *"$skip_suffix" ]] || files+=("$TARGET")
  fi
}

if $RECURSIVE; then
  collect_recursive
else
  collect_shallow
fi

total_sec=0
count=0
errors=0
results_file=$(mktemp)
trap 'rm -f "$results_file"' EXIT

$VERBOSE && echo "Найдено файлов: ${#files[@]}"

for file in "${files[@]}"; do
  [[ -f "$file" ]] || continue
  $VERBOSE && echo "Читаю: $file"

  line=""
  if ! line=$(probe_file "$file"); then
    ((errors++))
    continue
  fi

  dur_s=$(cut -f1 <<<"$line")
  fmt=$(cut -f2 <<<"$line")
  name=$(cut -f3- <<<"$line")

  total_sec=$((10#$total_sec + 10#$dur_s))
  ((count++))

  printf "%09d\t%s\t%s\n" "$dur_s" "${fmt:-}" "$name" >>"$results_file"
done

if [[ $count -eq 0 ]]; then
  echo "Общая длительность: 00:00:00"
  echo " Файлов: 0"
  [[ $errors -gt 0 ]] && echo " Ошибок: $errors (включи -v)"
  exit 0
fi

# Сортировка по первому числовому полю
if [[ "$SORT_KEY" == "d" ]]; then
  sort -k1,1nr "$results_file" > "$results_file.sorted" && mv "$results_file.sorted" "$results_file"
fi

echo "Общая длительность: $(seconds_to_hms "$total_sec")"
echo " Файлов: $count"
[[ $errors -gt 0 ]] && echo " Ошибок: $errors"

echo

if $SHOW_FORMAT; then
  printf "%-10s  %-12s  %s\n" "Длительность" "Формат" "Имя файла"
  printf "%-10s  %-12s  %s\n" "----------"   "------" "---------"
  while IFS=$'\t' read -r s fmt name; do
    hms=$(seconds_to_hms "$s")
    printf "%-10s  %-12s  %s\n" "$hms" "${fmt:-?}" "$name"
  done < "$results_file"
else
  printf "%-10s  %s\n" "Длительность" "Имя файла"
  printf "%-10s  %s\n" "----------" "---------"
  # читаем только 1-е и 3-е поле (имя), пропуская формат
  while IFS=$'\t' read -r s name; do
    hms=$(seconds_to_hms "$s")
    printf "%-10s  %s\n" "$hms" "$name"
  done < <(cut -f1,3- "$results_file")
fi

Главное не проверять что там этот виспер нарасшифровывал Ж)

-- Как понять что статья написана тупым роботом?

-- Он не умеет считать.

https://www.youtube.com/watch?v=R9TnCP2D8HQ

Gemini 2.5 flash (prompt = "Listen carefully to the following audio file. Provide a transcript. Fix errors, make a fine text with good looking paragraphs, without time stamps and diarization (speaker separation). This audio file is a cutted fragment with +5 extra seconds in both directions.") По мне так топ, но есть ИИшные заморочки, размер ответа не больше 30т русских символов, цензура может заблокировать запрос, может зависнуть и вернуть повторы повторы повторы повторы повторы повторы повторы повторы повторы повторы повторы повторы повторы...

Ведьмаку заплатите
Чеканной монетой,
Чеканной монетой.
О-о.
Ведьмаку заплатите,
Зачтётся всё это.
Вау.

Он хоть на край земли отправится готов,
Сразить всех чудовищ, убить всех врагов.

Он эльфов всех прогнал за дальний перевал,
Высокие горы, на дальний привал.

Он бьёт не в бровь, а в глаз,
Был ранен много раз.
Он людям товарищ,
Всегда он за нас.

К чему эта вражда,
Никак я не пойму.
Он нас защищает,
Так налетите ж ему!

Ведьмаку заплатите
Чеканной монетой,
Чеканной монетой.
О-о.
Ведьмаку заплатите,
Зачтётся всё это.
Вау.

Ведьмаку заплатите
Чеканной монетой,
Чеканной монетой.
О-о.
Ведьмаку заплатите,
Зачтётся всё это.
Вау.

Ведьмаку заплатите
Чеканной монетой,
Чеканной монетой.
О-о.
Ведьмаку заплатите,
Зачтётся всё это.
Вау.

Whisper(whisper-large-v3-turbo) короткие записи хорошо понимает, в длинных склонен глотать целые абзацы

Ведьмаку заплатите Он эльфов всех прогнал за дальний перевал Высокие горы на дальний привал Он бьет не вброд, а в глаз, был ранен много раз Он людям товарищ, всегда он за нас Ведьмаку заплатите, зачтется все это Ведьмаку заплатите чеканной монетой Ведьмаку заплатите, зачтется все это вам Ведьмаку заплатите чеканной монетой Чиканым монетой Ведь могу заплатить Зачтется все это

Voxtral новая модель от мистраля (такое же недоразумение как и все их модели)

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

Deepgram хороший коммерческий вариант, принимает файлы любого размера и типа без заморочек, выдает хороший результат с огромной скоростью

неправильно распознал язык, обычные записи он хорошо распознает

Assemblyai (большая модель) примерно такой же как deepgram, без заморочек но за деньги

Ведьмаку заплатите чеканной монетой, чеканной монетой. Ведьмаку заплатите, зачтется всё это вам. Он ходит на край земли, отправиться готов. Сразить всех чудовищ, убить всех врагов. Эльфов всех прогнал за дальний перевал, Высокие горы на дальний прибал. Он бьёт не в брод, а в глаз, Был ранен много раз. Он людям товарищ, Всегда он за нас. Чему эта вражда, Никак я не пойму, Он нас защищает, Так налетишь ему. Ведьмаку заплатите Чеканной монетой, Чеканной монетой, о-о-о Ведьмаку заплатите Зачтется всё это вам Ведьмаку заплатите Чеканной монетой, Чеканной монетой, о-о-о Ведь могу заплатите, зачтется все это. Ведь могу заплатите, чеканы монетой, чеканы монетой. Ведь могу заплатите, зачтется все это.

Из видео обычно получается достать текст, слова, а их уже пересказывать. Открытые модели есть, whisper, voxtral. Смотреть видео без слов вроде никто кроме гугла не умеет. Чисто теоретически можно нарезать его на кадры и прогнать через распознавание картинок, это многие умеют.

Учитывая что источник видео обычно - ютуб, там даже самому распознавать голос не надо, там субтитры почти всегда есть приложенные.

Это в 40 раз дороже чем на опенроутере, по такой цене только цигане продают. Ну и казнокрады ещё. https://openrouter.ai/qwen/qwen3-235b-a22b-2507

Никто вас никуда не сманивает. Можете хоть карандашом в блокноте писать, если вам этого хватает то почему бы и нет.

YandexArt 2.5 не мог обойти imagen3. Никак вообще.

Напоминает вотсап в котором мамочки просят проголосовать за своего ребенка на конкурсе.

Гораздо раньше. В ней написано что давно вымерший гпт3.5 - наше всё.

Бот который эти статьи штампует ни на что не реагирует вообще.

Ллм умеют использовать внешние инструменты но почему то ни в одной нет встроенного калькулятора. Причем нету даже в модных moe у которых куча мелких ллм заточенных под разное внутри, почему даже среди них нет хотя бы простого калькулятора?

Врать для нейросетей это нормально, для живых, например люди с промытыми мозгами сами начинают воспроизводить искаженную реальность, и чем умнее человек тем правдоподобнее у него получается объяснить себе и окружающим почему черное это на самом деле белое.

Для транскрибации через бесплатные API есть

Deepgram (700 часов халявы и регистрация без телефона и карты)

Assemblyai(так же но 100 часов)

whisper (groq дает практически безлимит - 20 часов в сутки или типа того)

gemini (почти безлимит если сделать себе десяток аккаунтов)

voxtral (mistral - почти безлимит)

и есть еще 1 сервис (хз толи микрософт толи гугол, там ограничение 1 минута, крупные записи надо резать на мелкие куски, неудобно но работает нормально https://github.com/Uberi/speech_recognition)

Качество заметно падает при переходе от очень больших к средним и "мелким".

Gemini Pro -> Gemini Flash -> Gemini flash lite

Их размеры неизвестны но скорее всего даже лайт требует 80гб видеопамяти.

На своем сайте в чате он кодит, мягко скажем не очень. Субъективно конечно но что есть.

В тулзах типа aider в бенчмарках его еще нет, но есть kimi k2 и он показывает результат далекий от топов.

Там 100% клон телеграма, в библиотеках для телеграма надо просто апи урл поменять?

Или вообще всё по другому. Ограничения из телеги есть, типа размер сообщения не больше 4к, альтернативно одаренный маркдаун итп?

А сам автомобиль то сколько стоит? 1млн рублей (68 800 – 97 800 ¥)?

Независимые сайты и обзоры товаров?

Это типа ты спрашиваешь у гугла какой телефон лучше в этом сезоне и он должен тебе показать ссылки на страницы мобаил-ревью где Муртазин на гавно исходит пытаясь впихнуть тебе соснулый самсунг вместо айфона?

GPT‑3.5 — это базовая, бесплатная модель нейросети. Она напишет письмо, сформулирует пост, поможет разобраться в сложном термине, даже составит план презентации или статьи. Работает быстро, не имеет ограничений по количеству сессий, но существует лимит на сообщения. Это примерно 40–50 сообщений каждые три часа. Граница контекста у неё около 4 096 токенов (примерно 3 000 слов вместе с ответами). А при очень объёмных обсуждениях модель может терять нить или начать галлюцинировать.

Опять полупереваренный бред от готопы. Доколе?

Можно субтитры делать, которые с позицией на экране.

Information

Rating
2,506-th
Registered
Activity

Specialization

Менеджер технической поддержки
Старший
Git
SQL
Linux
MySQL
PHP
PostgreSQL
Docker