输出的视频似乎被截断了。我使用的是一个长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
发布于 2019-06-24 09:13:16
看来我的源文件被破坏了。
我在下面记录了我的过程。
我不知道如何从库获得ffmpeg输出。
因此,我使用getFinalCommand()输出ffmpeg命令:
$video = $ffmpeg->open('test/source.mp4');
echo $video->getFinalCommand(new FFMpeg\Format\Video\X264(), 'test/export.mp4')[0];-y -i测试/源代码:mp4 -vcodec libx264 -acodec libfaac -b:v 1000 k -refs 6 -coder 1 -sc_threshold 40 -flags +循环-me_range 16 -subq 7 -i_qfactor 0.71 -qcomp 4 -trellis 4-trellis 1-trellis 128k -trellis 1-trellis test/export.mp4
我执行了命令,得到了以下错误:
libx264 @ 0x2395ec0 ratecontrol_init:无法打开stats文件 初始化输出流错误0:0 -打开输出流编码器时出错 #0:0 -可能是不正确的参数,如bit_rate、速率、宽度或高度
passlogfile似乎造成了问题,所以我删除了它,得到了:
流0:04.76 bitrate= 880.0kbit/s speed=3.15x中的输入数据包损坏 h264 @ 0x7b4500无效NAL单元大小(51618 > 33287)。 h264 @ 0x7b4500错误将输入拆分为NAL单元。 解码流#0:0时出错:处理输入时发现无效数据
看来我的原始视频文件被破坏了。
我重新上传了它,错误就消失了。
在此过程中,我还发现“音频编解码器libfaac是来自ffmpeg的删除”(iki789),“有更好的替代方案”(洛根),并且音频编解码器可以设置为"aac“,如下所示:
$format = new \FFMpeg\Format\Video\X264();
$format->setAudioCodec("aac");
$video = $ffmpeg->open('test/source.mp4');
$video->save($format, 'test/export.mp4');https://stackoverflow.com/questions/56729861
复制相似问题