使用FFmpeg进行转码和分段

27

看起来ffmepg现在有了分段器,或者至少有一个命令行选项 -f segment 在文档中有提到。

这是否意味着我可以仅使用ffmpeg将视频实时转码为h.264,并生成适用于IOS的.m3u8流分段?如果是这样,那么将任意视频文件转码为分段h.264 aac 640 x 480的ios兼容流的命令是什么?


1
如果 TS 包含多个节目(由 DVB-T 捕获的电视节目),如何拆分它?例如,我有一个包含足球+烹饪+卡通的 TS 文件。我该如何将这个 TS 文件拆分成 3 个 mpg 文件? - Dr.jacky
2个回答

35

可以使用-f segment将视频分割成多个片段并在iOS设备上进行播放。FFmpeg将创建.ts的分段文件,您可以使用任何Web服务器来提供这些文件。

工作示例(声音已禁用)- FFmpeg版本N-39494-g41a097a:

./ffmpeg -v 9 -loglevel 99 -re -i sourcefile.avi -an \
-c:v libx264 -b:v 128k -vpre ipod320 \ 
-flags -global_header -map 0 -f segment -segment_time 4 \
-segment_list test.m3u8 -segment_format mpegts stream%05d.ts

提示:

  • 确保你从最新的代码库编译ffmpeg
  • 使用libx264编解码器进行编译
  • 需要使用-map 0参数

我是如何编译带有额外rtmp支持的FFMPEG - 以获取来自的视频流的。

export PKG_CONFIG_PATH="/usr/lib/pkgconfig/:../rtmpdump-2.3/librtmp"    

./configure --enable-librtmp --enable-libx264 \
--libdir='../x264/:/usr/local/lib:../rtmpdump-2.3' \
--enable-gpl --enable-pthreads --enable-libvpx \
--disable-ffplay --disable-ffserver --disable-shared --enable-debug

我正在使用雪豹操作系统的Mac电脑,并尝试编译这个项目,不需要librtmp因为我不进行RTMP流媒体处理,有什么建议可以下载哪些内容以及需要遵循哪些步骤才能让它正常工作?FFmpeg的教程似乎提到了一些像libfaad这样的东西,但好像不再必要了。 - alphablender
1
不适用于我,结果播放列表总是只有最后一个元素。[例如仅 Stream00009.ts] - Aviad Rozenhek
如果TS包含多个节目(由DVB-T捕获的电视节目),该如何拆分?例如,我有一个包含足球+烹饪+卡通的TS文件。我该如何将这个TS文件拆分成3个mpg文件? - Dr.jacky
1
使用-map 0:X并添加您想要挑选的流。然后,您可以将这些流重新混合成一个新的单个程序(或任意数量的程序)传输流。 - Brian
我找不到如何使用MP4/webm的答案。您能指点一下我吗,@vladman?(我已经尝试了不同的cli参数,但无法使其工作) - Javier Constanzo
请注意,如果使用“c:v copy”而不是“c:v libx264”,则在关键帧均匀分布的情况下(例如“-segment-time 4”的情况下,每4秒钟一个关键帧),分段是正确的。 - Shevach Riabtsev


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接