ffmpeg # 画中画中的视频进行循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ffmpeg # 画中画中的视频进行循环相关的知识,希望对你有一定的参考价值。

参考技术A

以上命令test.mov,只显示1遍,后边重复显示最后一帧。

如果想让test.mov一直循环呢? 添加 :loop=0,setpts=N/FRAME_RATE/TB 即可。

loop=0表示无限循环,如果后边跟的是数字,则表示循环几遍。
setpts filters用于调整后续显示的pts。

另外,如果只想test.mov显示一遍,然后不显示呢?

利用eof_action即可控制只显示一遍。

用以上命令,即可实现test.mov显示一遍,不再重复最后一帧。

https://stackoverflow.com/questions/47562747/loop-overlay-input-video
https://ffmpeg.org/ffmpeg-filters.html#framesync

FFmpeg 直播 - 循环视频?

【中文标题】FFmpeg 直播 - 循环视频?【英文标题】:FFmpeg Live Stream - Loop Video? 【发布时间】:2013-04-16 23:40:58 【问题描述】:

我正在尝试使用 FFmpeg 将视频循环流式传输到 justin.tv?我设法循环了一个图像序列并将其与音频中的线相结合:

ffmpeg -loop 1 -i imageSequence%04d.jpg -f alsa -ac 2 -ar 22050 -ab 64k \ -i 脉冲 -acodec adpcm_swf -r 10 -vcodec flv \ -f flv rtmp://live.justin.tv/app/

可以用视频文件做到这一点吗?

【问题讨论】:

【参考方案1】:

我只是重复使用 Rob 的答案并进行一些修改,以便为实时流提供文件

ffmpeg -threads 2 -re -fflags +genpts -stream_loop -1 -i gvf.mp4 -c copy -f mpegts -mpegts_service_id 102 -metadata service_name=My_channel -metadata service_provider=My_Self -max_interleave_delta 0 -use_wallclock_as_timestamps 1 -flush_packets 1 "udp://233.0.0.1:1001?localaddr=10.60.4.237&pkt_size=188"

【讨论】:

【参考方案2】:

绝对有可能。在最新版本的 ffmpeg 中,他们添加了 -stream_loop 标志,允许您根据需要循环输入多次。

问题是,如果您不从源重新生成 pts,ffmpeg 将在第一个循环后丢帧(因为时间戳会突然回到过去)。为避免这种情况,您需要告诉 ffmpeg 生成 pts,以便在循环之间获得增加的时间戳。这是通过 +genpts 调用完成的(它必须在 -i arg 之前)。

这是一个 ffmpeg 调用示例(将 $F 替换为您的输入文件)。此示例生成两个输出流,并且 -stream_loop -1 参数告诉 ffmpeg 连续循环输入。这种情况下的输出是用于类似的流广播摄取 (MetaCDN),请根据您的要求进行相应调整。

ffmpeg -threads 2 -re -fflags +genpts -stream_loop -1 -i $F \
-s 640x360 -ac 2 -f flv -vcodec libx264 -profile:v baseline -b:v 600k -maxrate 600k -bufsize 600k -r 24 -ar 44100 -g 48 -c:a libfdk_aac -b:a 64k "rtmp://publish.live.metacdn.com/2050C7/dfsdfsd/lowquality_664?hello&adbe-live-event=lowquality_" \
-s 1920x1080 -ac 2 -f flv -vcodec libx264 -profile:v baseline -b:v 2000k -maxrate 2000k -bufsize 2000k -r 24 -ar 44100 -g 48 -c:a libfdk_aac -b:a 64k "rtmp://publish.live.metacdn.com/2050C7/dfsdfsd/highquality_2064?mate&adbe-live-event=highquality_"

【讨论】:

【参考方案3】:

Sinclair Media 找到了解决方案,方法是使用 lavfi 过滤器并将:loop=0 附加到文件名:

这是未经测试的:

ffmpeg -f lavfi -re -i movie=StreamTest.avi:loop=0 \
-acodec libfaac -b:a 64k -pix_fmt yuv420p -vcodec libx264 \ 
-x264opts level=41 -r 25 -profile:v baseline -b:v 1500k  \ 
-maxrate 2000k -force_key_frames 50 -s 640×360 -map 0 -flags \ 
-global_header -f segment -segment_list index_1500.m3u8 \ 
-segment_time 10 -segment_format mpeg_ts \
-segment_list_type m3u8 segmented.ts

但它应该创建一个本地“index_1500.m3u8”文件,以流式传输“StreamTest.avi”中的视频。

【讨论】:

我必须使用这些参数才能使其正常工作:-f lavfi -re -fflags +genpts -i "movie=GleamingThatBrownbutterfly.webm:loop=0, setpts=N/(FRAME_RATE*TB)"。如果没有这些,它会在第一个循环后停止,其余帧都被丢弃。 谢谢,有没有办法在直播视频输入上添加动态图像叠加?意味着我们可以在视频流开始后继续更改图像覆盖?

以上是关于ffmpeg # 画中画中的视频进行循环的主要内容,如果未能解决你的问题,请参考以下文章

FFmpeg 直播 - 循环视频?

JavaCV开发详解之35:使用filter滤镜实现画中画,以屏幕画面叠加摄像头画面为例

JavaCV开发详解之35:使用filter滤镜实现画中画,以屏幕画面叠加摄像头画面为例

如何在Mac上的Safari浏览器中输入画中画视频?

使用 ffmpeg 合并视频和音频。循环播放视频和音频[关闭]

ffmpeg - 视频部分的无缝交叉淡入淡出循环