1.
my system
uname -a
Linux localhost.localdomain 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT 2011 x86_64 x86_64 x86_64 GNU/Linux
2.ffmpeg是从http://johnvansickle.com/ffmpeg/
3.我下载了ffmpeg-release-64bit-static。焦油xz
,解压缩此文件,然后运行:/ffmpeg
然后安装了ffmpeg
。我使用:ffmpeg-version
检查它没有问题。
我在我的系统中运行这些命令没有问题:
cd /home/web/tomcat-6.0.29/zhouletest/ffmpeg-3.1.1-64bit-static
./ffmpeg -y -ss 10 -t 3 -i /home/web/tomcat-6.0.29/zhouletest/videos/6.mp4 -vf fps=10,scale=177:-1:flags=lanczos,palettegen /home/web/tomcat-6.0.29/zhouletest/gif_images/palettegens/6.png
./ffmpeg -y -ss 10 -t 3 -i /home/web/tomcat-6.0.29/zhouletest/videos/6.mp4 -i /home/web/tomcat-6.0.29/zhouletest/gif_images/palettegens/6.png -filter_complex "fps=10,scale=177:-1:flags=lanczos[x];[x][1:v]paletteuse" /home/web/tomcat-6.0.29/zhouletest/gif_images/6.gif
但是当我在java中调用这个命令时,会发生错误,为什么
String cmd1 = "/home/web/tomcat-6.0.29/zhouletest/ffmpeg -y -ss 10 -t 3 -i /home/web/tomcat-6.0.29/zhouletest/videos/6.mp4 -vf fps=10,scale=177:-1:flags=lanczos,palettegen /home/web/tomcat-6.0.29/zhouletest/gif_images/palettegens/6.png";
String cmd2 = "/home/web/tomcat-6.0.29/zhouletest/ffmpeg-3.1.1-64bit-static/ffmpeg -y -ss 10 -t 3 -i /home/web/tomcat-6.0.29/zhouletest/videos/6.mp4 -i /home/web/tomcat-6.0.29/zhouletest/gif_images/palettegens/6.png -filter_complex \"fps=10,scale=177:-1:flags=lanczos[x];[x][1:v]paletteuse\" /home/web/tomcat-6.0.29/zhouletest/gif_images/6.gif";
String result1 = executeCommand(cmd1);
String result2 = executeCommand(cmd2);
private static String executeCommand(String command) {
StringBuffer output = new StringBuffer();
Process p;
try {
p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line = "";
while ((line = reader.readLine())!= null) {
output.append(line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return output.toString();
}
错误:
结果1:
结果2:ffmpeg 3.1版。1-静态http://johnvansickle.com/ffmpeg/版权所有(c)2000-2016 FFmpeg开发者使用gcc 5.4构建。0(Debian 5.4.0-4)20160609
配置:-启用gpl--enable-version3--enable static--disable debug--enable-libmp3lame--enable-libx264--enable-libwebp--enable libspeex--enable libvorbis--enable libvpx--enable libfreetype--enable fontconfig--enable libxvid enable libopencore amrnb--enable libopencore amrwb--enable libthera--启用libvo amrwbenc--enable gray--enable libopenjpeg--enable libopus--enable libass--enable gnutls--enable libvidstab--enable libsoxr--enable-frei0r--enable libfribidi--disable indev=sndio--disable outdev=sndio--enable librtmp--enable libzimg--cc=gcc
libavutil 55。28.100 / 55. 28.100
libavcodec57。48.101 / 57. 48.101
libav57格式。41.100 / 57. 41.100
libav设备57。0.101 / 57. 0.101
libavfilter
6。47.100 / 6. 47.100
libswscale 4。1.100 / 4. 1.100
libswresample 2。1.100 / 2. 1.100 libpostroc
54。0.100 / 54. 0.100
从“/home/web/tomcat-6.0”输入#0、mov、mp4、m4a、3gp、3g2、mj2。29/4/st/videos/6。mp4':
元数据:
主要品牌:isom
次要版本:512
兼容品牌:isomiso2avc1mp41
编码器:Lavf56。40.101
持续时间:00:04:36.64,开始:-3.338000,比特率:1089kb/s
流#0:0(und):视频:h264(主)(avc1/0x31637661)、yuv420p、480x360、997kb/s、15fps、15tbr、16k tbn、30tbc(默认值)
元数据:
处理程序名称:VideoHandler
流#0:1(und):音频:aac(主)(mp4a/0x6134706D)、22050Hz、立体声、FL88/s(默认)元数据:
处理程序名称:SoundHandler
输入1,png管道,来自“/home/web/tomcat-6.0.29/zhouletest/gif_images/paletegens/6.png”:
持续时间:N/A,比特率:N/A
流1:0:视频:png,rgba(pc),16x16[SAR 1:1 DAR:1],25 tbr,25 tbn,25 tbc
[AVFilterGraph@0x45c5260]无此类过滤器:“fps”
初始化复杂筛选器时出错。
参数无效
当您使用单独的语言或系统生成ffmpeg
命令行调用时,有时会发生这种情况,如果您最近有一个ish ffmpeg(大于3.0),则默认情况下应将palettegen
编译到其中。
在我的例子中,在对命令行进行了一整天的实验之后,我需要在我生成的CLI调用中转义,
,前面有一个\
。因此,ffmpeg无法正确地读取参数,并最终认为我要求使用fps作为过滤器,或类似的。
最后,我写了一个shell:gifcreate。嘘,我用java来调用它,它工作得很好。
#/bin/bash
_srcFile=$1 #video file path
_descFile=$2 #output GIF file
_width=$3 #widht of output GIF file
_start=$4 #skip the first $_start seconds of the $_srcFile
_time=$5 #create a $_time second output
_cover=$6 #overwrite the palette and gif if exist, y is yes,n is not
_fps=$7 #Frame rate,can control GIF definition,
_palettegenFile=$8 #palette file path
cd /home/web/tomcat-6.0.29/zhouletest/ffmpeg-3.1.1-64bit-static
./ffmpeg -$6 -t $_time -i $_srcFile -vf fps=$_fps,scale=$_width:-1:flags=lanczos,palettegen $_palettegenFile
./ffmpeg -$6 -t $_time -i $_srcFile -i $_palettegenFile -filter_complex "fps=$_fps,scale=$_width:-1:flags=lanczos[x];[x][1:v]paletteuse" $_descFile
/home/web/tomcat-6.0.29/zhouletest/gifcreate.sh /home/web/tomcat-6.0.29/zhouletest/videos/6.mp4 /home/web/tomcat-6.0.29/zhouletest/gif_images/1469694815605_8898.gif 177 0 3 y 5 /home/web/tomcat-6.0.29/zhouletest/gif_images/palettegens/1469694815605_8898.png
String cmd1 = "/home/web/tomcat-6.0.29/zhouletest/gifcreate.sh "+srcFile+" "+descFile+" "+width+" "+start+" "+time+" "+(cover?"y":"n")+" "+fps+" "+palettegenFile;
Runtime r1 = Runtime.getRuntime();
final Process process1 = r1.exec(cmd1);
Thread thread1 = new Thread(new Runnable() {
public void run() {
try {
process1.waitFor();
} catch (Exception e) {
log.error("createScaleGifFromVideo thread error:", e);
}
}
});
thread1.start();
thread1.join(5000);//wait for the child thread up to 5 second
if(thread1.isAlive()){
process1.destroy();
log.error("createScaleGifFromVideo: gif create is not ended, because it's cost more then 5s.");
}
https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif-using-ffmpeg-with-reasonable-quality?answertab=votes#tab-top
与FFmpeg二进制文件无关,这几乎肯定与命令运行的shell环境中的转义字符有关。
检查错误消息:
No such filter: '"fps'
FFmpeg认为被调用的过滤器是“fps
。
尝试删除filter_complex引号。
-filter_complex fps=10,scale=177:-1:flags=lanczos[x];[x][1:v]paletteuse
或者如果这不起作用,用单引号括起来。
-filter_complex 'fps=10,scale=177:-1:flags=lanczos[x];[x][1:v]paletteuse'
问题内容: 我正在使用Django-CMS的Django项目中构建一个相当简单的应用程序,即研究项目。(这是我对项目/应用程序的首次尝试。)它的主要目的是存储各种知识资产(例如,研究人员撰写的文章,书籍等)。 问题是,当我将浏览器指向/ research /时,出现一条错误,提示表’research_journal’不存在(“ no such table”)。 我正在使用带有sqlite3数据库的
当我尝试使用量角器在非角度页面中发送键时,它显示错误“无Such元素错误:没有这样的元素” NoSuchElementError:没有这样的元素(会话信息:chrome=47.0.2526.80)(驱动程序信息:chrome Driver = 2 . 14 . 313457(3d 645 C 400 ed F2 e 2c 500566 c9aa 096063 e 707 C 9 cf),platf
问题内容: 我使用com0com在Windows中进行程序测试,在Linux中是否有类似com0com的程序? 我知道有pts / ptmx,但是我想要的是一个独立程序,提供2个虚拟串行端口… 然后我可以打开2个程序,每个程序一个。 问题答案: 我找到了一个好方法: 然后创建两个虚拟串行端口文件:COM8,COM9
问题内容: 我遵循的是官方Django文档中的第一个应用程序教程,尝试保存通过管理页面进行的某些更改时出现此错误。我对此进行了一些研究,但是我能够找到的可能解决方案(例如迁移数据库)根本行不通。如果您想查看我的代码的某些特定部分,请告诉我。 以下是错误: and the traceback: 问题答案: 我自己碰到了这个问题,它似乎与https://code.djangoproject.com/t
问题内容: 制作针对不同事件类型定义的转换与 StAX的 使用和感觉被迫进入一个程序实现- 提取这些事件并进行处理,过滤这些事件并处理它们,不是把所有的结果重新走到一起并返回。 SAX 似乎有一个非常好的功能,即基于XMLFilters的可链接筛选器。 我宁愿保留基于StAX的实现,但以某种方式合并或仿真SAX中的可链接筛选器。 可以通过合理的努力做到这一点吗?我已经错过了一个实现吗? 由于项目限
问题内容: 有没有什么好方法可以使用angular过滤列表而不使用ng- repeat?我不想首先使用javascript绘制列表,但是之后我想使用angular对其进行过滤。 例: 我想使用搜索框来过滤现有的html。 (一般请不要使用ng-repeat或jQuery给出任何示例) 问题答案: 您可以编写一个简单的指令来处理显示/隐藏: 并以这种方式使用它: 使用指令有两个好处: 1)。您不必在