我刚刚开始使用 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 是此类流媒体的流行编解码器。 有很多空间可以尝试分段选项,这些选项此处描述...
笔记:
- 视频容器格式比较:一组方便的表格,显示哪些编解码器在每种容器格式中运行得最好
- TS 容器的音频编解码器:FFmpeg 很乐意将这些编解码器放入 TS 中:MP2、MP3、LC-AAC、HE-AAC、AC3。参考这里...在‘容器格式’下。
- FFmpeg 的片段设置和选项:很好地解释了分割文件所需的设置。值得一看示例部分...