LINUX.ORG.RU
ФорумTalks

Coub закрывается

 ,


0

1

После полутора лет безуспешных попыток сделать сайт прибыльным и 4 месяцев попыток продать за $750 000 (https://vc.ru/services/330011-komitet-obyavil-o-planah-prodat-servis-korotkih-video-coub) нынешние владельцы решили закрыть coub.com с 1 апреля (https://vc.ru/services/380322-servis-korotkih-video-coub-zakroetsya-1-aprelya-2022-goda).

Имхо, не выдержали конкуренции с ТикТоком.

Если у кого-то есть там любимое видео-аудио, ещё есть время скачать. yt-dlp в помощь.

UPDATE: В итоге сайт решили не закрывать. Обсуждение скриптов для скачивания — ниже.

★★★★★

Последнее исправление: question4 (всего исправлений: 1)

Имхо, не выдержали конкуренции с ТикТоком.

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

Все и так понимают что просто помойка так и не смогла сделать вид что она не помойка. Нелепый, нецелесообразный ютубо-подобный обрезок.

любимое видео-аудио

мда

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

помойка

Как и Тикток :)

Нелепый, нецелесообразный ютубо-подобный обрезок.

Что не мешает Тиктоку теснить Ютуб :)

question4 ★★★★★
() автор топика

туда ему и дорога

burato ★★★★★
()

yt-dlp в помощь

он не зацикливает видео, лучше искать специализированные скрипты

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

Lordwind ★★★★★
()
Последнее исправление: Lordwind (всего исправлений: 1)
Ответ на: комментарий от Lordwind

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

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

Heretique
()
Ответ на: комментарий от Lordwind

он не зацикливает видео

Он позволяет скачать отдельно аудио- и видео- дорожки? (Вроде, да.) Если да, то просто скачай по-быстрому и потом синхронизируй и лупь, как душе угодно.

чот я не распарсил улюлюканье

Большая часть кубов — мусор. Кроме того, сайт в прошлом активно апгрейдился за нововведениями флеша и Хрома, поэтому флеш-плагин с Фаерфоксом за ним не успевали. Отдельные шедевры, которые я там встречал, хороши и без зацикливания — на Ютубе. Или даже без видео.

Тему я создал для ценителей, вкус которых отличается от моего. Чтобы не потеряли какой-нибудь старый шедевр.

question4 ★★★★★
() автор топика
Ответ на: комментарий от Lordwind

Не помню уже. Всё осталось на старом компьютере, который руки не доходят реанимировать.

question4 ★★★★★
() автор топика

Coub закрывается

Жаль. Coub нравится в отличии от TikTok-а.
Может кто знает мультимедийный контейнер, который может реализовать фишку Coub-а:

vs=videostream

vs *  N раз
audiostream
?

superuser ★★★★★
()
Последнее исправление: superuser (всего исправлений: 3)

однострочник готов

which mpv && which wget && (fa="/tmp/a.mp3";fv="/tmp/v.mp4";uv="https://coub-anubis-a.akamaized.net/coub_storage/coub/simple/cw_file/ac7199ba914/6ba7bc7f3d6c15e1f38dd/muted_mp4_huge_size_1567686601_muted_huge.mp4";ua="https://coub-anubis-a.akamaized.net/coub_storage/coub/simple/cw_looped_audio_high/9994209850c/040ab8fc893a9740e6de5/1605397547_high_1470742407_high.mp3"; [ -f ${fv} ] || wget -O ${fv} ${uv};[ -f ${fa} ] || wget -O ${fa} ${ua}; mpv --volume=0 --loop=inf ${fv} & pidv=$! ; mpv ${fa} ; kill ${pidv})
может грабилка есть у кого готовая?

superuser ★★★★★
()

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

chenbr0
()
Ответ на: комментарий от Im_not_a_robot

Они вроде убрали плашку и теперь не закрывается.

Таки да. До сих пор работают.

Интересно, как? Они писали, что тратят на сайт полтора миллиона долларов в год.

question4 ★★★★★
() автор топика

Какой же ты душный

neocrust ★★★★★
()
Ответ на: комментарий от Im_not_a_robot

Список понравившихся видео внезапно опустел, примерно когда 1 апреля наступило. Если бы они не закрывались, какой был смысл удалять информацию о «лайках»?

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

i-rinat ★★★★★
()
Ответ на: комментарий от darkenshvein

Выше написали. Отменили закрытие почему-то.

question4 ★★★★★
() автор топика
4 декабря 2022 г.
Ответ на: комментарий от superuser

Нужен wget jq ffmpeg

#!/bin/bash

[ -z "$1" ] && echo "$0 url" && exit 1

S="${1##*/}"
S="${S%\?*}"
TS="${TMP:-tmp}"
[ -d "$TS" ] || mkdir "$TS" || exit 1
TS="$TS/$S"
[ -e "$TS" ] || wget -O "$TS" "$1" || exit 1

# sed -ne '/^{.*abuses.*}$/p' "$TS" |\

sed -e "1,/<script id='coubPageCoubJson' type='text\/json'>/d" -e "/^<\/script>/,\$d" "$TS" |\
  jq .file_versions.html5.video.higher.url,.file_versions.html5.audio.high.url,.title |\
  tr -d '"' | (
  read V; read A; read T;
  [ -z "$V" -o -z "$A" -o -z "$T" ] && echo "Bad coub" exit 1
  VE="${V##*.}"
  AE="${A##*.}"
  [ -f "${TS}.${VE}" ] || wget -q -Y off -c -O "${TS}.${VE}" "$V" || exit 1
  [ -f "${TS}.${AE}" ] || wget -q -Y off -c -O "${TS}.${AE}" "$A" || exit 1
  T="`echo $T | tr -s '/&$#;* \"\`'\' _`"
  [ -f "${S}_${T}.mp4" ] || \
  ffmpeg -stream_loop -1 -i "${TS}.${VE}" -i "${TS}.${AE}" -shortest \
        -c:v copy -map 0:v:0 -c:a copy -map 1:a:0 -y "${S}_${T}.mp4" || exit 1
  echo OK
)
vel ★★★★★
()

Очень бедный набор реакций, очень. Ну вот как без какашки сказать, что это ненужно?

Придется по-дедовски: ненужно.

Nervous ★★★★★
()
Ответ на: комментарий от ya-betmen

Сайт времён расцвета флеша. Можно было залить отдельно видео и звук, и он их объединял и крутил в цикле. Длина могла не совпадать. Я к нему потерял интерес, когда он перестал поддерживать нетскейповский плагин. Как сейчас — не знаю, но он на HTML5.

question4 ★★★★★
() автор топика
Ответ на: комментарий от Nervous

Кому-то ненужно, а кому-то ностальгия.

question4 ★★★★★
() автор топика
4 февраля 2023 г.
Ответ на: комментарий от vel

Переделал т.к. в таком виде компактность теряется.
Зависимости: wget jq mpv

#!/bin/bash

MSG() { echo -e "\e[32m$@\e[0m"; }
ERR() { echo -e "\e[31mERROR: $@\e[0m" >&2; exit 1; }

usage(){
echo -e 'Use: coub [-h] [-l Num] source

Options:
	-h	- Help and exit;
	-l	- repeat audio Num times or inf for infinity;
	source	- url | id | file.mp4

Examples:
	coub https://coub.com/view/38yafx
	coub ~/COUB/Don_t_be_egoistic
	coub -l inf 38yafx
'
}

makedesktop(){
ddf="${HOME}/.local/share/applications"
desctopfile="$ddf/coub.desktop"
[ -e "$desctopfile" ] || \
( mkdir -p "$ddf" && \
echo -e '[Desktop Entry]
Encoding=UTF-8
Type=Application
Exec=setsid coub %f
Name=COUB player
Icon=video
' > $desctopfile )
}

CHECKOPT() {
while getopts ":hl:" opt_name
do
  case "$opt_name" in
	"h") usage; exit 2 ;;
	"l") loop=${OPTARG} ;;
	":") usage; exit 3 ;;
	"?") echo "Unknown option: '-$OPTARG'"; usage; exit 4 ;;
  esac
done
}

play(){
[ -n "$loop" ] || loop=1
( mpv --volume=0 --loop=inf "$FV" && kill -9 -$$ ) & mpv --loop=$loop "$FA"; kill -9 -$$
}

playfile(){
#extension="${FV##*.}"
name="${FV%.*}"
FA=$name.mp3
[ -e "$FA" ] && play
ERR "Audio not found."
}

makedesktop
CHECKOPT "$@"
shift "$((OPTIND-1))"
[ -z "$1" ] && usage && exit 1

# FILE ?
FV=$(readlink -e "$1") && MSG "Play file..." && playfile

# ID or URL ?
ID="${1##*/}"
ID="${ID%\?*}"
MSG "ID=$ID"

DL="${HOME}/COUB" # storage for links
DD="$DL/DATA" # storage for media
[ -w "$DD" ] || mkdir "$DD" || ERR "Storage not writable."

FV="$DD/$ID.mp4"
FV=$(readlink -e "$FV")  && MSG "Play from storage..." && playfile

# download
TS="${TMP:-/tmp/coub.$USER}"
[ -d "$TS" ] || mkdir "$TS" || exit 3

TS="$TS/$ID"
# echo "TS="$TS
[ -e "$TS" ] || wget -q -O "$TS" "https://coub.com/view/$ID" || ERR "download html"

# sed -ne '/^{.*abuses.*}$/p' "$TS" |\
sed -e "1,/<script id='coubPageCoubJson' type='text\/json'>/d" -e "/^<\/script>/,\$d" "$TS" |\
  jq .file_versions.html5.video.higher.url,.file_versions.html5.audio.high.url,.title |\
  tr -d '"' | (
  read V; read A; read T;
  [ -z "$V" -o -z "$A" -o -z "$T" ] && ERR "Bad coub"
  VE="${V##*.}" # video extension
  AE="${A##*.}" # audio extension

  FV="$DD/$ID.$VE"
  FA="$DD/$ID.$AE"

  [ -f "$FV" ] || wget -q -Y off -c -O "$FV" "$V" || ERR "download video."
  [ -f "$FA" ] || wget -q -Y off -c -O "$FA" "$A" || ERR "download audio."
  T="`echo $T | tr -s '/&$#;* \"\`'\' _`"
  ln -s $FV "$DL/$T"
  MSG $(ls -l "$DL/$T")

play
)

superuser ★★★★★
()
Ответ на: комментарий от superuser

мелкий баг поправил:

#!/bin/bash

MSG() { echo -e "\e[32m$@\e[0m"; }
ERR() { echo -e "\e[31mERROR: $@\e[0m" >&2; exit 1; }

usage(){
echo -e 'Use: coub [-h] [-l Num] source

Options:
	-h	- Help and exit;
	-l	- repeat audio Num times or inf for infinity;
	source	- url | id | file.mp4

Examples:
	coub https://coub.com/view/38yafx
	coub ~/COUB/Don_t_be_egoistic
	coub -l inf 38yafx
'
}

makedesktop(){
ddf="${HOME}/.local/share/applications"
desctopfile="$ddf/coub.desktop"
[ -e "$desctopfile" ] || \
( mkdir -p "$ddf" && \
echo -e '[Desktop Entry]
Encoding=UTF-8
Type=Application
Exec=setsid coub %f
Name=COUB player
Icon=video
' > $desctopfile )
}

CHECKOPT() {
while getopts ":hl:" opt_name
do
  case "$opt_name" in
	"h") usage; exit 2 ;;
	"l") loop=${OPTARG} ;;
	":") usage; exit 3 ;;
	"?") echo "Unknown option: '-$OPTARG'"; usage; exit 4 ;;
  esac
done
}

play(){
[ -n "$loop" ] || loop=1
( mpv --volume=0 --loop=inf "$FV" && kill -9 -$$ ) & mpv --loop=$loop "$FA"; kill -9 -$$
}

playfile(){
#extension="${FV##*.}"
name="${FV%.*}"
FA=$name.mp3
[ -e "$FA" ] && play
ERR "Audio not found."
}

makedesktop
CHECKOPT "$@"
shift "$((OPTIND-1))"
[ -z "$1" ] && usage && exit 1

# FILE ?
FV=$(readlink -e "$1") && MSG "Play file..." && playfile

# ID or URL ?
ID="${1##*/}"
ID="${ID%\?*}"
MSG "ID=$ID"

DL="${HOME}/COUB" # storage for links
DD="$DL/DATA" # storage for media
[ -w "$DD" ] || mkdir -p "$DD" || ERR "Storage not writable."

FV="$DD/$ID.mp4"
FV=$(readlink -e "$FV")  && MSG "Play from storage..." && playfile

# download
TS="${TMP:-/tmp/coub.$USER}"
[ -d "$TS" ] || mkdir "$TS" || exit 3

TS="$TS/$ID"
# echo "TS="$TS
[ -e "$TS" ] || wget -q -O "$TS" "https://coub.com/view/$ID" || ERR "download html"

# sed -ne '/^{.*abuses.*}$/p' "$TS" |\
sed -e "1,/<script id='coubPageCoubJson' type='text\/json'>/d" -e "/^<\/script>/,\$d" "$TS" |\
  jq .file_versions.html5.video.higher.url,.file_versions.html5.audio.high.url,.title |\
  tr -d '"' | (
  read V; read A; read T;
  [ -z "$V" -o -z "$A" -o -z "$T" ] && ERR "Bad coub"
  VE="${V##*.}" # video extension
  AE="${A##*.}" # audio extension

  FV="$DD/$ID.$VE"
  FA="$DD/$ID.$AE"

  [ -f "$FV" ] || wget -q -Y off -c -O "$FV" "$V" || ERR "download video."
  [ -f "$FA" ] || wget -q -Y off -c -O "$FA" "$A" || ERR "download audio."
  T="`echo $T | tr -s '/&$#;* \"\`'\' _`"
  ln -s $FV "$DL/$T"
  MSG $(ls -l "$DL/$T")

play
)

superuser ★★★★★
()
Последнее исправление: superuser (всего исправлений: 1)
Ответ на: комментарий от question4

Что не мешает Тиктоку теснить Ютуб :)

теснит не платформа, а дебилы, которые делают контент для платформы. 10 лет назад большинство дебилов осело в ютубах. сейчас это тикток… ждем очередную помойку.

usi_svobodi
()
Ответ на: комментарий от superuser

fixwindow.patch

--- a/coub
+++ b/coub
@@ -46,7 +46,7 @@
 
 play(){
 [ -n "$loop" ] || loop=1
-( mpv --volume=0 --loop=inf "$FV" && kill -9 -$$ ) & mpv --loop=$loop "$FA"; kill -9 -$$
+( mpv --volume=0 --loop=inf "$FV" && kill -9 -$$ ) & mpv --force-window=no --loop=$loop "$FA"; kill -9 -$$
 }
 
 playfile(){

superuser ★★★★★
()
Последнее исправление: superuser (всего исправлений: 1)

fixrepeatcont.patch

--- a/coub
+++ b/coub
@@ -45,7 +45,7 @@
 }
 
 play(){
-[ -n "$loop" ] || loop=1
+[ -n "$loop" ] || loop=0
 ( mpv --volume=0 --loop=inf "$FV" && kill -9 -$$ ) & mpv --force-window=no --loop=$loop "$FA"; kill -9 -$$
 }
 

superuser ★★★★★
()
Последнее исправление: superuser (всего исправлений: 2)

можно в продакшен:

#!/bin/bash

MSG() { echo -e "\e[32m$@\e[0m"; }
ERR() { echo -e "\e[31mERROR: $@\e[0m" >&2; exit 1; }

usage(){
echo -e 'Use: coub [-h] [-l Num] source

Options:
	-h	- Help and exit;
	-l	- repeat audio Num times or inf for infinity;
	source	- url | id | file.mp4

Examples:
	coub https://coub.com/view/38yafx
	coub ~/COUB/Don_t_be_egoistic
	coub -l inf 38yafx
'
}

makedesktop(){
ddf="${HOME}/.local/share/applications"
desctopfile="$ddf/coub.desktop"
[ -e "$desctopfile" ] || \
( mkdir -p "$ddf" && \
echo -e '[Desktop Entry]
Encoding=UTF-8
Type=Application
Exec=setsid coub %f
Name=COUB player
Icon=video
' > $desctopfile )
}

CHECKOPT() {
while getopts ":hl:" opt_name
do
  case "$opt_name" in
	"h") usage; exit 2 ;;
	"l") loop=${OPTARG} ;;
	":") usage; exit 3 ;;
	"?") echo "Unknown option: '-$OPTARG'"; usage; exit 4 ;;
  esac
done
}

play(){
[ -n "$loop" ] || loop=0
( mpv --volume=0 --loop=inf "$FV" && kill -9 -$$ ) & mpv --force-window=no --loop=$loop "$FA"; kill -9 -$$
}

playfile(){
#extension="${FV##*.}"
name="${FV%.*}"
FA=$name.mp3
[ -e "$FA" ] && play
ERR "Audio not found."
}

makedesktop
CHECKOPT "$@"
shift "$((OPTIND-1))"
[ -z "$1" ] && usage && exit 1

# FILE ?
FV=$(readlink -e "$1") && MSG "Play file..." && playfile

# ID or URL ?
ID="${1##*/}"
ID="${ID%\?*}"
MSG "ID=$ID"

DL="${HOME}/COUB" # storage for links
DD="$DL/DATA" # storage for media
[ -w "$DD" ] || mkdir -p "$DD" || ERR "Storage not writable."

FV="$DD/$ID.mp4"
FV=$(readlink -e "$FV")  && MSG "Play from storage..." && playfile

# download
TS="${TMP:-/tmp/coub.$USER}"
[ -d "$TS" ] || mkdir "$TS" || exit 3

TS="$TS/$ID"
# echo "TS="$TS
[ -e "$TS" ] || wget -q -O "$TS" "https://coub.com/view/$ID" || ERR "download html"

# sed -ne '/^{.*abuses.*}$/p' "$TS" |\
sed -e "1,/<script id='coubPageCoubJson' type='text\/json'>/d" -e "/^<\/script>/,\$d" "$TS" |\
  jq .file_versions.html5.video.higher.url,.file_versions.html5.audio.high.url,.title |\
  tr -d '"' | (
  read V; read A; read T;
  [ -z "$V" -o -z "$A" -o -z "$T" ] && ERR "Bad coub"
  VE="${V##*.}" # video extension
  AE="${A##*.}" # audio extension

  FV="$DD/$ID.$VE"
  FA="$DD/$ID.$AE"

  [ -f "$FV" ] || wget -q -Y off -c -O "$FV" "$V" || ERR "download video."
  [ -f "$FA" ] || wget -q -Y off -c -O "$FA" "$A" || ERR "download audio."
  T="`echo $T | tr -s '/&$#;* \"\`'\' _`"
  ln -s $FV "$DL/$T"
  MSG $(ls -l "$DL/$T")

play
)

superuser ★★★★★
()
Ответ на: комментарий от superuser

addsimpleplay.patch

--- a/coub
+++ b/coub
@@ -53,8 +53,8 @@
 #extension="${FV##*.}"
 name="${FV%.*}"
 FA=$name.mp3
-[ -e "$FA" ] && play
-ERR "Audio not found."
+[ -e "$FA" ] && play || MSG "Play simple video..." && mpv "$FV"
+exit 0
 }
 
 makedesktop

superuser ★★★★★
()

В продолжение Качалка COUB для вашего ПеКа (комментарий):

$ link=https://coub.com/view/3037vc

$ ffmpeg -loglevel quiet -stream_loop -1 -i "$(yt-dlp -g -f bv $link)" -stream_loop -1 -i "$(yt-dlp -g -f ba $link)" -c copy -f mpegts - | mpv -


Осталось придумать/реализовать перетаскивание coub-ссылки на открытое окно плеера. Во всяком случае, с ютубом я именно так привык взаимодействовать. )
С bash не знаю, реализуемо ли, а вот lua является встроенной фичей mpv (~/.config/mpv/scripts). Может что скажет @LINUX-ORG-RU. :)

krasnh ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.