FFmpeg ile Helix Sunucusu için multi-bitrate MP4 dosyalarını kesme


2

Video On Demand (çok bit oranlı) İçeriğini izleyicilerimize dağıtmak için Helix Sunucusu kullanıyoruz. Bu, birden fazla video akışı ve bir ses akışı içeren bir MP4 dosyası olduğu anlamına gelir. MP4 dosyalarımızın kaynağı Helix Producer'dır (raw videoyu bir MP4 dosyasına kodlar).

Helix Sunucusu, doğrudan Helix Producer'dan MP4 dosyasını kullanırsak, dosya içindeki birden fazla video akışını tanır. Bunun için FFprobe çıkışı:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '..\..\validate\20140225095504.mp4':
  Metadata:
    major_brand     : 3gr6
    minor_version   : 0
    compatible_brands: 3gr63gp63gg63gp5isom
    creation_time   : 2014-02-25 08:55:04
  Duration: 01:35:54.14, start: 0.000000, bitrate: 1051 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 568x320, 285 kb/s, 23.80 fps, 25 tbr, 1k tbn, 50 tbc (default)
    Metadata:
      handler_name    : Video Stream
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 47 kb/s (default)
    Metadata:
      handler_name    : Audio Stream
    Stream #0:2(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 568x320, 653 kb/s, 23.80 fps, 25 tbr, 1k tbn, 50 tbc (default)
    Metadata:
      handler_name    : Video Stream
    Stream #0:3(und): Data: none (rtp  / 0x20707472), 17 kb/s (default)
    Metadata:
      handler_name    : Video Stream
    Stream #0:4(und): Data: none (rtp  / 0x20707472), 8 kb/s (default)
    Metadata:
      handler_name    : Audio Stream
    Stream #0:5(und): Data: none (rtp  / 0x20707472), 31 kb/s (default)
    Metadata:
      handler_name    : Video Stream
Unsupported codec with id 0 for input stream 3
Unsupported codec with id 0 for input stream 4
Unsupported codec with id 0 for input stream 5

Ancak dosyayı kesmemiz gerekiyor - birden fazla video akışını saklamak için FFmpeg kullanıyoruz:

ffmpeg.exe -i ..\..\validate\20140225095504.mp4 -map 0:0 -map 0:1 -map 0:2 -acodec copy -vcodec copy -ss 00:30:00 -t 00:03:00 -movflags faststart+rtphint out.mp4

Sorunumuz burada başlıyor. Helix Sunucusu artık farklı video akışlarını tanımıyor ve sadece birincisini müşteriye sunuyor. FFprobe bana yeni dosya hakkında şunları söyledi:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'out.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.34.101
  Duration: 00:03:00.00, start: 0.000000, bitrate: 2096 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 568x320, 286 kb/s, 23.87 fps, 25 tbr, 16k tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 47 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
    Stream #0:2(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 568x320, 655 kb/s, 23.87 fps, 25 tbr, 16k tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:3(eng): Data: none (rtp  / 0x20707472), 335 kb/s
    Metadata:
      handler_name    : HintHandler
    Stream #0:4(eng): Data: none (rtp  / 0x20707472), 3 kb/s
    Metadata:
      handler_name    : HintHandler
    Stream #0:5(eng): Data: none (rtp  / 0x20707472), 762 kb/s
    Metadata:
      handler_name    : HintHandler
Unsupported codec with id 0 for input stream 3
Unsupported codec with id 0 for input stream 4
Unsupported codec with id 0 for input stream 5

Ben zaten -movflags seçenekleri ve -rtpflag seçeneklerinin kayda değer miktarda kombinasyonunu denedim. Ama hiçbiri yardım etmedi.

ekran görüntüsü

Daha sonra major_brand'ı mp4box ile ayarlamaya çalıştım:

mp4box -brand 3gr6 out.mp4

ve mp4box ile ipucu parçaları oluşturmak için:

mp4box -hint out.mp4

Ama sıkıştım.

Çok bit hızı olan MP4 dosyaları ile birlikte Helix Sunucusu tecrübesi olan var mı? Veya MP4 dosyalarını kesip birleştirmek için başka yollar var mı?


Selam Florian. Aynı sorunla karşı karşıya kaldığınızda ne yaptığını öğrenmek istiyorum.
Behnam

Yanıtlar:


1

sadece ilk 3 parçanın haritasını çıkarıyorsunuz.

ffmpeg.exe -i ..\..\validate\20140225095504.mp4 -map 0:0 -map 0:1 -map 0:2 ...

Normalde çalışması gerekir, ancak 5 parçanın tümünü eşlemeye çalıştınız mı?

Ayrıca, çıktı dosyanızdaki meta verilerin değiştiğini de farkettim.

Original: handler_name    : Video Stream
Output:   handler_name    : VideoHandler

Ses parçaları için aynı. Kullanmaya -map_metadatave orijinal dosyadaki gibi ayarlamaya çalışın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.