FFmpeg文件名输出格式

21
当使用ffmpeg将一系列帧输出为图像时,我能找到的唯一格式是frame_%d.jpg%d标识符将被连续的帧计数替换。
是否有其他参数可用于输出文件格式?具体而言,我需要添加特定帧的时间戳的功能。

同时也向ffmpeg-dev咨询此事- http://ffmpeg.org/pipermail/ffmpeg-devel/2011-December/117790.html - Yuval Adam
6个回答

12
原来这种行为在当时还没有实现。
我在FFmpeg的分支上(https://github.com/yuvadm/FFmpeg)实现了对%t的初始支持,并正在努力整理补丁,以便可以合并到主线上。

5
你是否曾将此提交给核心项目?我在尝试自己完成时发现了一个未解决的3年老请求(链接:https://trac.ffmpeg.org/ticket/1452)。 - Su'
@YuvalAdam请查看一下你在GitHub上的ffmpeg仓库(https://github.com/yuvadm/FFmpeg/commit/e1524dda42c9056f393a0ec0eb494d5dc31e2b1e#commitcomment-19635439),谢谢。:) - Florida
1
@florida 我已经添加了一个更新的补丁到 https://trac.ffmpeg.org/ticket/1452,这是 Works on My Machine™ 认证的,因为我一直在寻找这个功能。 - magixx

6

strftime选项允许您使用日期和时间信息扩展文件名。请查看strftime()函数的文档以获取语法。

例如,要从strftime() %Y-%m-%d_%H-%M-%S模式生成图像文件,可以使用以下ffmpeg命令:

ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg"

8
据我理解,这将输出实际的时间和日期,而我的要求是获取视频的运行时间。 - Yuval Adam
不幸的是,它只能提供“秒”级精度(给出挂钟时间),但它确实可以工作... - rogerdpack
对于那些被迫使用avconv的Ubuntu 14用户,strftime选项不能用于分割。我找不到解决方法,但通过执行以下步骤可以在Ubuntu 14上安装FFMPEG: sudo add-apt-repository ppa:mc3man/trusty-media sudo apt-get update sudo apt-get dist-upgrade sudo apt-get install ffmpeg - Tycon

2

似乎需要“恒定”的帧率,可惜我没有 :| - rogerdpack

1
另一个选择是在其上运行ffprobe -show_packets,并使用该数据“推断”每个生成的jpg文件的时间戳(假设您为每个传入视频帧生成一个)。天哪!

0

对于帧数,可以使用特殊调试模式的报告:

FFREPORT=file=\'file.log\':level=48 && ffmpeg ... -vf select=eq(pict_type\,PICT_TYPE_I) -vsync vfr -f image2 OUTPUT

然后你可以使用preg_match_all函数匹配名称:

preg_match_all("/] n:(\\d+)\\.[^>]+pict_type:I/Us",$log,$m,PREG_PATTERN_ORDER,5000);
$frames=$m[1];

请享受!


0

如果你想要附加纪元,可以尝试使用 %s-strftime

例如:

ffmpeg -rtsp_transport tcp -i 'input.mp4' -vf fps=1 -strftime 1 "%s_frame.png"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接