【问题标题】:Making a movie from the url using ffmpeg and phantomjs使用 ffmpeg 和 phantomjs 从 url 制作电影
【发布时间】:2017-03-12 13:28:30
【问题描述】:

我从一个 url 截屏,使用 phantomjs 使用 setIntreval 函数(现在是 25),然后将输出通过管道传输到 ffmpeg(使用帧速率 -r 24)。 这是代码。 ffmpeg.js

var page = require('webpage').create();
page.viewportSize = { width: 1024, height: 768 };

page.open('http://ewoken.github.io/Leaflet.MovingMarker/', function () {
  setInterval(function() {
    page.render('/dev/stdout', { format: "png" });
  }, 25);
});

然后我使用它运行脚本。

phantomjs ffmpeg.js | ffmpeg -y -c:v png -f image2pipe -r 24 -t 10 -i - -c:v libx264 -pix_fmt yuv420p -movflags +faststart output.mp4

就像在命令中我用页面获取 10 秒视频一样,但它首先加速很快,最后一帧完全冻结。

你们能帮我解决问题,让我按原样记录页面吗?就像电影里有一个3000延迟的动画,它应该在电影中看起来像真实的,像流畅的和实时的。

谢谢你们。坚持了很久。

干杯,

【问题讨论】:

  • PhantomJS 可能无法实时制作这种大小的 png 屏幕截图(除非您的计算机速度非常快)。考虑降低帧率,保存为 jpg,尽可能使用较低的分辨率。

标签: video ffmpeg phantomjs


【解决方案1】:

首先,你需要有带有--enable-x11grab选项的ffmpeg,你需要编译它。

# example:
https://gist.github.com/holms/7009218
https://soledadpenades.com/2010/04/26/unknown-input-or-output-format-x11grab-ubuntu/ 

配置:

--prefix=/usr --enable-shared --enable-nonfree --enable-gpl --enable-libx264 --enable-version3 --enable-postproc --enable-pthreads --enable-libmp3lame --enable-libtheora --enable-libxvid --enable-x11grab --enable-libvorbis

我们需要使用SlimerJS,它不是无头浏览器,但也可以编写脚本:

cd /root; \
wget http://download.slimerjs.org/releases/0.10.1/slimerjs-0.10.1.zip && unzip slimerjs-0.10.1.zip && \
wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/49.0.2/linux-x86_64/en-US/firefox-49.0.2.tar.bz2 && \
tar -vxjf firefox-49.0.2.tar.bz2 && \
ln -sf /root/firefox/firefox /usr/local/bin/ -v && \
ln -sf /root/slimerjs-0.10.1/slimerjs /usr/local/bin/ -v

对于 slimerjs,我们需要安装以下snap.js 脚本:
rm -f snap.js; nano snap.js; chmod +x snap.js; clear

var page = require('webpage').create();
page.viewportSize = {width: 1024,height: 768};
page.open('http://ewoken.github.io/Leaflet.MovingMarker/', function() {
page.evaluate(function () {window.focus();});
//  page.render('github.png');
//  phantom.exit();
});

现在,我们需要为 Firefox 安装 x virtual frame buffer 和一些库:

aptitude update; aptitude install Xvfb libgtk-3-0 libasound2 libdbus-glib-1-2 -y

现在我们需要添加新的虚拟显示器 1.1:

pkill [X,x]vfb; pkill nw; Xvfb :1 -screen 1 1440x900x24 >/dev/null 2>&1 &

尝试不带任何选项运行firefox,以确保不需要额外的库(如果输出中有错误是正常的):

killall firefox; export DISPLAY=:1.1; firefox

那么,我们就可以使用脚本了:

killall firefox; rm -f ouput2.mp4; \
sleep 5; export DISPLAY=:1.1; export SLIMERJSLAUNCHER=/root/firefox/firefox; \
slimerjs snap.js & \
sleep 3; \
ffmpeg -f x11grab -framerate 60 -video_size 1024x768 -i :1.1 -vcodec libx264 -preset veryfast -b:v 10000k ouput2.mp4

我有这个视频:
https://drive.google.com/open?id=0B_tqnSHhFPBndDJ0Y1c5THBKWkk


注意:如果您使用的是 32 位 Linux,则需要替换链接:

https://download-installer.cdn.mozilla.net/pub/firefox/releases/49.0.2/linux-x86_64/en-US/firefox-49.0.2.tar.bz2

以下内容:

https://download-installer.cdn.mozilla.net/pub/firefox/releases/49.0.2/linux-i686/en-US/firefox-49.0.2.tar.bz2

【讨论】:

  • 我在没有 X 服务器的情况下使用 Xen DomU。操作系统 Debian 8 Jessie,64 位。
猜你喜欢
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多