ffmpeg: Gera mpegts com um único programa contendo 1 áudio e 3 vídeos

ffmpeg: Gera mpegts com um único programa contendo 1 áudio e 3 vídeos

Estou tentando criar um servidor HLS/DASH simulado ao vivo usando o equivalente à seguinte cadeia:

tsplay -loop multi_resolution.ts | shaka_packager | nginx

O problema é criar o arquivo "multi_resolution.ts": Ele precisa conter um único programa com 1 PID de áudio e 3 PIDs de vídeo, um para 720p, 480p e 360p. Por que? Porque é assim que shaka_packager precisa que seja.

Acho que estou confuso sobre como mapear os fluxos transcodificados para o arquivo de saída. Aqui está o comando que não funciona com o qual estou lutando:

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"

Testei cada uma das codificações isoladamente e elas parecem boas. Suspeito que o problema esteja no meu gerenciamento/mapeamento de fluxo.

Ajuda?

Responder1

Para inserir vários fluxos em uma saída, cada fluxo de entrada precisa ser mapeado expressamente. As opções de codificação, por si só, não criam uma atribuição de fluxo na saída. Há a questão da seleção automática de fluxo, que não se aplica aqui, mas você pode ler sobre isso emhttps://ffmpeg.org/ffmpeg.html#Stream-selection

Então,

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"

informação relacionada