PHP-FFMpeg视频输出被截断

时间:2019-06-24 04:29:37

标签: php ffmpeg php-ffmpeg

我正在使用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

1 个答案:

答案 0 :(得分:2)

感谢slhcksuggestion调查转换日志。
我的源文件似乎已损坏。
我在下面记录了我的过程。


我不知道从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');