我一直在使用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");