web-dev-qa-db-fra.com

Commande FFmpeg pour le codage mpeg-ts

Je viens de commencer à utiliser l'encodeur FFmpeg. J'ai une commande pour encoder des fichiers vidéo dans des conteneurs MP4:

ffmpeg -i input.mp4 \
       -vcodec libx264 -s 426x240 -pix_fmt yuv420p \
       -crf 22 -minrate 200k -bufsize 400k -maxrate 400k -preset medium \
       -b:v 500000 -profile:v baseline -level 3.1 \
       -c:a aac -strict -2 -b:a 64k -ac 2 \
       output_240.mp4

J'ai besoin de la commande correspondante pour le codage MPEG-TS. J'ai cherché cela en ligne, mais je ne pouvais pas obtenir exactement ce que je cherchais car je suis novice dans ce domaine.

2
Fayas B

Comme toujours avec FFmpeg, il y a un certain nombre de choix à faire, et je l'ai réduit un peu plus avant pour donner une réponse claire:

1. Les codecs de votre fichier d'entrée sont pris en charge dans le conteneur TS:

Examinez votre fichier d’entrée avec FFmpeg comme suit:

ffmpeg -i input.mp4

Si le fichier contient des codecs bien pris en charge dans un conteneur TS , par exemple une vidéo H.264 et un son AAC, vous pouvez simplement copier les flux sur:

ffmpeg -i input.mp4 -c copy output.ts

Cela donnera d'excellents résultats, mais vous devrez peut-être modifier cette ligne de commande en fonction de votre utilisation réelle du fichier de sortie (diffusion en continu, périphérique de lecture particulier, etc.).

2. Les codecs de votre fichier d'entrée sont non pris en charge dans un conteneur TS:

Si votre fichier d'entrée contient des codecs qui ne sont pas correctement pris en charge dans un conteneur TS, vous devrez recoder des flux vidéo ou audio, ou les deux. Les codecs par défaut pour FFmpeg et le conteneur TS sont mpeg2video et mp2 sound. Si vous préférez utiliser ces codecs par défaut, vous obtiendrez d'excellents résultats:

ffmpeg -i input.mp4 \
       -c:v mpeg2video -qscale:v 2 \
       -c:a mp2 -b:a 192k \
       output.ts

Cela a certainement donné des résultats assez raisonnables sur mon système et devrait également sur le vôtre ...

3. Vous souhaitez segmenter votre fichier pour HTTP en direct (HLS):

Enfin, vous souhaiterez peut-être créer un fichier TS segmenté avec liste de lecture à utiliser avec HTTP Live Streaming (HLS). Il y a comme toujours plusieurs façons de le faire, mais l'exemple de ligne de commande ci-dessous fonctionnera bien pour les fichiers d'entrée dont les codecs sont pris en charge dans un conteneur TS:

ffmpeg -re -i input.mp4 \
       -codec copy -map 0 \
       -f segment -segment_list playlist.m3u8 \
       -segment_list_flags +live -segment_time 10 \
       out%03d.ts

Si vous souhaitez modifier les codecs du fichier d'entrée, ajoutez simplement les paramètres requis à la place de -codec copy. Je pense que H.264 et AAC sont des codecs populaires pour ce type de diffusion en continu. Beaucoup de place pour expérimenter avec les options de segment qui sont décrites ici ...

Notes:

2
andrew.46