我正在使用here中发现的PHP-FFMpeg库和“ Basic Usage”部分中的代码。
输出的视频似乎被截断了。我使用的是28秒长的源视频,但输出仅为9秒。怎么了?
在这里,我正在检查源视频的持续时间:
$ffprobe = FFMpeg\FFProbe::create();
$duration = $ffprobe
->format('test/source.mp4')
->get('duration');
28.700000
然后生成输出视频:
$ffmpeg = FFMpeg\FFMpeg::create();
$video = $ffmpeg->open('test/source.mp4');
$video->save(new FFMpeg\Format\Video\X264(), 'test/export.mp4');
然后检查输出视频的持续时间:
$ffprobe = FFMpeg\FFProbe::create();
$duration = $ffprobe
->format('test/export.mp4')
->get('duration');
9.234000
答案 0 :(得分:2)
感谢slhck的suggestion调查转换日志。
我的源文件似乎已损坏。
我在下面记录了我的过程。
我不知道从PHP-FFMpeg库获取ffmpeg输出的方法。
所以我用getFinalCommand()
输出ffmpeg命令:
$video = $ffmpeg->open('test/source.mp4');
echo $video->getFinalCommand(new FFMpeg\Format\Video\X264(), 'test/export.mp4')[0];
-y -i test / source.mp4 -vcodec libx264 -acodec libfaac -b:v 1000k -refs 6 -coder 1 -sc_threshold 40 -flags + loop -me_range 16 -subq 7 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4-网格1 -b:a 128k-通过1 -passlogfile / tmp / ffmpeg-passes5d108f0d5007cirj2x / pass-5d108f0d500f9 test / export.mp4
我执行命令时遇到此错误:
[libx264 @ 0x2395ec0] ratecontrol_init:无法打开统计文件
初始化输出流时出错0:0-打开输出流的编码器时出错
#0:0-可能是不正确的参数,例如bit_rate,rate,width或height
passlogfile
似乎引起了问题,因此我将其删除并得到:
流中损坏的输入数据包0:04.76比特率= 880.0kbits / s速度= 3.15x
[h264 @ 0x7b4500]无效的NAL单位大小(51618> 33287)。
[h264 @ 0x7b4500]将输入拆分为NAL单元时出错。
解码流#0:0时出错:处理输入时发现无效数据
我的源视频文件似乎已损坏。
我重新上传了它,错误消失了。
在此过程中,我还发现“音频编解码器libfaac是removed来自ffmpeg”(iki789),“还有更好的选择”(llogan),并且可以将音频编解码器设置为“ aac”,如下所示:
$format = new \FFMpeg\Format\Video\X264();
$format->setAudioCodec("aac");
$video = $ffmpeg->open('test/source.mp4');
$video->save($format, 'test/export.mp4');