编解码器参数不正确,无法为输出文件写入标头:FFMPEG - Android

时间:2014-10-24 13:08:41

标签: java android video ffmpeg mp4

为什么我得到错误的编解码器参数.... ??? 我正在使用Android MediaRecorder创建视频,在其上使用FFMPEG来修剪它。 我只是想使用FFMPEG修剪视频。

String[] ffmpegCommand = {
                    "/data/data/uk.org.humanfocus.hfi/ffmpeg",
                     "-ss",
                     "00:00:00",
                     "-i",
                     path,  // string variable, path of file
                     "-t",
                     "00:00:05", // duration of video
                     "-c",
                     "copy",
                     destination + "/trimmmmm.mp4" }; // string

这是我得到的日志..
它从FFMPEG处理开始直到结束。

10-24 18:02:06.039: V/ss(22093): ***Starting FFMPEG***
10-24 18:02:06.144: V/asd(22093): ***ffmpeg version N-63700-gbf0e5ac Copyright (c) 2000-2014 the FFmpeg developers***
10-24 18:02:06.144: V/asd(22093): ***  built on Jun  3 2014 13:27:45 with gcc 4.8 (GCC)***
10-24 18:02:06.144: V/asd(22093): ***  configuration: --prefix=/Users/aliasa/Downloads/android-ndk-r9/sources/ffmpeg/android/arm --enable-shared --disable-static --disable-doc --disable-ffplay --disable-ffprobe --disable-ffserver --disable-avdevice --disable-doc --disable-symver --cross-prefix=/Users/aliasa/Downloads/android-ndk-r9/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi- --target-os=linux --arch=arm --enable-cross-compile --sysroot=/Users/aliasa/Downloads/android-ndk-r9/platforms/android-9/arch-arm/ --extra-cflags='-Os -fpic -marm' --extra-ldflags=***
10-24 18:02:06.149: V/asd(22093): ***  libavutil      52. 89.100 / 52. 89.100***
10-24 18:02:06.149: V/asd(22093): ***  libavcodec     55. 66.100 / 55. 66.100***
10-24 18:02:06.149: V/asd(22093): ***  libavformat    55. 42.100 / 55. 42.100***
10-24 18:02:06.149: V/asd(22093): ***  libavfilter     4.  5.100 /  4.  5.100***
10-24 18:02:06.149: V/asd(22093): ***  libswscale      2.  6.100 /  2.  6.100***
10-24 18:02:06.149: V/asd(22093): ***  libswresample   0. 19.100 /  0. 19.100***
10-24 18:02:06.289: V/asd(22093): ***Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/copymade.mp4':***
10-24 18:02:06.289: V/asd(22093): ***  Metadata:***
10-24 18:02:06.289: V/asd(22093): ***    major_brand     : isom***
10-24 18:02:06.289: V/asd(22093): ***    minor_version   : 0***
10-24 18:02:06.289: V/asd(22093): ***    compatible_brands: isom3gp4***
10-24 18:02:06.289: V/asd(22093): ***    creation_time   : 2014-10-24 12:25:55***
10-24 18:02:06.294: V/asd(22093): ***  Duration: 00:00:11.65, start: 0.000000, bitrate: 3147 kb/s***
10-24 18:02:06.294: V/asd(22093): ***    Stream #0:0(eng): Video: h263 (s263 / 0x33363273), yuv420p, 720x480 [SAR 12:11 DAR 18:11], 3276 kb/s, 16.61 fps, 16.67 tbr, 90k tbn, 29.97 tbc (default)***
10-24 18:02:06.294: V/asd(22093): ***    Metadata:***
10-24 18:02:06.294: V/asd(22093): ***      creation_time   : 2014-10-24 12:25:55***
10-24 18:02:06.294: V/asd(22093): ***      handler_name    : VideoHandle***
10-24 18:02:06.294: V/asd(22093): ***    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 8000 Hz, mono, fltp, 12 kb/s (default)***
10-24 18:02:06.294: V/asd(22093): ***    Metadata:***
10-24 18:02:06.294: V/asd(22093): ***      creation_time   : 2014-10-24 12:25:55***
10-24 18:02:06.294: V/asd(22093): ***      handler_name    : SoundHandle***
10-24 18:02:06.294: V/asd(22093): ***[mp4 @ 0x50ce0] Could not find tag for codec h263 in stream #0, codec not currently supported in container***
10-24 18:02:06.294: V/asd(22093): ***Output #0, mp4, to '/storage/emulated/0/trimmmmm.mp4':***
10-24 18:02:06.294: V/asd(22093): ***  Metadata:***
10-24 18:02:06.294: V/asd(22093): ***    major_brand     : isom***
10-24 18:02:06.294: V/asd(22093): ***    minor_version   : 0***
10-24 18:02:06.294: V/asd(22093): ***    compatible_brands: isom3gp4***
10-24 18:02:06.294: V/asd(22093): ***    encoder         : Lavf55.42.100***
10-24 18:02:06.294: V/asd(22093): ***    Stream #0:0(eng): Video: h263 (s263 / 0x33363273), yuv420p, 720x480 [SAR 12:11 DAR 18:11], q=2-31, 3276 kb/s, 16.61 fps, 90k tbn, 90k tbc (default)***
10-24 18:02:06.294: V/asd(22093): ***    Metadata:***
10-24 18:02:06.294: V/asd(22093): ***      creation_time   : 2014-10-24 12:25:55***
10-24 18:02:06.294: V/asd(22093): ***      handler_name    : VideoHandle***
10-24 18:02:06.294: V/asd(22093): ***    Stream #0:1(eng): Audio: aac ([64][0][0][0] / 0x0040), 8000 Hz, mono, 12 kb/s (default)***
10-24 18:02:06.294: V/asd(22093): ***    Metadata:***
10-24 18:02:06.294: V/asd(22093): ***      creation_time   : 2014-10-24 12:25:55***
10-24 18:02:06.299: V/asd(22093): ***      handler_name    : SoundHandle***
10-24 18:02:06.299: V/asd(22093): ***Stream mapping:***
10-24 18:02:06.299: V/asd(22093): ***  Stream #0:0 -> #0:0 (copy)***
10-24 18:02:06.299: V/asd(22093): ***  Stream #0:1 -> #0:1 (copy)***
10-24 18:02:06.299: V/asd(22093): ***Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument***
10-24 18:02:06.299: V/asdas(22093): ***Ending FFMPEG***

我从2天开始就被困在这里,请帮助我。

2 个答案:

答案 0 :(得分:5)

从错误消息中,您似乎正在尝试将H.263编码视频流和aac编解码器音频流包装到mp4文件中,这是不可能的,因为作为容器类型(或传输格式),mp4无法使用视频轨道中的H.263视频有效载荷。

如果将H.264流包装到mp4文件中,它将起作用,在这种情况下,您将需要将视频轨道从H.263转码为H.264,这将需要H.264编码器和更多计算比你命令"复制"你正在运行的模式。为此,您需要使用libx264编译ffmpeg(使用--enable-libx264选项配置ffmpeg,并且需要预编译和安装libx264)。然后将代码修改为:

String[] ffmpegCommand = {
                "/data/data/uk.org.humanfocus.hfi/ffmpeg",
                 "-ss",
                 "00:00:00",
                 "-i",
                 path,  // string variable, path of file
                 "-t",
                 "00:00:05", // duration of video
                 "-vcodec",
                 "libx264",
                 "-acodec",
                 "copy",
                 destination + "/trimmmmm.mp4" }; // string

此命令将转换视频格式,可以将其包装在mp4文件中。如果您在转码后遇到质量下降,那么您可以使用x264编码参数来保持质量,您可以在互联网上找到很多材料。

希望它有所帮助。

答案 1 :(得分:0)

在@JasonYang的回答和描述的帮助下,我得出结论:H.264应该被使用..
在初始化MediaRecorder ...

我正在使用prMediaRecorder.setVideoEncoder(VideoEncoder.DEFAULT);
相反,我使用了prMediaRecorder.setVideoEncoder(VideoEncoder.H264);

它神奇地工作:)