video - 无法使用ffmpeg转码器转码视频

标签 video drupal-7 ffmpeg jwplayer ffmpeg-php

这个问题可能会在不同的论坛上被问到,但仍然没有找到答案。

我正在尝试使用视频模块和 FFMPEG 转换器播放 *.flv。 每当我上传任何 flv 视频时,我都会收到以下消息:-

PHPVideoToolkit 错误:执行错误。无法对“C:\xampp\htdocs\Resonance\sites\default\files\videos\original\barsandtone_3.flv”进行编码,因为 FFmpeg 返回错误。错误与输入文件的视频编解码器有关。 FFmpeg 报告错误为“打开输出流 #0:0 的编码器时出错 - 可能参数不正确,例如比特率、速率、宽度或高度”。

已安装的模块是:-

视频 - 7.x-2.9

Video.js - 7.x-2.3 - 版本:4.0.3

视频转码器:FFmpeg/avconv : git: c2dd5a1

JW播放器

以上都安装正确。

视频模块配置:-

在视频的播放器选项卡(admin/config/media/video/players)中,已配置以下内容:-

enter image description here

新的 FLV 预设已创建并添加到视频的预设选项卡下 (admin/config/media/video/presets)。详情如下:-

预设名称:- FLV 预设

视频输出扩展:- FLV Flash 视频

视频编解码器:- H 263/H263-1996,H263+/H263-1998/H263 Version 2(不确定视频编解码器)

FFmpeg 视频预设:- 无

视频质量:-无

视频速度:- 无

尺寸:- 640 X 360

纵横比模式:- 保持纵横比

当我从内容类型上传视频时,它会按如下方式提取缩略图:-

enter image description here

保存视频后显示以下消息:-

enter image description here

我的直觉是我设置了错误的预设,但我无法解决这个问题。请帮助我,因为我非常接近完成项目,如果不解决问题,这将是浪费。

更新:-

控制台信息如下:-

报告的错误

PHPVideoToolkit 错误:执行错误。无法对“C:\xampp\htdocs\Resonance\sites\default\files\videos\original\barsandtone_19.flv”进行编码,因为 FFmpeg 返回错误。请注意,但是在编码过程的第二遍时遇到了错误,而第一遍似乎没有问题。错误与输入文件的视频编解码器有关。 FFmpeg 报告错误为“打开输出流 #0:0 的编码器时出错 - 可能参数不正确,例如比特率、速率、宽度或高度”。

执行的命令和输出

/ffmpeg/ffmpeg.exe -i "C:\xampp\htdocs\Resonance\sites\default\files\videos\original\barsandtone_7.flv" -strict experimental -vcodec "h264" -s "320x180" -acodec "aac" -ac "2" -pass "1" -passlogfile "C:\xampp\tmp/1384191046-5281144682cfc-multipass"  -y C:\xampp\tmp/1384191046-5281144681e51.flv

ffmpeg version N-49610-gc2dd5a1 Copyright (c) 2000-2013 the FFmpeg developers
  built on Feb  5 2013 13:26:02 with gcc 4.7.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 17.101 / 52. 17.101
  libavcodec     54. 91.100 / 54. 91.100
  libavformat    54. 61.104 / 54. 61.104
  libavdevice    54.  3.103 / 54.  3.103
  libavfilter     3. 35.101 /  3. 35.101
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
[flv @ 00000000002fb860] max_analyze_duration 5000000 reached at 5018000 microseconds
Input #0, flv, from 'C:\xampp\htdocs\Resonance\sites\default\files\videos\original\barsandtone_7.flv':
  Metadata:
    audiodelay      : 0
    canSeekToEnd    : true
  Duration: 00:00:06.00, start: 0.000000, bitrate: 118 kb/s
    Stream #0:0: Video: vp6f, yuv420p, 360x288, 409 kb/s, 1k tbr, 1k tbn, 1k tbc
    Stream #0:1: Audio: mp3, 44100 Hz, stereo, s16p, 96 kb/s
[libx264 @ 0000000002457340] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2
[libx264 @ 0000000002457340] profile Main, level 4.0
[libx264 @ 0000000002457340] 264 - core 129 r2245 bc13772 - H.264/MPEG-4 AVC codec - Copyleft 2003-2013 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x1:0 me=dia subme=2 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, flv, to 'C:\xampp\tmp/1384191046-5281144681e51.flv':
  Metadata:
    audiodelay      : 0
    canSeekToEnd    : true
    encoder         : Lavf54.61.104
    Stream #0:0: Video: h264 ([7][0][0][0] / 0x0007), yuv420p, 320x180, q=-1--1, pass 1, 1k tbn, 1k tbc
    Stream #0:1: Audio: aac ([10][0][0][0] / 0x000A), 44100 Hz, stereo, fltp, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (vp6f -> libx264)
  Stream #0:1 -> #0:1 (mp3 -> aac)
Press [q] to stop, [?] for help
frame=    2 fps=0.0 q=-1.0 Lsize=     102kB time=00:00:06.10 bitrate= 136.7kbits/s
video:2kB audio:95kB subtitle:0 global headers:0kB muxing overhead 4.978013%
[libx264 @ 0000000002457340] frame I:1     Avg QP:11.95  size:  1595
[libx264 @ 0000000002457340] frame P:1     Avg QP: 2.00  size:    21
[libx264 @ 0000000002457340] mb I  I16..4: 86.3%  0.0% 13.8%
[libx264 @ 0000000002457340] mb P  I16..4:  0.4%  0.0%  0.0%  P16..4:  0.0%  0.0%  0.0%  0.0%  0.0%    skip:99.6%
[libx264 @ 0000000002457340] coded y,uvDC,uvAC intra: 13.8% 40.7% 32.8% inter: 0.0% 0.0% 0.0%
[libx264 @ 0000000002457340] i16 v,h,dc,p: 80% 15%  4%  0%
[libx264 @ 0000000002457340] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 36% 42% 21%  0%  0%  0%  0%  0%  0%
[libx264 @ 0000000002457340] i8c dc,h,v,p: 45% 24% 31%  0%
[libx264 @ 0000000002457340] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0000000002457340] kb/s:1.08

/ffmpeg/ffmpeg.exe -i "C:\xampp\htdocs\Resonance\sites\default\files\videos\original\barsandtone_7.flv" -strict experimental -vcodec "h264" -s "320x180" -acodec "aac" -ac "2" -pass "2" -passlogfile "C:\xampp\tmp/1384191046-5281144682cfc-multipass"  -y C:\xampp\tmp/1384191046-5281144681e51.flv

ffmpeg version N-49610-gc2dd5a1 Copyright (c) 2000-2013 the FFmpeg developers
  built on Feb  5 2013 13:26:02 with gcc 4.7.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 17.101 / 52. 17.101
  libavcodec     54. 91.100 / 54. 91.100
  libavformat    54. 61.104 / 54. 61.104
  libavdevice    54.  3.103 / 54.  3.103
  libavfilter     3. 35.101 /  3. 35.101
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
[flv @ 00000000002fb860] max_analyze_duration 5000000 reached at 5018000 microseconds
Input #0, flv, from 'C:\xampp\htdocs\Resonance\sites\default\files\videos\original\barsandtone_7.flv':
  Metadata:
    audiodelay      : 0
    canSeekToEnd    : true
  Duration: 00:00:06.00, start: 0.000000, bitrate: 118 kb/s
    Stream #0:0: Video: vp6f, yuv420p, 360x288, 409 kb/s, 1k tbr, 1k tbn, 1k tbc
    Stream #0:1: Audio: mp3, 44100 Hz, stereo, s16p, 96 kb/s
[libx264 @ 00000000024e7340] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2
[libx264 @ 00000000024e7340] constant rate-factor is incompatible with 2pass.
Output #0, flv, to 'C:\xampp\tmp/1384191046-5281144681e51.flv':
  Metadata:
    audiodelay      : 0
    canSeekToEnd    : true
    Stream #0:0: Video: h264, yuv420p, 320x180, q=-1--1, pass 2, 90k tbn, 1k tbc
    Stream #0:1: Audio: none, 44100 Hz, stereo, fltp, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (vp6f -> libx264)
  Stream #0:1 -> #0:1 (mp3 -> aac)
Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height

我不是 Unix 向导,无法解决这个问题。请帮助我建议正确的路径。

最佳答案

怎么了

Error while opening encoder for output stream #0:0 - maybe incorrect parameters
such as bit_rate, rate, width or height

此消息位于控制台输出的末尾。它表示输出流 0:0 存在问题,它指的是“第一个输入:第一个流”,因此在这种情况下 0:0 是您的视频流。

[libx264 @ 00000000024e7340] constant rate-factor is incompatible with 2pass.

这是重要信息。默认情况下,如果您不使用 -b:v 声明比特率,ffmpeg 将使用 -crf,但 crf 模式与 2 pass 不兼容。 ffmpeg 并不总是知道你想要什么,所以在某些情况下默认值并不总是有效,但它通常会告诉你原因。

你需要两次通行证吗?

你需要两次通行证吗?如果您尝试针对特定的输出文件大小,则最常使用两次传递。如果获得确切的输出文件大小不是问题,那么只需执行一次并使用 crf 代替:

ffmpeg -y -i input -vcodec libx264 -vf scale=320:-1 -crf 23 -preset medium \
-acodec copy output.flv
  • 编码器一般命名为libx264,解码器通常命名为h264
  • -y 是一个全局选项,所以它在 -i 之前。
  • 由于您的输入包含音频速率为 44100 的 MP3 音频,并且您的输出容器 (flv) 可以支持它,那么您可以简单地 stream copy使用 -acodec copy 而不是重新编码的音频。
  • 强制 320x180 可能会垂直挤压输出(我希望 320x256)。您可以使用 scale视频过滤器而不是 -s 来自动计算输出大小并保持纵横比。
  • 查看 FFmpeg and x264 Encoding Guide有关 -crf-preset 的详细信息。

如果您必须重新编码音频

使用 libmp3lame 可能比原生的实验性编码器 aac 更好:

ffmpeg -y -i input -vcodec libx264 -vf scale=320:-1 -crf 23 -preset medium \
-acodec libmp3lame -ac 2 -ar 44100 -q:a 4 output.flv

另见:

关于video - 无法使用ffmpeg转码器转码视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19886969/

相关文章:

android - 用于 Youtube 视频的 Exoplayer

c++ - Fourcc 与 mac os X

php - array_diff 在 drupal 中给出数组到字符串转换错误

drupal - 登录 Phonegap 中的 Drupal 站点

php - Drupal,获取节点列表给出 403 禁止错误

video - VLC 输出到 DirectShow 源过滤器

video - 从低 fps 的视频中提取剪辑

video - 使用 ffmpeg 合并视频和音频。音频未结束时循环播放视频

ruby-on-rails-3 - 使用 ffmpeg 转换媒体类型

video - 如何使用 ffmpeg 重建 openCV-python