用于 mpeg-ts 编码的 FFmpeg 命令

Fay*_*s B 4 video ffmpeg mp4

我刚刚开始使用 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
Run Code Online (Sandbox Code Playgroud)

我需要相应的mpeg-ts编码命令。我在网上搜索了这个,但由于我是新手,所以无法得到我想要的东西。

and*_*.46 10

与 FFmpeg 一样,有许多选择可供选择,我进一步缩小了范围以创建明确的答案:

1. TS 容器支持您输入文件的编解码器:

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

ffmpeg -i input.mp4
Run Code Online (Sandbox Code Playgroud)

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

ffmpeg -i input.mp4 -c copy output.ts
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

这当然在我的系统上给出了相当合理的结果,你的系统也应该如此......

3. 您希望为 HTTP Live Streaming (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
Run Code Online (Sandbox Code Playgroud)

如果您希望更改输入文件的编解码器,只需添加所需的设置来代替-codec copy,我相信 H.264 和 AAC 是此类流媒体的流行编解码器。此处描述的细分选项有很大的实验空间......

笔记: