使用FFMPEG

时间:2016-01-20 10:53:27

标签: php audio video ffmpeg

这里我转换了图像(8)和音频(文件大小:307KB)的视频。 但是视频正在播放带有音频的图像,而其他图像则没有音频。 在我的知识中:因为音频文件的大小非常低。 我想转换视频播放带有音频的所有图像。 示例代码:

$audioPath = 'upload/2016/01/tmp_81332/audio_1453307709.wav';
$convAudioPath = 'upload/2016/01/tmp_81332/output.mp3';
$ffmpeg = '/usr/bin/ffmpeg';

$convImgPath = 'upload/2016/01/tmp_81332/image%d.jpeg';
$output = 'upload/2016/01/video_81332_1453307709.mp4';

exec("$ffmpeg -i $audioPath -f mp2 $convAudioPath");
exec("$ffmpeg -framerate 1/5 -i $convImgPath -i $convAudioPath -c:v libx264 -c:a aac -strict experimental -b:a 16k -shortest $output");

但是,如果输出视频文件长于视频,则会将其扩展为音频文件的长度。如果音频文件比视频短,则使用-shortest将视频文件缩短。那么是否有一个标志告诉ffmpeg将输出视频的长度保持为输入视频的长度?

2 个答案:

答案 0 :(得分:2)

在您的情况下,不需要从wav格式到mp3的音频转换。我们可以用单一命令来做。通过-r选项设置输出视频帧速率可以解决仅显示1个图像的问题。

将2个exec语句替换为以下语句,它应该可以正常工作。

exec("$ffmpeg -framerate 1/5 -i $convImgPath -i $audioPath -c:v libx264 -r 30 -c:a aac -strict experimental -b:a 16k $output");

参考:https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images

我还删除了上一个命令中的-shortest标志。因此,输出可以是视频的长度(如果大于输入音频的长度),也可以是音频长度。

因此,您可以从视频结束的第0秒到第n秒剪切所需的视频部分。你可以找到n,因为你已经知道输入帧率(由于-framerate 1/5标志,每张图片显示5秒)和图像数量(8)。

所以,n = 8 x 5 = 40秒。

因此,在第一个ffmpeg命令之后,始终从0到40秒剪切视频。这可以通过以下ffmpeg命令来实现。

ffmpeg -i INFILE.mp4 -vcodec copy -acodec copy -ss 00:00:00.000 -t 00:00:40.000 OUTFILE.mp4

希望这有帮助。

答案 1 :(得分:0)

使用

exec("$ffmpeg -framerate 1/5 -i $convImgPath -i $audioPath -af apad -c:v libx264 -r 5 -c:a aac -strict experimental -b:a 16k -shortest $output");

这会使用可能无限长度的空音频源填充音频,因此视频将始终是最短的输入。