LINUX.ORG.RU

FLV -> WEBM(или mp4) налету

 


0

1

Хочу «налету» отдавать с сервера wemb, исходные файлы в flv
Исходный файл

Input #0, flv, from 'test.flv':
  Duration: 00:40:58.92, start: 1572.590000, bitrate: N/A
    Stream #0.0: Video: h264 (Baseline), yuv420p, 640x480 [PAR 1:1 DAR 4:3], 15 tbr, 1k tbn, 30 tbc
    Stream #0.1: Audio: libspeex, 16000 Hz, 1 channels, s16

Затык в том, что перекодировка грузит очень сильно проц(80%). Что можно сделать? Может битрейд понизить? Хотя делаю -b:v 64k все равно идет 200kbps. Или размер уменьшить?
Делаю так
ffmpeg -i test.flv -vcodec libvpx -acodec copy output.webm

★★★★

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

Ответ на: комментарий от Deleted

Да какой то 2ядерный...VDS
Забыл сказать что хочу подавать источник на stdinput ffmpeg с определенной скорость, так возможно вообще?

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

делать файлы в h264 и отдавать их через флеш, либо как есть в HTML5 в зависимости от возможностей браузера

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

Да какой то 2ядерный...VDS

ну вот, в этом и дело. Сколько там на тех же ядрах крутится процессов - одному админу известно. Так что проц ты положишь, увы.

Забыл сказать что хочу подавать источник на stdinput ffmpeg с определенной скорость, так возможно вообще?

про это не знаю

Deleted
()
Ответ на: комментарий от gobot

Забыл сказать что хочу подавать источник на stdinput ffmpeg с определенной скорость, так возможно вообще?

А смысл? И скорость чего имеется в виду?

Krieger_Od ★★
()

что внутри этих FLV? если там H264 то можно просто перепаковать в другой контейнер. Будет быстрее.

FFSinit ★★
()

Если хочешь в webm, то придется перекодировать в vp8 или vp9, а это операция недешевая. Как уже и советовали выше, лучше запаковать в другой контейнер - mp4, например, и отдавать его.

twentypercentcooler
()
Ответ на: комментарий от gobot

В хроме на андроиде нет флэша

и не надо, оно умеет h264

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

Чем это лучше? Я пробовал, у меня не получилось в mp4 кодировать.

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

Если на stdin ffmpeg подавать данные(flv) с определенной скоростью, то и кодирование будет не так жрать проц, если бы читалось напрямую с файла с диска?

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

Да, там h264, а звук speex или nellymoser. Посмотри в описании темы - я там написал какие кодеки в flv.
В какой контейнер можно перепаковывать, что бы проигрывалось в андроиде в <video>? В mp4 у меня не получается упаковывать...

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

Понимаю... изначально я и хотел так, но у меня ошибка какая то в кодировании

ffmpeg -i test.flv -vcodec copy -acodec libmp3lame  output.mp4

[flv @ 0x15f5b20] invalid stream
[libspeex @ 0x170b8c0] Missing Speex header, assuming defaults.
[flv @ 0x15f5b20] Estimating duration from bitrate, this may be inaccurate

Seems stream 0 codec frame rate differs from container frame rate: 30.00 (30/1) -> 15.00 (30/2)
Input #0, flv, from 'test.flv':
  Duration: 00:40:58.92, start: 1572.590000, bitrate: N/A
    Stream #0.0: Video: h264 (Baseline), yuv420p, 640x480 [PAR 1:1 DAR 4:3], 15 tbr, 1k tbn, 30 tbc
    Stream #0.1: Audio: libspeex, 16000 Hz, 1 channels, s16
File 'output.mp4' already exists. Overwrite ? [y/N] y
[libspeex @ 0x170b8c0] Missing Speex header, assuming defaults.
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf53.21.1
    Stream #0.0: Video: libx264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], q=2-31, 15 tbn, 15 tbc
    Stream #0.1: Audio: libmp3lame, 16000 Hz, 1 channels, s16, 200 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press ctrl-c to stop encoding
[mp4 @ 0x15f6460] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 10 >= 10
av_interleaved_write_frame(): Invalid argument

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

Забыл сказать что хочу подавать источник на stdinput ffmpeg с определенной скорость, так возможно вообще?

       -re (input)
           Read input at native frame rate. Mainly used to simulate a grab device.  or live input stream (e.g. when reading from a file).
           Should not be used with actual grab devices or live input streams (where it can cause packet loss).  By default ffmpeg attempts to
           read the input(s) as fast as possible.  This option will slow down the reading of the input(s) to the native frame rate of the
           input(s). It is useful for real-time output (e.g. live streaming).
ValdikSS ★★★★★
()
Ответ на: комментарий от ValdikSS

Почему?
Получилось на stdin подавать flv и выводить в stdout

ffmpeg -loglevel quiet -report -i - -vcodec libvpx -acodec libvorbis -f webm pipe:1

Нормально работает, после установки более свежей версии ffmpeg(2015 года)

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