我有一个我知道以特定帧速率(30 FPS)输出的流。我想使用 ffmpeg 制作这个流的副本并将其保存到磁盘。
我有以下命令:
ffmpeg -i http://input/ -c copy -map 0 \
-f segment -strftime 1 -segment_time 900 \
-segment_atclocktime 1 -segment_format mp4 %Y-%m-%d_%H-%M-%S.mp4
但是当我运行命令时,我看到以下内容:
frame= 32 fps=3.9 q=-1.0 Lsize=N/A time=00:00:01.27 bitrate=N/A
FPS 似乎在 ~4.0 FPS 和
time
附近徘徊移动比实时慢。我尝试添加
-re
(复制输入流的速率)和-r 30
(手动将速率设置为 30 FPS)标志在输入文件之前指定,但它似乎不起作用。我还阅读了a similar question here使用
-framerate 30
, 但该选项在手册页中不存在并且是 Invalid option
.任何帮助将不胜感激!
所以我让修改后的命令(删除标志
-c copy -map 0
)运行了整整 5 分钟。运行ffprobe
产量:Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2017-03-10_01-09-12.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.2.100
Duration: 00:00:15.43, start: 0.066016, bitrate: 13416 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1024x768, 13414 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
同样,这只产生 15 秒的视频,我似乎无法实时获得 30 FPS 的输入流和 30 FPS 的输出流之间的 1:1 关系。播放视频会加快速度。
最佳答案
这就是处理速度,即每秒处理 4 帧。这不是输出流 FPS。无论如何,在流复制模式下,FFmpeg 无法更改输出 FPS,除非您的输入是原始比特流。
关于video - ffmpeg复制流保留FPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42710623/