如何以编程方式将 .ts 文件转换为高质量的 mp4?

How to convert .ts file into good quality mp4 programmatically?

我的网络服务从一个 m3u8 文件中获取 .ts 文件块并创建一个 .ts file.Now 我想在我使用 'avconv' 实用程序的 web.For 上播放这个文件在 Ubuntu 通过

avconv -i source.ts -acodec copy -vcodec copy destination.mp4

但是我没有得到好的 'playable' mp4 everytime.Sometimes 它只是音频和视频卡在两者之间。它还显示错误的持续时间标签。

有什么好的方法可以将 .ts 转换成 mp4 或更好地转换成 webm format.My 要求是在网络上播放 ...

提前致谢

首先确保你的输入文件是正确的,因为 GIGO(垃圾输入,垃圾输出)。

HLS 可以使用自适应流式传输,因此请检查您的 m3u8 是否为变体播放列表。例如:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000
http://example.com/low.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2560000
http://example.com/mid.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7680000
http://example.com/hi.m3u8

这是必要的,因为流可能会根据您的网络状况切换到不同的质量。如果可用带宽足够低,它可以 select 纯音频流(如果可用)。

如果是这样,请选择您可以获取的最大比特率的子播放列表,并将其直接用作您的 ts 片段的来源。

关于转码部分,我建议您使用 ffmpeg 尝试相同的命令。获取最新的 git 版本。您可以自己编译(推荐)或获取 package/static 构建。

如果复制编码仍然不起作用,您可以尝试重新编码文件(例如:-c:v x264 -c:a libfdk_aac)。

对于 WebM 你可以这样做:

ffmpeg -i input.ts -c:v libvpx -c:a libvorbis output.webm

对于 VP8/Vorbis 或:

ffmpeg -i input.ts -c:v libvpx-vp9 -c:a opus output.webm

对于VP9/Opus

这是最基本的例子,您应该设置编码参数而不是使用默认值。检查 documentation.

https://trac.ffmpeg.org/wiki/Encode/VP8

https://trac.ffmpeg.org/wiki/Encode/VP9

https://trac.ffmpeg.org/wiki/Encode/H.264