将图像序列与音频组合并制作视频

时间:2017-04-08 12:15:37

标签: audio video ffmpeg

我正在尝试拍摄视频提取帧和音频。然后我对帧进行一些压缩,然后我想将图像帧与音频组合以创建视频。

1.根据fps(无损)创建视频帧

ffmpeg  -i  big_buck_bunny_480p_surround-fix.avi -q:v 1 ./vidtest/out%d.jpg

此处的问题是基于94的图片质量为graphicsmagick,如何以原始质量提取图片。

2.获取音频

ffmpeg -i big_buck_bunny_480p_surround-fix.avi  -vn -acodec copy  big_buck_bunny_480p_surround-fix.ac3

3.如何将音频与图像序列组合

1 个答案:

答案 0 :(得分:1)

您似乎已经了解如何从视频中提取音频流,因此我们将跳过该步骤。

假设您有一个名为video.mp4的视频文件和一个名为audio.mp3的音频文件。您希望从视频中拍摄静止图像,并创建一个以audio.mp3作为音轨的幻灯片。

首先,我们将提取静止图像。 fps=1/10表示每十秒钟提取一次帧。 -ss 00:00:5表示我们从一开始就开始五秒钟。视频的第一位通常是淡入淡出,主要包含黑色,因此可能需要跳过它。

ffmpeg -ss 00:00:5 -i video.mp4 -vf fps=1/10 image%03d.png

接下来,我们将计算产生的图片数量。这将非常方便我们确定何时指定幻灯片的帧速率。

imgcount=$(find . -maxdepth 1 -name "image*" | wc -l)

echo $imgcount

音轨的持续时间也很不错。对于MP3和类似格式,特别是在使用可变比特率编码时,可以充分估计持续时间。为了解决这个问题,可以将音频文件转换为WAV文件f.ex,然后估算持续时间。

adur=$(ffprobe -v error -select_streams a:0 -show_entries stream=duration \
  -of default=noprint_wrappers=1:nokey=1 audio.mp3)

echo $adur

现在我们将图像重新组合成幻灯片。 $imgcount/$adur指定静止图像的显示速率,因此持续时间与音频文件的持续时间相当匹配。 -r 25指定视频的实际帧速率。并非所有格式和视频播放器都接受不同的帧速率。

ffmpeg -framerate $imgcount/$adur -i image%03d.png -c:v libx264 -r 25 \
  -pix_fmt yuv422p slideshow.mp4

这将复用音频文件和幻灯片文件,并修剪为两者中最短的持续时间。如果容器格式支持音频文件的编解码器,如果音频文件不必重新转换,或者选择其他容器格式,则此方法有效。我发现Matroska(.mkv)非常有用。对于.avi.ac3.mp4.mp3,应该没有问题。

ffmpeg -i slideshow.mp4 -i audio.mp3 -codec copy -shortest slideshow-sound.mp4