使用ffmpeg以两种方式下载m3u8视频,结果大小差别很大,这是为什么?

使用ffmpeg以两种方式下载m3u8视频,结果大小差别很大,这是为什么?

我正在尝试通过 ffmpeg 下载 m3u8 播放列表(其中包含 1.ts、2.ts、...、xxx.ts)。我使用两种不同的方法进行下载:

  • 直接下载:
ffmpeg -i "https://filelocation/chunked/myfile.m3u8" -codec copy filename_v1.mp4
  • 将所有 .ts 块下载到本地;创建一个列出所有 .ts 文件的 .txt 文件;合并为一个 .ts 文件;转换为 .mp4 文件:
for i in {1..xxx}; do curl "https://filelocation/chunked/$i.ts" -o "$i.ts"; done;
for i in `\ls *.ts | sort -V`; do echo "file '$i'"; done >> list.txt
ffmpeg -f concat -i list.txt -c copy filename_v2.ts
ffmpeg -i filename_v2.ts filename_v2.mp4

我最终得到的两个 mp4 文件大小相差很大,filename_v2.mp4 大约是 filename_v1.mp4 大小的 1/10(假设每个块约为 5MB,我有 100 个,filename_v1.mp4 约为 500MB,而 filename_v2.mp4 约为 50MB);此外,filename_v2.mp4 的持续时间会比 filename_v1.mp4 略短。这是为什么?这种方法是不是“错误”的?

答案1

该命令ffmpeg -i filename_v2.ts filename_v2.mp4重新压缩媒体。它不再是源数据。

相反,在生成 list.txt 时,删除file并使用echo "$i"然后运行,

ffmpeg -f mpegts -i concatf:list.txt -c copy filename_v2.mp4

相关内容