
我正在嘗試使用以下鏈的等效項來製作模擬實時 HLS/DASH 伺服器:
tsplay -loop multi_resolution.ts | shaka_packager | nginx
問題在於建立檔案「multi_resolution.ts」:它需要包含一個具有 1 個音訊和 3 個視訊 PID 的程序,每個 PID 對應 720p、480p 和 360p。為什麼?因為這就是 shaka_packager 需要的方式。
我想我對如何將轉碼流映射到輸出檔案感到困惑。這是我一直在努力解決的非工作命令:
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"
我單獨測試了每種編碼,它們看起來不錯。我懷疑問題出在我的流管理/映射。
幫助?
答案1
為了在輸出中插入多個流,需要明確地映射每個輸入流。編碼選項本身不會在輸出中建立流分配。這裡有一個自動流選擇的問題,這裡不適用,但您可以在以下位置閱讀相關內容:https://ffmpeg.org/ffmpeg.html#Stream-selection
所以,
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"