我正在寻找一个在linux上运行的命令行视频工具,它是可编写脚本的,它可以在里面提供带有马赛克视频的输出视频。问题是,马赛克视频必须在输出内部进行更改。想象一下4 * 4马赛克视频,但输入视频数量超过16,所以例如每10秒钟我必须将马赛克中的图块更改为另一个视频。
我找到了可以生成马赛克输出的命令行VLC工具和avisynth,但是我发现它们不支持上述变化的视频。
有人知道其他选择吗?
提前致谢!
答案 0 :(得分:0)
AviSynth可以加入视频,因此您可以随时在剧本中更改视频源。
例如,在以下示例中,四个输入的左上角视频将在6秒后更改为其他视频:
v11 = AviSource("SomeSampleVideo.avi", false). \
Crop(0, 0, 320, 240).AssumeFPS(25).ConvertToRGB32.Trim(0, 150).FadeOut(25, $FF0000)
v12 = AviSource("AnotherSampleVideo.avi", false). \
Crop(40, 10, 320, 240).AssumeFPS(25).ConvertToRGB32.FadeIn(25, $FF0000)
v1 = v11 + v12
v2 = ImageReader("SomeSampleBitmap.bmp").Crop(20, 10, 320, 240).ConvertToRGB32
v3 = AviSource("YetAnotherVideo.avi", false).Crop(30, 30, 320, 240).ConvertToRGB32
v4 = v1.Subtract(v2)
return StackVertical(StackHorizontal(v1, v2), StackHorizontal(v3, v4))
我虽然可能误解了这些要求。
答案 1 :(得分:0)
解决方法可能是通过VLC生成的UDP流运行视频,例如:
vlc -vvv $YOUR_INPUT_VIDEO_AS_A_VARIABLE --sout='#transcode{vcodec=h264, vb=768, fps=25.0, width=1920, height=1080, scale=1, acodec=aac, ab=128, samplerate=32000}:standard{access=udp, mux=ts, dst=239.0.0.1}'
然后在您的VLC拼图中包含此udp流,例如:
setup video1 input udp://@239.0.0.1
后来我想你可以编写一个脚本,调用一个变量作为新视频的路径($ YOUR_INPUT_VIDEO_AS_A_VARIABLE),最终杀死早期的VLC实例并重新启动它,新视频将其发送到同一个udp地址。在您的情况下,您需要考虑端口,例如发送视频1到239.0.0.1:1234;视频2到239.0.0.1:1236;视频3到239.0.0.1:1238 - 等等。
UDP并不关心是否发送任何内容所以我猜你会有一段没有播放视频的短暂时间(杀死旧VLC实例和流式播放新视频所需的时间)。
同样,这是一个解决方法。所以也许这会有所帮助,否则就会忘记它。