2013-09-28 131 views
1

我正尝试使用在Android这个ffmpeg的命令行:FFmpeg的命令行

ffmpeg -i /sdcard/DCIM/video.mp4 -s 480x320 /sdcard/output.mp4 

我的ffmpeg的可执行文件(这条路径上:/数据/本地的/ tmp /的ffmpeg /使用chmod 751),和我读,我正尝试使用调用它:

Runtime.getRuntime().exec("/data/local/tmp/ffmpeg -i /sdcard/DCIM/video.mp4 -s 480x320 /sdcard/output.mp4"); 

但我可不是得到任何结果这个电话之后,所以我尝试相同的命令,但使用Android的终端和我确信ffmpeg的作品,因为我得到了许多输出,如视频数据。但doesn't做我想做的动作,I'm得到这个消息:

Unable to find a suitable output format for '/sdcard/output.mp4' 

我不有什么它可以是问题的任何想法... 感谢您的帮助!

+0

目前尚不清楚:那你当你运行'从亚行外壳或终端仿真程序或文件/数据/本地的/ tmp/ffmpeg'完成任务还不在吗?什么是写入控制台? –

+0

我很抱歉...当我使用adb shell,终端模拟器或直接从我的应用程序调用该命令时,我没有得到文件转换(我的ffmpeg命令应该转换视频并将其导出)。我知道ffmpeg二进制文件/可执行文件的工作原理是因为一些视频数据被写入到控制台,但我没有得到输出视频文件,因为我说的错误(无法找到合适的输出格式) –

+0

您究竟得到了什么安慰?也许,你的ffmpeg没有配置为mp4输出? –

回答

1

它可能不应该工作,因为ffmpeg将引用/ usr/lib在哪里将查找已安装的库。但是这是android这种方法将无法正常工作。

也许你应该将ffmpeg编译成像libffmpeg.so这样的单个库并编写c-wrapper,它将从你的应用程序位置加载它,比如/data/data/com.myapp/lib/libffmpeg.so并将params传递给这个库。

所以:你将通过jni加载你的包装并传递ffmpeg参数,然后wrapper将加载实际的ffmpeg并将params传递给它。

我曾经在一个项目中尝试了这一点,它的工作原理

+0

感谢您的回答!我一直在尝试这种方式,因为我认为这很容易。我知道你在引用的方式,但我不认为我能够编写C文件来调用我想要的命令。我该如何解决我的问题,使用可执行文件?因为我不知道如何使用JNI和C文件来调用我想要的命令(您说的方式)......我不介意使用哪种方式,但我不知道如何调用我的命令用你的方式... –

+0

ffmpeg“将引用/ usr/lib在哪里查找已安装的库” - 只有在构建为* shared *的情况下。但情况并非如此:可执行文件的启动将失败。 –

+0

嗨,@AlexCohn,我确定我已经安装了libs,因为我正在尝试一个命令,并且我得到了一段视频文件的音频。但我不知道为什么我的命令失败时,我想转换一个视频文件...任何想法?它可能是与输出编解码器有关的东西吗? –