ffmpeg - 如何在 php 中使用 ffmpeg 将视频转换为 flv?

标签 ffmpeg video-processing

我正在尝试使用 ffmpeg 将一些不同的视频格式转换为 flv。但似乎只有一些视频通过。
ffmpeg -i /var/www/tmp/91640.avi -ar 22050 -ab 32 -f flv /var/www/videos/91640.flv
这是一些调试信息:

Seems stream 0 codec frame rate differs from container frame rate: 23.98 (65535/2733) -> 23.98 (5000000/208541)
Input #0, avi, from '/var/www/tmp/91640.avi':
  Duration: 00:01:12.82, start: 0.000000, bitrate: 5022 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 1280x528 [PAR 1:1 DAR 80:33], 23.98 tbr, 23.98 tbn, 23.98 tbc
    Stream #0.1: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
WARNING: The bitrate parameter is set too low. It takes bits/s as argument, not kbits/s
Output #0, flv, to '/var/www/videos/91640.flv':
    Stream #0.0: Video: flv, yuv420p, 1280x528 [PAR 1:1 DAR 80:33], q=2-31, 200 kb/s, 90k tbn, 23.98 tbc
    Stream #0.1: Audio: adpcm_swf, 22050 Hz, 5.1, s16, 0 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Error while opening codec for output stream #0.1 - maybe incorrect parameters such as bit_rate, rate, width or height

另外,如果我尝试抓取一帧广告并将其转换为 jpeg,我也会收到错误消息
ffmpeg -i /var/www/tmp/91640.avi -an -ss 00:00:03 -t 00:00:01 -r 1 -y /var/www/videos/91640.jpg
调试信息
...
[mpeg4 @ 0x1d7d810]Invalid and inefficient vfw-avi packed B frames detected
av_interleaved_write_frame(): I/O error occurred
Usually that means that input file is truncated and/or corrupted.

我认为图像失败是因为视频转换首先失败,但不确定

任何想法出了什么问题?

最佳答案

比特,而不是千比特

从您的控制台输出:

WARNING: The bitrate parameter is set too low. It takes bits/s as argument, not kbits/s



使用32k ,而不仅仅是 32 .

仅支持立体声或单声道

编码器adpcm_swf仅支持单声道或立体声,所以添加 -ac 2作为输出选项。如果您使用的是 recent ffmpeg build,控制台输出会建议这样做。 .

使用-vframes 1用于单图像输出

而不是 -t 00:00:01 -r 1使用 -vframes 1 .

更好的编码器

而不是使用编码器 flvadpcm_swf , 我推荐 libx264libmp3lame :
ffmpeg -i input -vcodec libx264 -preset medium -crf 23 -acodec libmp3lame -ar 44100 -q:a 5 output.flv
  • -preset – 控制编码速度与压缩比。使用您有耐心的最慢预设:超快、超快、非常快、更快、快、中、慢、慢、非常慢。
  • -crf – 恒定速率因子。较低的值是较高的质量。此编码器的范围是 0-51。 0 是无损的,18 大致是“视觉无损”,23 是默认值,51 是最差质量。使用仍能提供可接受质量的最高值。
  • -q:alibmp3lame 的音频质量.此编码器的范围是 0-9。较低的值是较高的质量。

  • 另见
  • FFmpeg and x264 Encoding Guide
  • Encoding VBR (Variable Bit Rate) mp3 audio
  • 关于ffmpeg - 如何在 php 中使用 ffmpeg 将视频转换为 flv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21835595/

    相关文章:

    matlab - 10 位 YUV420 到 RGB 转换

    ios - 解码 H264 VideoToolkit API 失败,在 VTDecompressionSessionCreate 中出现错误 -8971

    c++ - qtimer 和 opencv 运行缓慢

    android - Android FFmpeg 和 SOX 的二进制文件

    macos - 在 Mac 上使用 OpenCV 和 FFMPEG 时出现 "No accelerated colorspace conversion found from yuv420p to bgr24"

    ffmpeg的iphone编码问题

    c - 达芬奇 OSD 问题

    c++ - 如何使用 OpenCV 在视频中查找对象

    ffmpeg 视频压缩/特定文件大小

    php - 用于在移动设备中显示视频的 Html 页面