2017-06-06 1 views
0

J'essaie de convertir un fichier source VBR SPTS MPEG-2 TS en CBR en utilisant ffmpeg. Le code J'utilise est le suivant:ffmpeg VBR -> Conversion CBR et streaming de fichiers vidéo MPEG-2 TS

#!/bin/bash 

pkill ffmpeg 

ffmpeg \ 
     -re -i source.ts -c copy \ 
     -muxrate 18000K \ 
     -f mpegts \ 
     udp://destination_ip:1234?pkt_size=1316 

La source bitrate VPID est ~ 10Mbps et l'APID est 296Kbps. Donc, d'après ce que je comprends, ce code devrait fournir 18 Mbps CBR où la différence entre le muxrate et le bitrate de tous les PID est rempli avec des paquets nuls.

Le problème est que la sortie est loin d'être parfaite. Le débit global est au mieux semi-CBR. Il se situe entre 12 Mbps et 15 Mbps et je vois beaucoup de précision de PCR et d'erreurs de répétition de PCR ainsi que des erreurs CC à la fois sur le VPID et APID.

Répondre

1

Quelques idées:

  • assurez-vous que vous avez une version récente de ffmpeg parce qu'à un moment donné il y avait un bug qui foiré insertion PCR lors de la copie de flux
  • si vous voulez une sortie UDP constante, vous devez utilisez l'option bitrate comme:

    -flush_packets 0 -f mpegts "udp://destination_ip:1234?pkt_size=1316&bitrate=18000000" 
    
  • UDP est un protocole non fiable et vous risquez de rencontrer des pertes de paquets (malheureusement, le bitrate option ne fonctionne que pour UDP pour l'instant AFAIK)
  • si vous avez une connexion dédiée, mais encore l'expérience des erreurs CC vérifier la destination OS max tailles de tampon UDP et assurez-vous qu'il peut gérer 18 Mbps
+0

Hmm, ma version de ffmpeg est 2.8.11-0ubuntu0.16.04.1. Demain je peux essayer d'installer la dernière version de la source. Mais avec ma version actuelle, je n'ai aucun bourrage et le débit fluctue en grande partie. J'ai réussi à obtenir de meilleurs résultats en utilisant tsplay cependant. Et diffuser le même fichier TS génère en réalité moins d'erreurs de PCR. –

+0

@ GeorgEStoyanov Si vous voulez vérifier rapidement la dernière sans compiler, essayez une version [statique] récente (https://johnvansickle.com/ffmpeg/). – LordNeckbeard

+0

@ GeorgEStoyanov si vous voulez faire vrai CBR H.264 au lieu d'insérer des paquets NULL il y a une autre façon. – aergistal

0
  1. préciser -minrate et -maxrate aussi.
  2. utilisez -bufsize plus grand que bitrate.
  3. valeur -muxrate valeur comme bufsize.

La dernière commande:

ffmpeg \ 
    -re -i source.ts \ 
    -b:v 10500k \ 
    -minrate 10500k \ 
    -maxrate 10500k \ 
    -bufsize 18000k \ 
    -muxrate 18000k \ 
    -f mpegts \ 
    udp://destination_ip:1234?pkt_size=1316 
+0

@entrophy, merci pour votre commentaire, je vais le tester et partager mes conclusions. –