ffmpeg 1.0.7需要一分钟才能在“损坏的”视频文件上创建缩略图,但其他文件只需几秒钟即可创建缩略图

时间:2013-10-07 17:17:43

标签: php video ffmpeg

我一直在使用ffmpeg 1.0.7超过450GB(cca 400文件)来创建缩略图和抓取视频文件信息。我花了1-2秒从~8GB文件创建了10个缩略图。但是现在我有了一些“破碎”的视频文件(672 MB),它在一分钟内创建了1个缩略图,10个缩略图超过10分钟 - >我的服务器烧伤:

 PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
 9769 www-data  20   0  395m  28m 7212 R 157.0  0.4   0:04.99 ffmpeg

我在Windows Media Player中打开文件并在 - >时获得空白屏幕视频文件很奇怪,在VLC中打开它并且它写了我: Because this AVI file index is broken or missing, seeking will not work correctly. VLC won't repair your file but can temporary fix this problem by building an index in memory. 我点击'按原样播放'它正确播放视频文件,但我的网络服务器因为FFmpeg而烧毁并且PHP等待从exec();命令返回。 10分钟后缩略图也可以正常创建,但是如何修复此问题或阻止执行FFmpeg以在这些损坏的“视频”文件上创建缩略图?

这是我的php:

$cmd = "ffmpeg -i error.avi 2>&1";
$info = `$cmd`;
echo '<pre>';
print_r($info);
echo '</pre>';

这是我得到的输出(非常快)

ffmpeg version 1.0.7 Copyright (c) 2000-2013 the FFmpeg developers
  built on Jul 19 2013 07:14:44 with gcc 4.7 (Debian 4.7.2-5)
  configuration: --prefix=/usr --extra-cflags='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security ' --extra-ldflags='-Wl,-z,relro' --cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-nonfree --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-libvpx --enable-libschroedinger --disable-encoder=libschroedinger --enable-version3 --enable-libopenjpeg --enable-librtmp --enable-avfilter --enable-libfreetype --enable-libvo-aacenc --disable-decoder=amrnb --enable-libvo-amrwbenc --enable-libaacplus --libdir=/usr/lib/x86_64-linux-gnu --disable-vda --enable-libbluray --enable-libcdio --enable-gnutls --enable-frei0r --enable-openssl --enable-libass --enable-libopus --enable-fontconfig --enable-libfdk-aac --enable-libdc1394 --disable-altivec --dis  libavutil      51. 73.101 / 51. 73.101
  libavcodec     54. 59.100 / 54. 59.100
  libavformat    54. 29.104 / 54. 29.104
  libavdevice    54.  2.101 / 54.  2.101
  libavfilter     3. 17.100 /  3. 17.100
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, avi, from 'error.avi':
  Metadata:
    encoder         : VirtualDubMod 1.5.10.2 (build 2540/release)
  Duration: 01:29:39.32, start: 0.000000, bitrate: 1048 kb/s
    Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 640x272 [SAR 1:1 DAR 40:17], 23.98 tbr, 23.98 tbn, 23.98 tbc
    Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, s16, 128 kb/s
At least one output file must be specified

所以看起来只是创建缩略图有问题:

exec("ffmpeg -ss 01:11:43 -i error.avi -vframes 1 -s 616x320 -an output_1.jpg 2>&1");

哪里可能是问题?谢谢你的建议!

顺便说一下。我在SO上发布这个因为我不确定它在哪里比在这里更多 - 我认为它可以通过PHP以某种方式完成,但我不太确定。

编辑:我已经添加了超时,这“修复了”我的问题,但即使是最新版本的FFmpeg 2.仍然坚持使用损坏的视频文件创建缩略图。

exec("timeout 5s ffmpeg -ss 01:11:43 -i error.avi -vframes 1 -s 616x320 -an output_1.jpg 2>&1");

0 个答案:

没有答案