使用ffmpeg为Android编码x264视频,起始偏移量为

使用ffmpeg为Android编码x264视频,起始偏移量为,android,ffmpeg,Android,Ffmpeg,我正在尝试将视频转换为在Android设备上播放。 这段视频来自一部大电影。我正在把它切成碎片 使用-ss和-t与电影的实际片段相对应 输入是带有H.264和AAC的mp4。 输出是使用H.264和Vorbis的mkv 具体而言,输入为: Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 320x240, 2240 kb/s, 29.97 fps, 60 tbr, 90k tbn, 180k tbc Stream

我正在尝试将视频转换为在Android设备上播放。 这段视频来自一部大电影。我正在把它切成碎片 使用-ss和-t与电影的实际片段相对应

输入是带有H.264和AAC的mp4。 输出是使用H.264和Vorbis的mkv

具体而言,输入为:

Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 320x240, 2240 kb/s, 29.97 fps, 60 tbr, 90k tbn, 180k tbc
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, s16, 162 kb/s
我使用的是:ffmpeg版本1.0.7

我正在尝试的命令类似于:

ffmpeg -ss 00:03:52.000 -i in.mp4 -t 00:01:00.000 -c:v libx264 -preset medium -crf 20 -maxrate 400k -bufsize 1835k -c:a libvorbis -sn out.mkv
然而,虽然生成的视频在我的计算机上运行良好,但当我单击 我的手机上写着:不能播放视频 检查Android日志,它有:

E/SoftAVC (24319): Decoder failed: -2
E/OMXCodec(24319): [OMX.google.h264.decoder] ERROR(0x80001001, -1007)
它仍然可以为电影制作缩略图,但不能播放

有趣的是,该命令的一些简单变体确实有效: Remove-ss以在视频开始时开始 使用-an禁用音频

这些变化仍然失败: 使用-c:copy或其他音频编解码器(如vorbis、mp3)复制原始音频 使用mp4代替mkv 使用基线H.264配置文件,包括将级别限制为1.2

首先运行mkvmerge不仅失败,而且使Android甚至无法制作缩略图

我不知道这是否有关联,但我注意到的另一件小事是 在电影后期开始转码时,音频会稍微开始不同步。 几秒钟后,它恢复同步。音频与原始音频同步

罗伯特·朗特里:

-vcodec libx264 -b:v 200k -bt 50k -threads 0 -b_strategy 1 -acodec copy -f mp4 -strict -2
有趣。你的命令几乎起作用了。这段视频实际上是在安卓系统上播放的。一个问题是音频不同步,并且在整个剪辑中保持不同步。但是,这比我以前更接近了。我会在那里四处搜索,看看是否能找到正确的组合

我试过它的组合。看来,使用mp4和复制音频是使其工作的原因。使用libvorbis或转到mkv会再次破坏它。但是,我想对音频进行转码,我想为了保持同步,我可能不得不对其进行转码。请注意,即使使用转码,当我在计算机上播放时,音频和视频之间仍然没有同步

领主: 这是完整的日志

ffmpeg version 1.0.7 Copyright (c) 2000-2013 the FFmpeg developers
  built on Jul 27 2013 13:01:19 with gcc 4.4.5 (Gentoo 4.4.5 p1.2, pie-0.4.5)
  configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --enable-shared --cc=x86_64-pc-linux-gnu-gcc --cxx=x86_64-pc-linux-gnu-g++ --ar=x86_64-pc-linux-gnu-ar --optflags='-mtune=athlon64 -O2 -pipe -fomit-frame-pointer -fstack-protector' --extra-cflags='-mtune=athlon64 -O2 -pipe -fomit-frame-pointer -fstack-protector' --extra-cxxflags='-mtune=athlon64 -O2 -pipe -fomit-frame-pointer -fstack-protector' --disable-static --enable-gpl --enable-version3 --enable-postproc --enable-avfilter --enable-avresample --disable-stripping --disable-debug --disable-doc --disable-vaapi --disable-runtime-cpudetect --enable-libmp3lame --enable-libvo-aacenc --enable-libtheora --enable-libx264 --enable-libxvid --enable-libcaca --enable-openal --disable-indev=v4l2 --disable-indev=oss --disable-indev=jack --enable-x11grab --disable-outdev=oss --enable-libfreetype --enable-pthreads --enable-libspeex --enable-libvorbis --disable-altivec --disable-avx --disable-vis --disable-neon --cpu=athlon64 -  libavutil      51. 73.101 / 51. 73.101
  libavcodec     54. 59.100 / 54. 59.100
  libavformat    54. 29.104 / 54. 29.104
  libavdevice    54.  2.101 / 54.  2.101
  libavfilter     3. 17.100 /  3. 17.100
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'in.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42isomavc1
    creation_time   : 2013-07-13 02:23:51
    encoder         : HandBrake 0.9.6 2012022800
  Duration: 03:14:01.41, start: 0.000000, bitrate: 2408 kb/s
    Chapter #0.0: start -0.133467, end 648.697411
    Metadata:
      title           : Chapter  1
    Chapter #0.1: start 648.697411, end 1297.345411
    Metadata:
      title           : Chapter  2
    Chapter #0.2: start 1297.345411, end 1729.777411
    Metadata:
      title           : Chapter  3
    Chapter #0.3: start 1729.777411, end 2378.425411
    Metadata:
      title           : Chapter  4
    Chapter #0.4: start 2378.425411, end 3027.073411
    Metadata:
      title           : Chapter  5
    Chapter #0.5: start 3027.073411, end 3675.721411
    Metadata:
      title           : Chapter  6
    Chapter #0.6: start 3675.721411, end 4108.153411
    Metadata:
      title           : Chapter  7
    Chapter #0.7: start 4108.153411, end 4756.801411
    Metadata:
      title           : Chapter  8
    Chapter #0.8: start 4756.801411, end 5405.449411
    Metadata:
      title           : Chapter  9
    Chapter #0.9: start 5405.449411, end 6054.097411
    Metadata:
      title           : Chapter 10
    Chapter #0.10: start 6054.097411, end 6702.745411
    Metadata:
      title           : Chapter 11
    Chapter #0.11: start 6702.745411, end 7135.177411
    Metadata:
      title           : Chapter 12
    Chapter #0.12: start 7135.177411, end 7783.825411
    Metadata:
      title           : Chapter 13
    Chapter #0.13: start 7783.825411, end 8432.473411
    Metadata:
      title           : Chapter 14
    Chapter #0.14: start 8432.473411, end 9081.121411
    Metadata:
      title           : Chapter 15
    Chapter #0.15: start 9081.121411, end 9513.553411
    Metadata:
      title           : Chapter 16
    Chapter #0.16: start 9513.553411, end 10162.201411
    Metadata:
      title           : Chapter 17
    Chapter #0.17: start 10162.201411, end 10810.849411
    Metadata:
      title           : Chapter 18
    Chapter #0.18: start 10810.849411, end 11459.497411
    Metadata:
      title           : Chapter 19
    Chapter #0.19: start 11459.497411, end 11641.412478
    Metadata:
      title           : Chapter 20
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 320x240, 2240 kb/s, 29.97 fps, 60 tbr, 90k tbn, 180k tbc
    Metadata:
      creation_time   : 2013-07-13 02:23:51
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, s16, 162 kb/s
    Metadata:
      creation_time   : 2013-07-13 02:23:51
    Stream #0:2(und): Subtitle: mov_text (text / 0x74786574)
    Metadata:
      creation_time   : 2013-07-13 02:23:51
[libx264 @ 0x14ea220] using cpu capabilities: MMX2 SSE2Slow SlowCTZ
[libx264 @ 0x14ea220] profile High, level 2.1
[libx264 @ 0x14ea220] 264 - core 120 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=60 keyint_min=6 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=20.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=400 vbv_bufsize=1835 crf_max=0.0 nal_hrd=none ip_ratio=1.40 aq=1:1.00
Output #0, matroska, to 'out.mkv':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42isomavc1
    encoder         : Lavf54.29.104
    Chapter #0.0: start 0.000000, end 60.000000
    Metadata:
      title           : Chapter  1
    Stream #0:0(und): Video: h264 (H264 / 0x34363248), yuv420p, 320x240, q=-1--1, 1k tbn, 60 tbc
    Metadata:
      creation_time   : 2013-07-13 02:23:51
    Stream #0:1(und): Audio: vorbis (oV[0][0] / 0x566F), 48000 Hz, stereo, flt
    Metadata:
      creation_time   : 2013-07-13 02:23:51
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> libx264)
  Stream #0:1 -> #0:1 (aac -> libvorbis)
Press [q] to stop, [?] for help
frame= 1799 fps= 92 q=-1.0 Lsize=    3738kB time=00:00:59.98 bitrate= 510.5kbits/s dup=0 drop=51    =51    
video:3016kB audio:683kB subtitle:0 global headers:4kB muxing overhead 0.939943%
[libx264 @ 0x14ea220] frame I:31    Avg QP:20.23  size: 14126
[libx264 @ 0x14ea220] frame P:634   Avg QP:23.03  size:  3317
[libx264 @ 0x14ea220] frame B:1134  Avg QP:27.71  size:   482
[libx264 @ 0x14ea220] consecutive B-frames:  2.3% 12.8% 84.7%  0.2%
[libx264 @ 0x14ea220] mb I  I16..4:  3.8% 63.8% 32.4%
[libx264 @ 0x14ea220] mb P  I16..4:  0.1%  0.3%  0.1%  P16..4: 47.4% 30.2% 19.5%  0.0%  0.0%    skip: 2.4%
[libx264 @ 0x14ea220] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8: 35.2%  3.0%  0.6%  direct: 8.8%  skip:52.3%  L0:28.7% L1:63.9% BI: 7.4%
[libx264 @ 0x14ea220] 8x8 transform intra:64.0% inter:59.5%
[libx264 @ 0x14ea220] coded y,uvDC,uvAC intra: 94.2% 99.5% 95.5% inter: 23.3% 55.5% 14.0%
[libx264 @ 0x14ea220] i16 v,h,dc,p: 75% 10%  5% 10%
[libx264 @ 0x14ea220] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 16% 12%  8%  7%  8%  8% 11% 11%
[libx264 @ 0x14ea220] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 17% 20%  7%  8%  9%  9% 10% 10% 11%
[libx264 @ 0x14ea220] i8c dc,h,v,p: 38% 31% 14% 17%
[libx264 @ 0x14ea220] Weighted P-Frames: Y:7.3% UV:4.4%
[libx264 @ 0x14ea220] ref P L0: 48.8% 14.2% 29.1%  7.5%  0.4%
[libx264 @ 0x14ea220] ref B L0: 65.4% 30.8%  3.7%
[libx264 @ 0x14ea220] ref B L1: 89.0% 11.0%
[libx264 @ 0x14ea220] kb/s:411.70

升级到ffmpeg 1.2.1修复了兼容性问题。在那之后,我的Android手机就可以播放视频了

ss选项比乍一看要复杂得多。根据它是在-i之前还是之后,它有不同的含义。事实证明,要让它发挥作用,你必须同时使用这两种方法。将主偏移量放在-i之前,这使ffmpeg跳到流中的该点。但是,你还需要一个小的非零偏移量,在-i之后,使它在流中寻找到那个点,这样音频和视频就会同步

作为参考,最终工作命令为:

ffmpeg -ss 00:03:52.00 -i in.mp4 -ss 0.1 -t 01:28:33.00 -c:v libx264 -preset medium -crf 20 -maxrate 400k -bufsize 1835k -c:a libvorbis -sn out.mkv

尝试使用:“-vcodec libx264-b:v 200k-bt 50k-threads 0-b_strategy 1-acodec copy-f mp4-strict-2您需要将完整的ffmpeg控制台输出与ffmpeg命令一起包括在内。