好像你已经明白了如何提取从视频音频流,所以我们将跳过这一步。
让我们假设你有一个名为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
我已经采出的基于视频的从第一command.If我选择提取框架每隔10秒我要去丢失数据(帧) – user2650277
@ user2650277原来的帧率帧:当然。只需调整'fps'的味道,说25? – AkselA
是否'ffmpeg -i big_buck_bunny_480p_surround-fix.avi -q:v 1 ./vidtest/out%d。jpg'不会做同样的事情 – user2650277