Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ffmpeg视频编码_Android_Video_Ffmpeg - Fatal编程技术网

Android ffmpeg视频编码

Android ffmpeg视频编码,android,video,ffmpeg,Android,Video,Ffmpeg,我又问了一个问题(http://stackoverflow.com/questions/8012494/sorry-this-video-cannot-be-played-streaming-mp4-to-android/8012874#8012874)关于使用VideoView在android中播放视频。显然,问题在于我的视频编码方式,因为另一个视频(512Kb mp4网络外)使用我的代码正确播放。由于视频是由我的最终用户上传到网站的,我对视频本身没有任何控制权,但是我可以控制对这些视频进行重

我又问了一个问题(http://stackoverflow.com/questions/8012494/sorry-this-video-cannot-be-played-streaming-mp4-to-android/8012874#8012874)关于使用VideoView在android中播放视频。显然,问题在于我的视频编码方式,因为另一个视频(512Kb mp4网络外)使用我的代码正确播放。由于视频是由我的最终用户上传到网站的,我对视频本身没有任何控制权,但是我可以控制对这些视频进行重新编码。我使用
ffmpeg
对它们重新编码,将它们转换为标准MP4(H.264+AAC)格式,并将它们缩放到相同的大小(320x240)

以下是无法播放的视频的ffmpeg信息:

sh-3.2$ ffmpeg -i video.bad.mp4
FFmpeg version SVN-r25679-snapshot, Copyright (c) 2000-2010 the FFmpeg developers
  built on Nov  5 2010 09:34:37 with gcc 4.3.2
  configuration: --prefix=/usr --enable-shared --enable-libmp3lame --enable-gpl --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-libgsm --enable-x11grab --enable-libx264 --enable-libtheora --extra-cflags=-Wall --enable-swscale --enable-libdc1394 --enable-nonfree --disable-mmx --disable-stripping --enable-avfilter --disable-altivec --disable-armv5te --disable-armv6 --disable-vis --enable-nonfree --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3
  libavutil     50.32. 6 / 50.32. 6
  libavcore      0.12. 0 /  0.12. 0
  libavcodec    52.94. 3 / 52.94. 3
  libavformat   52.84. 0 / 52.84. 0
  libavdevice   52. 2. 2 / 52. 2. 2
  libavfilter    1.56. 0 /  1.56. 0
  libswscale     0.12. 0 /  0.12. 0
  libpostproc   51. 2. 0 / 51. 2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.bad.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf52.84.0
  Duration: 00:00:45.93, start: 0.000000, bitrate: 591 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 320x240 [PAR 1:1 DAR 4:3], 535 kb/s, 15 fps, 15 tbr, 15 tbn, 30 tbc
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 51 kb/s
以下是正确播放的视频的ffmpeg信息:

sh-3.2$ ffmpeg -i video.mp4
FFmpeg version SVN-r25679-snapshot, Copyright (c) 2000-2010 the FFmpeg developers
  built on Nov  5 2010 09:34:37 with gcc 4.3.2
  configuration: --prefix=/usr --enable-shared --enable-libmp3lame --enable-gpl --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-libgsm --enable-x11grab --enable-libx264 --enable-libtheora --extra-cflags=-Wall --enable-swscale --enable-libdc1394 --enable-nonfree --disable-mmx --disable-stripping --enable-avfilter --disable-altivec --disable-armv5te --disable-armv6 --disable-vis --enable-nonfree --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3
  libavutil     50.32. 6 / 50.32. 6
  libavcore      0.12. 0 /  0.12. 0
  libavcodec    52.94. 3 / 52.94. 3
  libavformat   52.84. 0 / 52.84. 0
  libavdevice   52. 2. 2 / 52. 2. 2
  libavfilter    1.56. 0 /  1.56. 0
  libswscale     0.12. 0 /  0.12. 0
  libpostproc   51. 2. 0 / 51. 2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: mp41
    title           : crazytown - http://www.archive.org/details/Cartoon-Crazytown
    encoder         : Lavf51.10.0
  Duration: 00:07:50.40, start: 0.000000, bitrate: 578 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 320x240, 510 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 63 kb/s
实际上,我这里有两个问题。首先,安卓不喜欢我“糟糕”视频中的哪些细节?其次,我应该使用什么参数与ffmpeg一起重新编码我的视频?目前我使用的是:

ffmpeg -i $input_video_file -y -s 320x240 -vcodec libx264 -vpre medium -acodec libfaac -b 510K -ar 48000 -aspect 4:3 $tmpfile.mp4
qt-faststart $tmpfile.mp4 $output_video_file.mp4

但这会产生一个无法在android上播放的视频。非常感谢您的帮助。

首先,您的ffmpeg版本已经有一年多的历史了。自去年以来,ffmpeg和H.264有了很大的改进。请尝试升级到至少ffmpeg-0.7

确切地说问题出在哪里有点困难,因为ffmpeg没有显示传递给x264进行H.264编码的所有选项。尝试增加ffmpeg输出的详细程度(在ffmpeg命令开头附近使用
-v1
-v2
)。但根据我使用ffmpeg对Android视频进行转码的经验,我猜你没有使用H.264基线配置文件(看看你是否好奇)。如果您有ffmpeg-0.7或更高版本,请尝试添加
-profile baseline


如果由于某种原因无法升级ffmpeg,可以在指定
-vpre medium
后使用
-vpre-Baseline
选项指定基线配置文件。如果由于某种原因,您在尝试使用基线预设时遇到错误,您可以通过在
-vpre medium

之后的命令行上指定
-coder 0-bf 0-flags2-wpred-dct8x8
手动强制基线选项,非常感谢!由于我现在无法升级ffmpeg,我不得不选择其他选项。将
-vpre-baseline
添加到命令行成功了!它现在在手机上正常播放。嗨,阿列克斯,我能问一下你是如何成功地在android上运行FFmpeg命令的吗?这对我来说真的很重要。谢谢。@iSun我不在android中运行这个命令。FFmpeg在我的web服务器上运行,然后视频由android设备检索。啊哈,你知道在android中运行命令的方法吗?@iSun简单的答案是“没有办法”。您可能可以在根设备上执行某些操作,但您甚至无法安装ffmpeg。除此之外,请查看
System.exec
call。我不知道它是否在android上得到支持——从未尝试过。