php - 使用 FFMPEG 将图像和音频文件转换为视频

标签 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 将输出视频的长度保留为输入视频的长度?

最佳答案

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

将您的 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 秒。由于您已经知道输入帧速率(由于 -framerate 1/5 标志,每张图片显示 5 秒)和图像数量 (8),因此可以找到 n。

因此,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

希望这有帮助。

关于php - 使用 FFMPEG 将图像和音频文件转换为视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34898019/

相关文章:

objective-c - 播放随机声音

java - 混合波形文件

video - 在视频播放期间以特定时间戳触发事件

php - 我们有多少种 cURL 类型?

javascript - 如何将php中的mysql数据发送到javascript数组

php - 将 php foreach 放入单个变量逗号分隔的字符串中

Python:如何将 mp3 block 解码为 PCM 样本?

javascript - 在 localStorage 中获取并存储 64mb mp4 文件

java - 创建视频文件的可播放预览

php - mysql关系慢