从命令行文本到电影

stu*_*ent 5 bash mplayer video-editing video-encoding

我需要一个名为的脚本myslide,它执行以下操作:

myslide -f 15 -t 20 "Hello World"

生成一个电影文件(由 mplayer 播放),它只在屏幕中央以 15 号字体显示“Hello World”20 秒。

是否有捷径可寻?

Pet*_*r.O 5

这里提出了两种可能性,使用。

编辑:现在这两个脚本已凝结和修改只玩一个单一的指定帧的然而,许多秒的持续时间。mplayer可以处理非常低的 FPS(例如0.0085470090.003154574 FPS 工作正常,即 117 和 317 秒的播放时间)。

注意:在 Ubuntu 10.04 机器上。mplayer不播放第一帧,所以我需要包含 2 帧才能达到指定的时间。因此,请注意其他玩家可能会同时播放两帧,从而使播放时间加倍。

AviSynth是一个多功能/强大的帧服务器。没有图形用户界面。它是一种用于非线性音视频编辑/创建/过滤的脚本语言。
作为帧服务器,它不需要在磁盘上创建视频。它可以直接将视频/音频逐帧提供给任何 AviSynth 感知工具,无论是媒体播放器还是编码器......

AviSynth 是为 Windows 编写的免费和开源软件(我失去了你吗?:) ...进行了尝试,但没有成功移植到 *nix(我相信开发人员尝试过,但由于其原始设计而陷入困境重钩到Windows的东西,但它确实,做工精良wine,该的版本mplayer,并Avidemux可以处理.avs脚本(还有其他的,比如VirtualDub中,并AvsPmod这是一个的Avisynth迷你“IDE” GUI)。

这是一个 AviSynth 脚本,可以执行您想要的操作。

myslide  15 20 "Hello from AviSynth"
Run Code Online (Sandbox Code Playgroud)
#!/bin/bash
fontSize=$1; sec=$2; text="$3"
>>test.avs printf 'Blankclip( 2 ,width=640 ,height=480 ,fps=1/float(%s), color=$000000)\n' "$sec"
>>test.avs printf ' \ .Subtitle("%s", font="Arial", size=%s, text_color=$ff0000, align=5)\n' "$text" "$fontSize" 
wine avs2yuv.exe  test.avs -  2>/dev/null |
ffmpeg -b 100 -i - "test.mp4" 2>/dev/null

mplayer test.mp4
Run Code Online (Sandbox Code Playgroud)

avs2yuv是一个命令行程序,旨在在 Wine 下使用,用于连接Avisynth和基于 Linux 的视频工具。
avs2yuv仅读取视频流,但AviSynth可以将音频和视频帧提供给Avidemuxvia AvsProxy(随 Avidemux 一起提供)...

---

这是另一种方式,使用convertfrom package imagemagick。此方法创建一系列 .jpg 图像。

myslide  15 20 "Hello from convert"
Run Code Online (Sandbox Code Playgroud)
#!/bin/bash
fontSize=$1; sec=$2; text="$3"
FPS=$(awk 'END{print 1/'$2'}' /dev/null)
convert -background lightblue -fill blue -pointsize $fontSize -gravity center -size 640x480 caption:"$text" "test$$0.jpg"
cp test$$0.jpg "test$$1.jpg" # Add 1 extra; mplayer doesn't play ist frame (on test system)
ffmpeg -y -r $FPS -b 100 -i test$$%d.jpg test.mp4
rm  test$$*.jpg # remove temp images

mplayer test.mp4
Run Code Online (Sandbox Code Playgroud)