Jump to content
Cesbo Community
  • Announcements

    • RadioSintetica

      Information   10/21/18

      Registration on the forum temporarily closed! For support requests, please contacat us: https://cesbo.com/help
      Our community in Telegram: @cesbo_en (English language) , @cesbo_ru (Russian language) , @cesbo_es (Spanish Language)
Telesat

Транскодирование

Recommended Posts

Пожалуйста поделитесь проверенными на практике параметрами для транскодирования MPEG2--> h264 для VLC. У нас проблемма следующая с такими настройками (хотя пробовали и множество других вариантов) :

#transcode{venc=x264{keyint=250,min-keyint=50,bitrate=1200,vbv-maxrate=1200,vbv-bufsize=1200},vcodec=h264,audio-sync,deinterlace,acodec=mp4a,ab=192}

 

битрейт подскакивает в 2-3 раза более нормы и так длится достаточно длительно - может несколько минут , может это из за ошибок в потоке?

 

При транскодировании с помощью ffmpeg всё нормально может работать днями а потом рассинхрон звука-видео , может это тоже знаете как решить?

 

Для FFMPEG используем следующие настройки

-acodec libfaac -ab 192k -ar 48000 -c:v libx264 -b:v 1500k -maxrate 1500k -bufsize 100k -g 125 -deinterlace -f mpegts

 

Заранее спасибо!

Share this post


Link to post
Share on other sites

А не пробовали "скрестить ужа и ежа" ? :) Т.е. в VLC в качестве видеоэнкодера указать ffmpeg: #transcode{venc=ffmpeg{.... Для моих задач это работало, правда транскодированием MPEG2--> h264 я не занимался.

Share this post


Link to post
Share on other sites

У vlc битрейт подскакивет поcле ошибок в потоке mpeg2 я ещё раз в этом убедился, пожалуйста посоветуете какую версию ставить vlc ?

Я ставлю из репозиториев для Ubuntu 12.04 server 64bit. Может надо компилировать из исходников?

Share this post


Link to post
Share on other sites

Из исходников ставьте, из репо начнет тянуть кучу мусора не нужного типа x11 и прочего, оно вам надо на серве ?

А вообще для транскодинга ffmpeg рекомендуют. Сейчас как раз данной задачей начал заниматься.

 

У кого-то есть конфиги  трансрейтинга h.264 HD каналов в меньшую полосу ?

Пробовал запускать для начала вообще без именения   картинка жутко сыпется:

 

  ffmpeg -i udp://@230.1.1.56:1234  -c copy  -f mpegts   "udp://@230.1.1.254:1234?fifo_buffer=10000000&overrun_nonfatal option=1&pkt_size=1316"

ffmpeg version 1.1.3 Copyright (c) 2000-2013 the FFmpeg developers
  built on Feb 27 2013 16:21:15 with gcc 4.7 (Ubuntu/Linaro 4.7.2-2ubuntu1)
  configuration: --enable-gpl --enable-libx264 --enable-libmp3lame --enable-nonfree --disable-yasm
  libavutil      52. 13.100 / 52. 13.100
  libavcodec     54. 86.100 / 54. 86.100
  libavformat    54. 59.106 / 54. 59.106
  libavdevice    54.  3.102 / 54.  3.102
  libavfilter     3. 32.100 /  3. 32.100
  libswscale      2.  1.103 /  2.  1.103
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
 

Input #0, mpegts, from 'udp://@230.1.1.56:1234':
  Duration: N/A, start: 12501.848033, bitrate: 192 kb/s
  Program 6 
    Stream #0:0[0x601]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 1920x1080 [sAR 1:1 DAR 16:9], 25 fps, 50 tbr, 90k tbn, 50 tbc
    Stream #0:1[0x602]: Audio: mp2 ([4][0][0][0] / 0x0004), 48000 Hz, stereo, s16p, 192 kb/s
Output #0, mpegts, to 'udp://@230.1.1.254:1234?fifo_buffer=10000000&overrun_nonfatal option=1&pkt_size=1316':
  Metadata:
    encoder         : Lavf54.59.106
    Stream #0:0: Video: h264 ([27][0][0][0] / 0x001B), yuv420p, 1920x1080 [sAR 1:1 DAR 16:9], q=2-31, 25 fps, 90k tbn, 25 tbc
    Stream #0:1: Audio: mp2 ([4][0][0][0] / 0x0004), 48000 Hz, stereo, 192 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
 

Share this post


Link to post
Share on other sites

робовал запускать для начала вообще без именения   картинка жутко сыпется:

 

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

Share this post


Link to post
Share on other sites

В общем  транскодить получилось вот так:

 

ffmpeg -i udp://@230.1.1.108:1234   -c:v libx264  -crf 21 -b:v 4000k -sws_flags lanczos -s hd720 -r 25  -bufsize 4000k -c:a copy  -f mpegts  "udp://@230.1.1.254:1234?fifo_buffer=500000&overrun_nonfatal_option=1&pkt_size=1316"
 
 
Input #0, mpegts, from 'udp://@230.1.1.108:1234':
  Duration: N/A, start: 73079.243767, bitrate: 384 kb/s
  Program 12104
  No Program
    Stream #0:0[0x144]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 1920x1080 [sAR 1:1 DAR 16:9], 25 fps, 50 tbr, 90k tbn, 50 tbc
    Stream #0:1[0x194](rus): Audio: mp2 ([4][0][0][0] / 0x0004), 48000 Hz, stereo, s16p, 192 kb/s (clean effects)
    Stream #0:2[0x1a8](eng): Audio: mp2 ([4][0][0][0] / 0x0004), 48000 Hz, stereo, s16p, 192 kb/s (clean effects)
[libx264 @ 0x9febbe0] VBV bufsize set but maxrate unspecified, ignored
[libx264 @ 0x9febbe0] using SAR=1/1
[libx264 @ 0x9febbe0] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x9febbe0] profile High, level 3.1
Output #0, mpegts, to 'udp://@230.1.1.254:1234?fifo_buffer=500000&overrun_nonfatal_option=1&pkt_size=1316':
  Metadata:
    encoder         : Lavf54.63.100
    Stream #0:0: Video: h264, yuv420p, 1280x720 [sAR 1:1 DAR 16:9], q=-1--1, 4000 kb/s, 90k tbn, 25 tbc
    Stream #0:1(rus): Audio: mp2 ([4][0][0][0] / 0x0004), 48000 Hz, stereo, 192 kb/s (clean effects)
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> libx264)
  Stream #0:1 -> #0:1 (copy)
 

 

 

Поток 1080p  --> 720p,  звук как есть. С 10М получилось 3М

но при этом i5 4 ядра почти в полках )

 

Было бы интересно узнать другие варианты и результаты ....

Share this post


Link to post
Share on other sites

to  Jovanotti

А рассинхронизации звука.видео не замечали при длительной работе ffmeg ? - изображение начинает отставать даже секунд на 30, но может после суток 2-х работы, у нас просто входящий поток mpeg2 в котором иногда проскакивают ошибки.

 

Так же пож-ста укажите какую версию VLC рекомендуете ставить и как компилировать ( с какими флагами)?

 

 

Спасибо !!

Share this post


Link to post
Share on other sites

также хотелось бы , чтобы в качестве x264 encoder-а  в VLC можно было указывать ffmpeg , сейчас если указываю - то VLC ругается , что ffmpeg не имеет h264 декодера. ffmpeg ставил из исходников. Сам ffmpeg отдельно нормально работает с libx264. Наверное полсе установки ffmpeg с libx264 надо было скомпилировать VLC из исходников?

Share this post


Link to post
Share on other sites

оже раньше транскодил ffmpeg, но потом боссы дали тестить 4caster(на нем и вишу пока).

а мой бывший начальник - еще долго мне вспоминал шо я потерял ту связку ubuntu+ffmpeg -
в которой небыло рассинхрона звука и видео ;-)  .. сигнал - SD-SDI

4caster - нравится, но цена - только для телеканалов, и шото я не осилил как сделать такую красивую картинку как в ffmpeg.
ffmpeg - ubuntu+ffmpeg - мега(бесплатно же), но иметь кучу костылей контролирующиг его работу - не айс.

насчет проца - я уже писал, транскодинг актуален только для своего телеканала, когда их 1-2 SD на один i7.
иначе счета за электричество - разорят.

так-шо ffmpeg и транскодинг, все ОК, но иногда лучше шото брутфорсить,
даже это выгоднее чем тех пара абонентов на канал.

Share this post


Link to post
Share on other sites

оже раньше транскодил ffmpeg, но потом боссы дали тестить 4caster(на нем и вишу пока).

 

а мой бывший начальник - еще долго мне вспоминал шо я потерял ту связку ubuntu+ffmpeg -

в которой небыло рассинхрона звука и видео ;-)  .. сигнал - SD-SDI

 

4caster - нравится, но цена - только для телеканалов, и шото я не осилил как сделать такую красивую картинку как в ffmpeg.

ffmpeg - ubuntu+ffmpeg - мега(бесплатно же), но иметь кучу костылей контролирующиг его работу - не айс.

 

насчет проца - я уже писал, транскодинг актуален только для своего телеканала, когда их 1-2 SD на один i7.

иначе счета за электричество - разорят.

 

так-шо ffmpeg и транскодинг, все ОК, но иногда лучше шото брутфорсить,

даже это выгоднее чем тех пара абонентов на канал.

 

Сколько тянет sd и hd каналов один 4caster? И по цене сколько примерно стоит?

Страничку нашел, там всё красиво расписано, судя по картинке input/output тянет 4 sd или один hd, верно?

Share this post


Link to post
Share on other sites

по 4Caster - у меня с deltacast платой, на которой 4SD.  а внутри 1-2 xeon.

для HD там - нужна другая плата от deltacast.

4SD - тянет OK, можно паралельно мультикаст транскодить.
но  насколько много разных битрейтов на канал, и скоко всего - не проверял.

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

по цене, не знаю. думаю как и все аналогичного класса.

Share this post


Link to post
Share on other sites

На CSTB-2013 одна контора представляла миниатюрную коробочку размером с STB, которая могла транскодить ~20 потоков из MPEG2 в H.264 (и, кажется, наоборот). Цена на это удовольствие озвучивалась в районе 1000$. Сайт конторы - http://sotal-iptv.com/ - но на нём я с ходу искомую коробочку не обнаружил, есть только крупный вариант - http://sotal-iptv.com/ru/transcoder/

Share this post


Link to post
Share on other sites

изображение отстаёт?

 

Отстает... Пока не могу понять в чем дело. Думаю проблема в потери фреймов на некоторых каналах. Кто как победил расинхрон на ffmpeg?

Share this post


Link to post
Share on other sites

После танцев с ffmpeg перешли на  VLC. На i5 стабильно вытягивает 4 каналы  транскодинга mpeg2 > h.264

cvlc udp://@230.1.1.5:1234   --sout '#transcode{deinterlace,vcodec=h264,venc=x264{profile=baseline,level=1,pass=0,keyint=90,preset=medium,tune=zerolatency,bframes=0,ref=1,nocabac,audio-sync}}:udp{mux=ts,dst='230.1.2.5:1234\} --ttl 32

но и с влц не всё так  безоблачно

1) известный баг с утечкой памяти

2) отпадание звуковой  дорожки.

Share this post


Link to post
Share on other sites

Добрый вечер.

А нельзя ли использовать аппаратное транскодирование как тут?

http://nginx-rtmp.blogspot.com/

Думается, распберри потянет один канал 1080i ->720p. Может как-то добавить специальную версию Astra+Gstreamer или даже использовать Raspberry, как USB-dongle ?

 

P.S. Андрей, может присмотритесь к такому решению? К тому-же девайс недорогой.

Share this post


Link to post
Share on other sites

Отстает... Пока не могу понять в чем дело. Думаю проблема в потери фреймов на некоторых каналах. Кто как победил расинхрон на ffmpeg?

Есть такой рецепт: использовать аудио-фильтр aresample. Тогда при дропах на входе или битых данных, вы не получите рассинхрона дорожек. Звук относительно видео будет сжиматься или разжиматься на время пока PTS не сойдутся.

 

Конструкция для транскодирования выглядеть будет примерно так:

 

ffmpeg -loglevel warning -threads 2 -y -i udp://@224.2.1.183:1234?fifo_size=256000&buffer_size=2097152&overrun_nonfatal=1 -map 0:a -strict experimental -dts_delta_threshold 1000 -acodec aac -ac 2 -isync -af aresample=async=1000 -ab 128k -vcodec libx264 -g 75 -keyint_min 75 -f mpegts -vpre main -b:v 1500k -maxrate 1500k -profile main -preset slow -bufsize 7500k -x264opts force-cfr -f mpegts udp://@239.5.4.4:6000?pkt_size=1316&buffer_size=131070&reuse=1&ttl=32

В примере выше транскодируется входной мультикаст в h264 c GOP size в 3 секунды, VBR, максимальный битрейт за 3 секунды будет 1.5МБит\с, но локальные всплески могут быть ого-го. При использовании для HLS такой поток вполне годится, для вещания мультикастом абонентам - не очень, могут срезатьяс верхушки пиков битрейта.

 

Если нужны примеры - спрашивайте.

Share this post


Link to post
Share on other sites

Какие характеристики потока хотите получить на выходе?

 

- битрейт

- частота кадров

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

- частота следования i-кадров

- ориентированность на качество или скорость

- требуется ли делать ресайз

- кодек для звука, частота дискретизации, битрейт аудио

Share this post


Link to post
Share on other sites
hex    7

битрейт до 3-4 мбит, 25 кадр./c, чересстрочная , частота i кадров-15, предпочтительно ориентироваться на качество..  примерно так..

Share this post


Link to post
Share on other sites

Попробуйте так:

 

Берём входной поток:

  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: TightVideo
    Stream #0:0[0x65]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 720x576 [SAR 64:45 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0:1[0x6e](rus): Audio: aac ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 132 kb/s
    Stream #0:2[0x6f](eng): Audio: aac ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 133 kb/s

Из него оставляем видео-дорожку и первую аудио-дорожку, транскодируем в CBR 3670kbit/s:

ffmpeg -threads 2 -y -i 'udp://@224.2.1.136:1234?fifo_size=256000&buffer_size=2097152&overrun_nonfatal=1' \
-map 0:a:0 -map 0:v \
-r 25 -s 720x576 -g 13 -keyint_min 13 \
-strict experimental \
-dts_delta_threshold 1000 \
-vcodec mpeg2video -flags +ilme \
-mbd rd -trellis 2 -cmp 2 -subcmp 2 -bf 2 \
-b:v 3300k -minrate:v 3300k -maxrate:v 3300k -muxrate 3670k -bufsize 1625k \
-acodec mp2 -ac 2 -ar 48000 -ab 128k -isync -af aresample=async=1000 \
-f mpegts 'udp://@239.5.4.4:6000?pkt_size=1316&buffer_size=131070&reuse=1&ttl=32'

получаем:

Output #0, mpegts, to 'udp://@239.5.4.4:6000?pkt_size=1316&buffer_size=131070&reuse=1&ttl=32':
  Metadata:
    encoder         : Lavf55.7.100
    Stream #0:0(rus): Audio: mp2, 48000 Hz, stereo, s16, 128 kb/s
    Stream #0:1: Video: mpeg2video, yuv420p, 720x576 [SAR 64:45 DAR 16:9], q=2-31, 3300 kb/s, 90k tbn, 25 tbc
Stream mapping:
  Stream #0:1 -> #0:0 (aac -> mp2)
  Stream #0:0 -> #0:1 (h264 -> mpeg2video)

Так же net.core.rmem_max и net.core.rmem_default следует задать побольше

Share this post


Link to post
Share on other sites
hex    7

 

ffmpeg -threads 2 -y -i 'udp://@239.1.0.45:1234?fifo_size =256000&buffer_size=2097152&overrun_nonfatal=1' \

> -map 0:a:0 -map 0:v \
> -r 25 -s 720x576 -g 13 -keyint_min 13 \
> -strict experimental \
> -dts_delta_threshold 1000 \
> -vcodec mpeg2video -flags +ilme \
> -mbd rd -trellis 2 -cmp 2 -subcmp 2 -bf 2 \
> -b:v 3300k -minrate:v 3300k -maxrate:v 3300k -muxrate 3670k -bufsize 1625k \
> -acodec mp2 -ac 2 -ar 48000 -ab 128k -isync -af aresample=async=1000 \
> -f mpegts 'udp://@239.5.4.4:6000?pkt_size=1316&buffer_size=131070&reuse=1&ttl= 32'
 
ffmpeg version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright © 2000-2013 the Libav                                 developers
  built on Apr  2 2013 17:02:36 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future                                 release. Please use avconv instead.
[h264 @ 0x937f40] non-existing PPS referenced
[h264 @ 0x937f40] non-existing PPS 0 referenced
[h264 @ 0x937f40] decode_slice_header error
[h264 @ 0x937f40] no frame!
[h264 @ 0x937f40] non-existing PPS referenced
[h264 @ 0x937f40] non-existing PPS 0 referenced
[h264 @ 0x937f40] decode_slice_header error
[h264 @ 0x937f40] no frame!
[h264 @ 0x937f40] non-existing PPS referenced
[h264 @ 0x937f40] non-existing PPS 0 referenced
[h264 @ 0x937f40] decode_slice_header error
[h264 @ 0x937f40] no frame!
[h264 @ 0x937f40] mmco: unref short failure
[mpegts @ 0x91c7a0] max_analyze_duration reached
[mpegts @ 0x91c7a0] Estimating duration from bitrate, this may be inaccurate
 
Seems stream 0 codec frame rate differs from container frame rate: 50.00 (50/1)                                 -> 50.00 (50/1)
Input #0, mpegts, from 'udp://@239.1.0.45:1234?fifo_size=256000&buffer_size=2097                                152&overrun_nonfatal=1':
  Duration: N/A, start: 61132.593756, bitrate: 144 kb/s
  Program 92
  Program 901
  Program 903
  Program 906
  Program 907
  Program 908
  Program 909
  Program 910
  Program 911
  Program 912
  Program 913
    Stream #0.0[0x779]: Video: h264 (Main), yuv420p, 704x576 [PAR 16:11 DAR 16:9                                ], 25.80 fps, 50 tbr, 90k tbn, 50 tbc
    Stream #0.1[0xb61](rus): Audio: mp2, 48000 Hz, mono, s16, 64 kb/s
    Stream #0.2[0xf49](eng): Audio: mp2, 48000 Hz, mono, s16, 80 kb/s
  Program 914
  Program 915
  Program 916
  Program 917
Unrecognized option 'af'
Failed to set value 'aresample=async=1000' for option 'af'
 

а какую версию ffmpeg используете и с какими ключами собирать  ?

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×