FFmpeg实时流-循环视频?

8
我正在尝试使用FFmpeg向justin.tv流式传输视频循环。 我已成功使图像序列循环并与音频结合:

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

是否可能用视频文件实现这一点?

3个回答

13

肯定可以。在最新版本的ffmpeg中,他们添加了一个-stream_loop标志,允许您将输入循环多次。

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

以下是一个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_"

2

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)"。如果没有这些参数,它会在第一个循环后停止,并且其余的帧将被丢弃。 - jadkik94
谢谢,有没有办法在实时流视频输入上添加动态图像叠加?这意味着我们可以在视频流开始后不断更改图像叠加吗? - Ankit Maheshwari

-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"

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