bod*_*ydo 7 mp4 ffmpeg video-conversion
我有一个 25fps 的 .avi 视频 (divx),它有 64kbit/s 的 mp3 音频。该视频在整个视频中只有一张图片。
我正在尝试将此视频转换为 mp4,但要使其尽可能小(因为实际上只有 1 帧!)
我目前正在尝试这个:
ffmpeg -i video.avi -vcodec libx264 -acodec aac \
-ar 32000 -ab 64k -ac 2 -strict -2 -y video.mp4
Run Code Online (Sandbox Code Playgroud)
但这会生成与 .avi 大小相似的 mp4 视频。
接下来我尝试将帧速率更改为 1fps:
ffmpeg -i video.avi -vcodec libx264 -acodec aac \
-ar 32000 -ab 64k -ac 2 -strict -2 -y -r 1 video.mp4
Run Code Online (Sandbox Code Playgroud)
这使得视频文件小得多(小 10 倍),但存在关键帧没有出现在视频的第一帧的问题。所以视频中唯一的一帧在视频中看起来像 8 或 10 秒(!)。
看起来这里的问题是 ffmpeg 不断从 video.avi 中删除帧,并且不会将它们作为关键帧写入 video.mp4。当它确实写了一个关键帧时,它在视频中已经晚了。
它尝试使用-force_key_frames
参数,但这也无济于事。我做了-force_key_frames 0
和-force_key_frames 1
。
有谁知道我如何创建一个只有 1 个静态帧的非常小的 mp4 视频?
您应该通过分离 A/V 组件来检查视频部分是否确实是一个因素
与 ffmpeg 一起使用
#retrieve audio-only
ffmpeg -i <<VideoName>> -vn -acodec copy -f <<AudioCodec>> output.audio
#retrieve video-only
ffmpeg -i <<VideoName>> -an -vcodec copy -f <<VideoCodec>> output.video
Run Code Online (Sandbox Code Playgroud)
如果视频的大小确实很大,一种可能性是创建它的屏幕截图,并使用图像作为视频编码器的输入,而不是重新编码视频流
请参阅ffmpeg.org/wiki以供参考
#create screenshot from video
ffmpeg -i <<VideoName>> -ss 00:00:01.0 -f image2 -vframes 1 output.screen.png
Run Code Online (Sandbox Code Playgroud)
您可以在此 stackoverflow-post 上了解如何从静止图像制作视频