我有一个 .avi 视频 (divx),帧率为 25fps,其 mp3 音频为 64kbit/s。此视频整个过程中只有一张图片。
我正在尝试将该视频转换为 mp4,但要使其尽可能小(因为实际上只有 1 帧!)
我目前正在尝试这个:
ffmpeg -i video.avi -vcodec libx264 -acodec aac \
-ar 32000 -ab 64k -ac 2 -strict -2 -y video.mp4
但这会使 mp4 视频的大小与 .avi 相似。
接下来我尝试将帧速率改为 1fps:
ffmpeg -i video.avi -vcodec libx264 -acodec aac \
-ar 32000 -ab 64k -ac 2 -strict -2 -y -r 1 video.mp4
这使得视频文件变得更小(缩小了 10 倍),但有一个问题,即关键帧不会出现在视频的第一帧。因此,视频中唯一的帧出现在视频中的第 8 或 10 秒左右(!)。
看起来这里的问题是 ffmpeg 不断从 video.avi 中丢帧,并且它没有将它们作为关键帧写入 video.mp4。当它确实写入关键帧时,它已经晚了。
它尝试使用-force_key_frames
参数,但也没有帮助。我照做-force_key_frames 0
了-force_key_frames 1
。
有谁知道如何才能制作仅含 1 个静态帧的非常小的 mp4 视频?
答案1
您应该通过分离 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
如果视频的尺寸确实很大,一种可能性是创建它的屏幕截图,并将图像用作视频编码器的输入,而不是重新编码视频流
看ffmpeg.org/wiki以供参考
#create screenshot from video
ffmpeg -i <<VideoName>> -ss 00:00:01.0 -f image2 -vframes 1 output.screen.png
您可以看到在这个 stackoverflow-post 上如何用静态照片制作视频
答案2
尝试以下命令,分别删除图像和音频,然后重新组合:
ffmpeg -loop 1 -shortest -y -i image.jpg -i audio.amr -acodec copy \
-vcodec video.avi video.mp4
答案3
如果您只是想转换它,请使用名为 Format factory 的程序(链接在此处:http://www.pcfreetime.com/)它可以直接将文件转换为 mp4,你可以将其设置为小尺寸