WapStyle » 2022.11.16 09:48

Вопрос возник, чтобы не нагружать часто обращениями в телеге, хранить у себя "пробники файлов", например длительностью 1 минута (для ознакомления)
как например дёрнуть середину файла?
например файл продолжительностью 240 секунд, как вырвать середину файла длительностью например 30 сек.
да знаю есть так

Код:

1
ffmpeg -t 00:30

но тут возьмёт с начала файла...

сходу что в голову пришло (пример 30 секунд)

Код:

1
2
$time = $row['duration']/2;
echo 'Center - '.$time.' || Start - '.($time-15).' || End - '.($time+15);

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
File 233 || Duration - 215 sec
Center - 107.5 || Start - 77.5 || End - 137.5
=========
File 3346 || Duration - 283 sec
Center - 141.5 || Start - 111.5 || End - 171.5
=========
File 127 || Duration - 170 sec
Center - 85 || Start - 55 || End - 115
=========
File 3537 || Duration - 474 sec
Center - 237 || Start - 207 || End - 267
=========
File 3480 || Duration - 230 sec
Center - 115 || Start - 85 || End - 145
=========
File 3445 || Duration - 161 sec
Center - 80.5 || Start - 50.5 || End - 110.5
=========
File 3979 || Duration - 504 sec
Center - 252 || Start - 222 || End - 282
=========
File 1845 || Duration - 448 sec
Center - 224 || Start - 194 || End - 254
=========
File 2786 || Duration - 135 sec
Center - 67.5 || Start - 37.5 || End - 97.5
=========
File 4294 || Duration - 440 sec
Center - 220 || Start - 190 || End - 250

дальше ffmpeg (наверно)

Код:

1
ffmpeg -ss '.($time-15).' -t '.($time+15)
WapStyle » 2022.11.16 13:45

Черновой вариант, но работает  =D

Код:

1
2
3
4
5
6
7
8
9
10
echo 'File '.$row['id'].' || Duration - '.$row['duration'].' sec'.PHP_EOL;
$time = $row['duration']/2;
echo 'Center - '.$time.' || Start - '.($time-30).' || End - '.($time+30).PHP_EOL;
echo '========='.PHP_EOL;
...куча скрытного кода..)))
 
exec('ffmpeg -ss "'.($time-15).'" -t "[тут указываем сколько продолжительность хотим в секундах]" -i "original.mp3" -acodec copy "temp.mp3"');
sleep(3);
exec('ffmpeg -i "temp.mp3" -ar 44100 -ac 2 -ab 128k -y "'.$row['id'].'.mp3"');

результат - резанул ровно по середине, да нужно учесть что треки иногда короткие и длительность уменьшать или вообще не делать "превью" а отдать оригинал

WapStyle » 2022.11.16 15:07

для пробников сойдёт
Добавлено спустя   7 минут  26 секунд:
Результат для заполнения "пробников"

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
echo 'File '.$row['id'].' || Duration - '.$row['duration'].' sec'.PHP_EOL;
$center = $row['duration']/2;
$start = $setup['duration_resize']/2;
if($row['duration'] > 180 AND !file_exists($setup['files_patch'].'time_limit/'.$row['id'].'.mp3') AND $row['size'] < $setup['size_limit'])
{
//скрыто))
 
exec('ffmpeg -ss "'.($center-$start).'" -t "'.$setup['duration_resize'].'" -i "'.$setup['files_patch'].'time_limit/'.$row['id'].'_original.mp3" -acodec copy "'.$setup['files_patch'].'time_limit/'.$row['id'].'_temp.mp3"');
sleep(1);
exec('ffmpeg -i "'.$setup['files_patch'].'time_limit/'.$row['id'].'_temp.mp3" -ar 44100 -ac 2 -ab 128k -y "'.$setup['files_patch'].'time_limit/'.$row['id'].'.mp3"');
unlink($setup['files_patch'].'time_limit/'.$row['id'].'_original.mp3');
unlink($setup['files_patch'].'time_limit/'.$row['id'].'_temp.mp3');
exec('rm -frv '.$setup['files_patch'].'time_limit/cifs*'); //про это не спрашивай, это особенность моего хранилища, засоряет жестяк
sleep(2);
}
}
}
Gemorroj » 2022.11.16 15:26

а зачем sleep?

WapStyle » 2022.11.16 15:34

Gemorroj написал:

команды идут через крон, частый запрос (несколько в секунду) телега начинает тупить, приходится "тормозить"
примерно так "php file.php"
то что выше ни как не взаимодействует с пользователем
таймер так то дао выше ставить, примерно секунд 5, но у меня пусто...так что пока 1 секунда

WapStyle » 2022.11.16 15:47

сейчас пишу код для файлов размером более 20 мб (по коду бота нельзя скачать более 20мб), благо их всего за пол года накопилось 50 штук из 4500

WapStyle » 2022.11.16 15:59

с каждым разом настроек всё больше, подумаю об админке, хотя мне проще в phpmyadmin поменять

WapStyle » 2022.11.16 16:28

Смотри как чётко обрезало, первый оригинал, второй "пробник"

Gemorroj » 2022.11.16 17:55

ну да, и битрейт порезало

WapStyle » 2022.11.16 19:03

Gemorroj написал:

ну да, и битрейт порезало

но ведь для пробника само то) и понял что играет и место мало занимает
Добавлено спустя   7 минут  35 секунд:
А есть плюс в этом всём =)
Лови подкасты https://wapstyle.ru/podcast.mp3 (один трек не более минуты)
не пробовал, но если в плеер добавить URL должно писать название
AIMP проверено, показывает название трека только если в ручную листануть "следующий"
пока некогда php радио развивать))

WapStyle » 2022.11.16 19:28

Gemorroj написал:

ну да, и битрейт порезало

так задумано, снизить размер файлов но сервере, прикинь их 4500 в хорошем качестве, примерно 60 гигов...
но я изначально шёл чтобы у меня ничего не было - сервера телеги (2 бота)
все файлы там, до 20мб, но чтобы не тратить трафик я решил сделать "пробники", наверно логично
да любой может скачать "плейлист" за прошлый день и слушать на 100% качестве
вот бери любой день https://wapstyle.ru/history/ и слушай в хорошем качестве

WapStyle » 2022.12.14 18:02

Давно не заходил, вот часть кода, пашет и не ругается, режет как надо и где надо)

Код:

1
2
3
4
5
6
7
8
9
10
## Ищем середину файла по времени
$center = $row['duration']/2;
$start = $setup['duration_resize']/2;
## Обрезаем лишнее
exec('ffmpeg -ss "'.($center-$start).'" -t "'.$setup['duration_resize'].'" -i "'.$setup['files_patch'].$row['id'].'.mp3" -acodec copy "'.$setup['files_patch'].$row['id'].'_temp.mp3"');
sleep(1);
## Меняем битрейт на 128
exec('ffmpeg -i "'.$setup['files_patch'].$row['id'].'_temp.mp3" -ar 44100 -ac 2 -ab 128k -y "'.$setup['files_patch'].'time_limit/'.$row['id'].'.mp3"');
## Удалить лишнее
unlink($setup['files_patch'].$row['id'].'_temp.mp3');

з.ы.
$setup['duration_resize'] - сколько секунд обрезок будет