FFmpeg 命令用于 mpeg-ts 编码

FFmpeg 命令用于 mpeg-ts 编码

我刚刚开始使用 FFmpeg 编码器。我有一个将视频文件编码为 mp4 容器的命令:

ffmpeg -i input.mp4 \
       -vcodec libx264 -s 426x240 -pix_fmt yuv420p \
       -crf 22 -minrate 200k -bufsize 400k -maxrate 400k -preset medium \
       -b:v 500000 -profile:v baseline -level 3.1 \
       -c:a aac -strict -2 -b:a 64k -ac 2 \
       output_240.mp4

我需要 mpeg-ts 编码的相应命令。我在网上搜索过,但由于我是新手,所以找不到我想要的。

答案1

与 FFmpeg 一样,有很多选择,我进一步缩小了范围以得出一个明确的答案:

1. 输入文件的编解码器受到支持在 TS 容器中:

使用 FFmpeg 检查您的输入文件,如下所示:

ffmpeg -i input.mp4

如果文件包含以下编解码器在 TS 容器中得到很好的支持,例如 H.264 视频和 AAC 声音,您可以简单地复制流:

ffmpeg -i input.mp4 -c copy output.ts

虽然您可能需要根据输出文件的实际用途(流媒体,某个播放设备等)改变此命令行,但这会产生很好的结果。

2. 输入文件的编解码器是不支持在 TS 容器中:

如果你的输入文件包含 TS 容器不支持的编解码器,你需要重新编码视频或音频流或两者兼有。FFmpeg 和 TS 容器的默认编解码器是 mpeg2video 和 mp2 sound。如果您乐意使用这些默认编解码器,则以下内容将产生很好的效果:

ffmpeg -i input.mp4 \
       -c:v mpeg2video -qscale:v 2 \
       -c:a mp2 -b:a 192k \
       output.ts

这在我的系统上确实给出了相当合理的结果,并且也应该在你的系统上给出相当合理的结果...

3. 您希望对文件进行分段以进行 HTTP 实时流 (HLS):

最后,您可能希望生成一个带有播放列表的分段 TS 文件,以用于 HTTP 实时流 (HLS)。通常有多种方法可以实现此目的,但下面的示例命令行非常适合 TS 容器中支持编解码器的输入文件:

ffmpeg -re -i input.mp4 \
       -codec copy -map 0 \
       -f segment -segment_list playlist.m3u8 \
       -segment_list_flags +live -segment_time 10 \
       out%03d.ts

如果您希望更改输入文件的编解码器,只需在 的位置添加所需的设置即可-codec copy,我相信 H.264 和 AAC 是此类流媒体的流行编解码器。 有很多空间可以尝试分段选项,这些选项此处描述...

笔记:

相关内容