m3u8视频分段下载
视频下载
grep -E '^[^#]' *.m3u8 | while read; do echo "https://play.4kvm.me/${REPLY}"; done > url
for i in $(seq -w 1 $(wc -l < url)); do filename="${i}.ts"; if [ ! -f "$filename" ]; then url=$(sed -n "${i}p" url); curl -L -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0' -o "$filename" "$url"; fi; done
cat *.ts > combined.ts
ffmpeg -i combined.ts -c copy output.mp4
视频分段被套壳,需要裁切;请根据 xxd 的结果,选择合适的 bs 和 skip 值;正常的ts分段文件包头为 0x4740
for i in $(seq -w 1 $(wc -l < url)); do filename="${i}.ts"; if [ ! -f "${i}_fixed.ts" ]; then dd if="$filename" of="${i}_fixed.ts" bs=16 skip=7; fi; done
cat *_fixed.ts > combined.ts
检查下载的视频分段文件个数是否和url中相同
ls *_fixed.ts | wc -l
ls *.ts | wc -l
检查是否有下载失败的文件(服务器会返回html)
find . -name "*.ts" -exec file {} \; | grep "ASCII text"
检查视频文件是否存在问题(无输出则没有问题)
ffmpeg -v error -i output.mp4 -f null -