FFmpeg error: Unable to find a suitable output format for ''
FFmpeg error: Unable to find a suitable output format for ''
我不熟悉 ffmpeg 以及 Android 编程。我正在尝试从 URL 加载视频并使用 ffmpeg 对其进行裁剪。我想将该视频保存到文件中。这是我在网上找到的命令:
"-i " + videoUrl + "-filter:v crop=240:120:100:100 -c:a copy test.mp4"
我试过了,报错Unable to find a suitable output format for ''
所以我试图缩小可能的原因并尝试了这些命令:
"-i " + videoUrl + " -c:v copy -c:a copy test.mp4"
"-i " + videoUrl + " -c:v copy test.mp4"
"-i " + videoUrl + " -c:a copy test.mp4"
"-i " + videoUrl + " test.mp4"
因此,据我所知,对于最后一个,我基本上将其归结为评论所需的最低限度。但是,结果还是一样。
他们都给我同样的错误。这是我通过 FFmpeg.getLatestOutput()
获得的完整输出
ffmpeg version v4.2-dev-480 Copyright (c) 2000-2018 the FFmpeg developers
built with Android (4751641 based on r328903) clang version 7.0.2 (https://android.googlesource.com/toolchain/clang 003100370607242ddd5815e4a043907ea9004281) (https://android.googlesource.com/toolchain/llvm 1d739ffb0366421d383e04ff80ec2ee591315116) (based on LLVM 7.0.2svn)
configuration: --cross-prefix=i686-linux-android-
--sysroot=/files/android-sdk/ndk-bundle/toolchains/mobile-ffmpeg-api-24-i686/sysroot
--prefix=/home/taner/Projects/mobile-ffmpeg/prebuilt/android-x86/ffmpeg
--pkg-config=/usr/bin/pkg-config --enable-version3 --arch=i686 --cpu=i686
--target-os=android --disable-neon --disable-asm --disable-inline-asm
--enable-cross-compile --enable-pic --enable-jni --enable-lto
--enable-optimizations --enable-swscale --enable-shared
--disable-v4l2-m2m --disable-outdev=v4l2
--disable-outdev=fbdev --disable-indev=v4l2 --disable-indev=fbdev
--enable-small --disable-openssl --disable-xmm-clobber-test
--disable-debug --disable-neon-clobber-test --disable-programs
--disable-postproc --disable-doc --disable-htmlpages
--disable-manpages --disable-podpages --disable-txtpages
--disable-static --disable-sndio --disable-schannel
--disable-securetransport --disable-xlib --disable-cuda
--disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau
--disable-videotoolbox --disable-audiotoolbox --disable-appkit
--disable-alsa --disable-cuda --disable-cuvid --disable-nvenc
--disable-vaapi --disable-vdpau --enable-libfontconfig
--enable-libfreetype --enable-libfribidi --enable-gmp --enable-gnutls
--enable-libmp3lame --enable-libass --enable-iconv --enable-libtheora
--enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxml2
--enable-libopencore-amrnb --enable-libopencore-amrwb
--enable-libshine --enable-libspeex --enable-libwavpack
--enable-libkvazaar --enable-libilbc --enable-libopus
--enable-libsnappy --enable-libsoxr --enable-libaom --enable-libtwolame
--disable-sdl2 --enable-zlib --enable-mediacodec
libavutil 56. 25.100 / 56. 25.100
libavcodec 58. 42.104 / 58. 42.104
libavformat 58. 25.100 / 58. 25.100
libavdevice 58. 6.101 / 58. 6.101
libavfilter 7. 46.101 / 7. 46.101
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'https://MyVideoUrl.com/example':
Metadata:
major_brand : mp42
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 2019-01-28T13:44:03.000000Z
encoder : HandBrake 1.2.0 2018122200
Duration: 00:00:14.33, start: 0.000000, bitrate: 4478 kb/s
Stream #0:0(und): Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt709), 1520x2700 [SAR 6075:4864 DAR 45:64], 4475 kb/s, 30.07 fps, 30 tbr, 90k tbn, 180k tbc (default)
Metadata:
creation_time : 2019-01-28T13:44:03.000000Z
handler_name : VideoHandler
[NULL @ 0x91833c00] Unable to find a suitable output format for ''
: Invalid argument
.
为什么 ffmpeg 假设我没有给它输出格式以及我需要做什么才能让它工作?
我正在使用 implementation 'com.arthenica:mobile-ffmpeg-full:4.2'
。
事实证明错误消息不仅仅是误导。
对于所有其他 android 编程初学者。
仅仅因为您从 activity 中获得了一个目录路径,并不意味着您有权在其中写入。
似乎很明显(而且可能是),但仍然如此。如果外部源给您错误的错误消息,这可能会造成混淆。我的错误是尝试将输出文件写入我没有权限的文件夹中。
通过此代码测试:
File test = new File("existingPath/myTestPath");
if(test.mkdirs())
Log.e("FILE", "MADE IT!!");
else
Log.e("FILE", "DIDNT MAKE IT!!");
只是想补充一下,在我的情况下,问题是我的命令中有一个额外的 space(-map 前面有两个 space,而不是一个),所以看一下在那也是。我会添加评论但低于 50 个代表,我花了几个小时试图找出它不起作用的原因。
我不熟悉 ffmpeg 以及 Android 编程。我正在尝试从 URL 加载视频并使用 ffmpeg 对其进行裁剪。我想将该视频保存到文件中。这是我在网上找到的命令:
"-i " + videoUrl + "-filter:v crop=240:120:100:100 -c:a copy test.mp4"
我试过了,报错Unable to find a suitable output format for ''
所以我试图缩小可能的原因并尝试了这些命令:
"-i " + videoUrl + " -c:v copy -c:a copy test.mp4"
"-i " + videoUrl + " -c:v copy test.mp4"
"-i " + videoUrl + " -c:a copy test.mp4"
"-i " + videoUrl + " test.mp4"
因此,据我所知,对于最后一个,我基本上将其归结为评论所需的最低限度。但是,结果还是一样。
他们都给我同样的错误。这是我通过 FFmpeg.getLatestOutput()
ffmpeg version v4.2-dev-480 Copyright (c) 2000-2018 the FFmpeg developers
built with Android (4751641 based on r328903) clang version 7.0.2 (https://android.googlesource.com/toolchain/clang 003100370607242ddd5815e4a043907ea9004281) (https://android.googlesource.com/toolchain/llvm 1d739ffb0366421d383e04ff80ec2ee591315116) (based on LLVM 7.0.2svn)
configuration: --cross-prefix=i686-linux-android-
--sysroot=/files/android-sdk/ndk-bundle/toolchains/mobile-ffmpeg-api-24-i686/sysroot
--prefix=/home/taner/Projects/mobile-ffmpeg/prebuilt/android-x86/ffmpeg
--pkg-config=/usr/bin/pkg-config --enable-version3 --arch=i686 --cpu=i686
--target-os=android --disable-neon --disable-asm --disable-inline-asm
--enable-cross-compile --enable-pic --enable-jni --enable-lto
--enable-optimizations --enable-swscale --enable-shared
--disable-v4l2-m2m --disable-outdev=v4l2
--disable-outdev=fbdev --disable-indev=v4l2 --disable-indev=fbdev
--enable-small --disable-openssl --disable-xmm-clobber-test
--disable-debug --disable-neon-clobber-test --disable-programs
--disable-postproc --disable-doc --disable-htmlpages
--disable-manpages --disable-podpages --disable-txtpages
--disable-static --disable-sndio --disable-schannel
--disable-securetransport --disable-xlib --disable-cuda
--disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau
--disable-videotoolbox --disable-audiotoolbox --disable-appkit
--disable-alsa --disable-cuda --disable-cuvid --disable-nvenc
--disable-vaapi --disable-vdpau --enable-libfontconfig
--enable-libfreetype --enable-libfribidi --enable-gmp --enable-gnutls
--enable-libmp3lame --enable-libass --enable-iconv --enable-libtheora
--enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxml2
--enable-libopencore-amrnb --enable-libopencore-amrwb
--enable-libshine --enable-libspeex --enable-libwavpack
--enable-libkvazaar --enable-libilbc --enable-libopus
--enable-libsnappy --enable-libsoxr --enable-libaom --enable-libtwolame
--disable-sdl2 --enable-zlib --enable-mediacodec
libavutil 56. 25.100 / 56. 25.100
libavcodec 58. 42.104 / 58. 42.104
libavformat 58. 25.100 / 58. 25.100
libavdevice 58. 6.101 / 58. 6.101
libavfilter 7. 46.101 / 7. 46.101
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'https://MyVideoUrl.com/example':
Metadata:
major_brand : mp42
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 2019-01-28T13:44:03.000000Z
encoder : HandBrake 1.2.0 2018122200
Duration: 00:00:14.33, start: 0.000000, bitrate: 4478 kb/s
Stream #0:0(und): Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt709), 1520x2700 [SAR 6075:4864 DAR 45:64], 4475 kb/s, 30.07 fps, 30 tbr, 90k tbn, 180k tbc (default)
Metadata:
creation_time : 2019-01-28T13:44:03.000000Z
handler_name : VideoHandler
[NULL @ 0x91833c00] Unable to find a suitable output format for ''
: Invalid argument
.
为什么 ffmpeg 假设我没有给它输出格式以及我需要做什么才能让它工作?
我正在使用 implementation 'com.arthenica:mobile-ffmpeg-full:4.2'
。
事实证明错误消息不仅仅是误导。 对于所有其他 android 编程初学者。
仅仅因为您从 activity 中获得了一个目录路径,并不意味着您有权在其中写入。
似乎很明显(而且可能是),但仍然如此。如果外部源给您错误的错误消息,这可能会造成混淆。我的错误是尝试将输出文件写入我没有权限的文件夹中。
通过此代码测试:
File test = new File("existingPath/myTestPath");
if(test.mkdirs())
Log.e("FILE", "MADE IT!!");
else
Log.e("FILE", "DIDNT MAKE IT!!");
只是想补充一下,在我的情况下,问题是我的命令中有一个额外的 space(-map 前面有两个 space,而不是一个),所以看一下在那也是。我会添加评论但低于 50 个代表,我花了几个小时试图找出它不起作用的原因。