ffmpeg: Ausgabe von MPEG-Dateien mit einem einzigen Programm, das 1 Audio und 3 Video enthält

ffmpeg: Ausgabe von MPEG-Dateien mit einem einzigen Programm, das 1 Audio und 3 Video enthält

Ich versuche, einen simulierten Live-HLS/DASH-Server mit dem Äquivalent der folgenden Kette zu erstellen:

tsplay -loop multi_resolution.ts | shaka_packager | nginx

Das Problem besteht darin, die Datei „multi_resolution.ts“ zu erstellen: Sie muss ein einzelnes Programm mit 1 Audio- und 3 Video-PIDs enthalten, jeweils einen für 720p, 480p und 360p. Warum? Weil shaka_packager es so braucht.

Ich glaube, ich bin verwirrt, wie ich die transkodierten Streams der Ausgabedatei zuordnen soll. Hier der nicht funktionierende Befehl, mit dem ich zu kämpfen hatte:

ffmpeg -i "big_buck_bunny_1080p.mov" -threads 16 \
    -c:a aac -ac 2 -b:a:0 128k \
    -c:v libx264 -pix_fmt yuv420p -profile:v high -level 4.0 -preset veryslow -tune film \
        -vsync cfr -x264-params "nal-hrd=cbr" \
        -b:v:1 5000k -minrate 2000k -maxrate 2000k -bufsize 4000k -g 30 -s 1280x720 \
    -c:v libx264 -pix_fmt yuv420p -profile:v high -level 4.0 -preset veryslow -tune film \
        -vsync cfr -x264-params "nal-hrd=cbr" \
        -b:v:2 1500k -minrate 1000k -maxrate 1000k -bufsize 2000k -g 30 -s 854x480 \
    -c:v libx264 -pix_fmt yuv420p -profile:v high -level 4.0 -preset veryslow -tune film \
        -vsync cfr -x264-params "nal-hrd=cbr" \
        -b:v:3 500k -minrate 500k -maxrate 500k -bufsize 1000k -g 30 -s 640x360 \
    -program program_num=1:title=multi_p30:st=0:st=1:st=2:st=3 \
    -f mpegts "big_buck_bunny_720_480_360.ts"

Ich habe jede der Kodierungen einzeln getestet und sie sehen gut aus. Ich vermute, das Problem liegt an meiner Streamverwaltung/-zuordnung.

Helfen?

Antwort1

Um mehrere Streams in eine Ausgabe einzufügen, muss jeder Eingabestream ausdrücklich zugeordnet werden. Die Kodierungsoptionen selbst erstellen keine Streamzuweisung in der Ausgabe. Es gibt die Frage der automatischen Streamauswahl, die hier nicht anwendbar ist, aber Sie können darüber unter folgendem Link lesen:https://ffmpeg.org/ffmpeg.html#Stream-Auswahl

Also,

ffmpeg -i "big_buck_bunny_1080p.mov" -threads 16 \
    -map 0:a -map 0:v -map 0:v -map 0:v \
    -c:a aac -ac 2 -b:a 128k \
    -s:v:0 1280x720 -s:v:1 854x480-s:v:2 640x360 \
    -g 30 -c:v libx264 -pix_fmt yuv420p -profile:v high -level 4.0 -preset veryslow -tune film \
    -vsync cfr -x264-params "nal-hrd=cbr" \
    -b:v:0 5000k -minrate:v:0 2000k -maxrate:v:0 2000k -bufsize:v:0 4000k \
    -b:v:1 1500k -minrate:v:1 1000k -maxrate:v:1 1000k -bufsize:v:1 2000k \
    -b:v:2 500k -minrate:v:2 500k -maxrate:v:2 500k -bufsize:v:2 1000k \
    -program program_num=1:title=multi_p30:st=0:st=1:st=2:st=3 \
    -f mpegts "big_buck_bunny_720_480_360.ts"

verwandte Informationen