【问题标题】:convert flv video file to m3u8 format with h264 and aac codec in ffmpeg在ffmpeg中使用h264和aac编解码器将flv视频文件转换为m3u8格式
【发布时间】:2022-03-02 08:26:32
【问题描述】:

我想在 FFmpeg 版本 0.7.15 中使用 AAC 和 H264 编码将 flv 视频文件转换为 m3u8 容器。谁能帮我解决这个问题?

我用这个命令转换成m3u8格式,但是报错:

cmd: ffmpeg -i sample.flv -b 1104k -s 320x240 -vcodec libx264 -ab 32 -ar 24000 -acodec libfaac final_video.m3u8

错误:

ffmpeg version 0.7.15, Copyright (c) 2000-2013 the FFmpeg developers
  built on Feb 22 2013 07:22:31 with gcc 4.4.5
  configuration: --enable-libdc1394 --prefix=/usr --extra-cflags='-Wall -g ' --cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex --enable-nonfree --disable-stripping --enable-avfilter --enable-libdirac --disable-decoder=libdirac --enable-libfreetype --enable-libschroedinger --disable-encoder=libschroedinger --enable-version3 --enable-libopenjpeg --enable-libvpx --enable-librtmp --extra-libs=-lgcrypt --disable-altivec --disable-armv5te --disable-armv6 --disable-vis
  libavutil    50. 43. 0 / 50. 43. 0
  libavcodec   52.123. 0 / 52.123. 0
  libavformat  52.111. 0 / 52.111. 0
  libavdevice  52.  5. 0 / 52.  5. 0
  libavfilter   1. 80. 0 /  1. 80. 0
  libswscale    0. 14. 1 /  0. 14. 1
  libpostproc  51.  2. 0 / 51.  2. 0
[libspeex @ 0x93e6c60] Missing Speex header, assuming defaults.
[flv @ 0x93e25e0] Estimating duration from bitrate, this may be inaccurate

Seems stream 0 codec frame rate differs from container frame rate: 60.00 (60/1) -> 30.00 (60/2)
Input #0, flv, from 'sample.flv':
  Metadata:
    duration        : 60
    creationdate    : Wed Apr 10 17:13:05
  Duration: 00:01:00.05, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: h264 (Main), yuv420p, 320x240 [PAR 1:1 DAR 4:3], 30 tbr, 1k tbn, 60 tbc
    Stream #0.1: Audio: libspeex, 16000 Hz, 1 channels, s16
WARNING: The bitrate parameter is set too low. It takes bits/s as argument, not kbits/s
[NULL @ 0x93e3840] Unable to find a suitable output format for 'final_video.m3u8'
final_video.m3u8: Invalid data found when processing input

【问题讨论】:

    标签: ffmpeg h.264 aac


    【解决方案1】:

    您的 FFmpeg 版本太旧——只有最近的 FFmpeg 内置了分段复用器。请参阅 the documentation for more。下载recent static build,或从源代码编译。

    例如:

    ffmpeg -i sample.flv -c:v libx264 -b:v 1104K -c:a libfaac -b:a 32K -ar 24000 -f segment -segment_list playlist.m3u8 -segment_list_flags +live -segment_time 10 out%03d.mkv
    

    请注意,使用 -ab 32 表示 32 位/秒。如果您想要千位,请改用32K,您可能希望使用更明确的-b:a

    【讨论】:

    • 我同意你的看法,slhck。但发帖者实际上是问如何将.flv 视频转换为.m3u8,而您告诉他如何将.flv 视频转换为.mkv 视频。
    • @Ed999 .m3u8 是一个播放列表文件;它不包含任何音频或视频数据。我告诉 OP 确实如何从 FLV 转换为 MKV,但同时会创建一个 M3U8 文件。
    【解决方案2】:

    我在here 上发表了一篇中等帖子,了解有关 ffmpeg 选项的更多信息here

    ffmpeg -i demo.flv -b:v 1M -g 60 -hls_time 2 -hls_list_size 0 -hls_segment_size 500000 output.m3u8
    

    让我们分解命令(它做了很多!?)

    我们以-i 输入demo.flv 文件,视频-b:v 比特率为1M,-g 将图片组设置为60(默认12),-hls_time 2 创建一个播放列表文件并以 2 的时间片制作一个或多个分段文件。

    然后,将hls_list_size 设置为 0,这样列表文件将包含所有片段并仅返回一个 playlist.m3u8,最后是最大 62.5kB 的hls_segment_size(选择片段大小或片段时间的最小值)。

    【讨论】:

      【解决方案3】:

      .M3U8 格式不是有效的输出格式。

      只有有效的 容器 格式(例如 .mp4 或 .mkv)可用于保存(即“环绕”)来自 .flv 文件的视频和音频流。但是 .m3u8 是一种播放列表格式,它只能有效地包含 text

      您无法将 .flv 等视频格式转换为非视频格式。这就像试图将视频流包装在 .pdf 或 .doc 容器中:它不起作用。因此,如果您尝试这样做,ffmpeg 会正确地抛出一个合适的。

      【讨论】:

        猜你喜欢
        • 2012-10-07
        • 2012-01-20
        • 1970-01-01
        • 1970-01-01
        • 2010-12-22
        • 2023-03-13
        • 2018-07-12
        • 2016-09-03
        • 1970-01-01
        相关资源
        最近更新 更多