我有一个 MP4 文件,它可以在每个使用 HTML5 或 Flash 后备(使用 mediaelement.js)的浏览器上播放。我还有一系列额外的视频文件,我想“匹配”一个持续播放的文件,但我无法匹配 ffmpeg 设置,因此它会生成一个类似的文件。我使用 ffprobe 并在成功播放的文件上得到以下结果:
ffprobe version N-53616-g7a2edcf Copyright (c) 2007-2013 the FFmpeg developers
built on May 29 2013 01:21:08 with gcc 4.7.3 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetyp
e --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --ena
ble-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-l
ibopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libsp
eex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-
amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --
enable-libxvid --enable-zlib
libavutil 52. 34.100 / 52. 34.100
libavcodec 55. 12.102 / 55. 12.102
libavformat 55. 7.100 / 55. 7.100
libavdevice 55. 1.101 / 55. 1.101
libavfilter 3. 72.100 / 3. 72.100
libswscale 2. 3.100 / 2. 3.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 3.100 / 52. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'MyFile.mp4':
Metadata:
major_brand : M4V
minor_version : 1
compatible_brands: M4V mp42isom
creation_time : 2013-05-29 16:08:29
Duration: 00:01:58.10, start: 0.000000, bitrate: 1155 kb/s
Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 854x480 [SAR 1:1 DAR 427:240], 995 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc
Metadata:
creation_time : 2013-05-29 16:08:29
handler_name : Mainconcept MP4 Video Media Handler
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 157 kb/s
Metadata:
creation_time : 2013-05-29 16:08:29
handler_name : Mainconcept MP4 Sound Media Handler
按照我在网上找到的一些指南,我正在使用以下 ffmpeg 设置:
ffmpeg -i {input file name} -y -acodec aac -ac 2 -strict experimental -ab 64k -s 320x240 -vcodec libx264 -pix_fmt yuv420p -preset slow -profile:v baseline -level 30 -maxrate 300k -bufsize 600k -b:v 300k -f mp4 -threads 0 -movflags +faststart {output file name}
该命令产生以下输出:
ffmpeg -i "testin.mp4" -y -acodec aac -ac 2 -strict experimental -ab 64k -s 320x240 -vcodec libx264 -pix_fmt yuv420p -preset slow-profile:v baseline -level 30 -maxrate 300k -bufsize 600k -b:v 300k -f mp4 -threads 0 -movflags +faststart testout.mp4
ffmpeg version N-53616-g7a2edcf Copyright (c) 2000-2013 the FFmpeg developers built on May 29 2013 01:21:08 with gcc 4.7.3 (GCC) configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil 52. 34.100 / 52. 34.100
libavcodec 55. 12.102 / 55. 12.102
libavformat 55. 7.100 / 55. 7.100
libavdevice 55. 1.101 / 55. 1.101
libavfilter 3. 72.100 / 3. 72.100
libswscale 2. 3.100 / 2. 3.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 3.100 / 52. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'testin.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41
creation_time : 2013-10-01 17:11:42
Duration: 00:04:33.75, start: 0.000000, bitrate: 725 kb/s
Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 596 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc
Metadata:
creation_time : 2013-10-01 17:11:42
handler_name : ?Mainconcept Video Media Handler
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 125 kb/s
Metadata:
creation_time : 2013-10-01 17:11:42
handler_name : #Mainconcept MP4 Sound Media Handler
[libx264 @ 0000000000358160] using SAR=1/1
[libx264 @ 0000000000358160] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2AVX
[libx264 @ 0000000000358160] profile Constrained Baseline, level 3.0
[libx264 @ 0000000000358160] 264 - core 133 r2334 a3ac64b - H.264/MPEG-4 AVC codec - Copyleft 2003-2013 - http://www.videolan.org/x264.html - options: cabac=0 ref=5 deblock=1:0:0 analyse=0x1:0x111 me=umh subme=8 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=50 rc=cbr mbtree=1 bitrate=300 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=300 vbv_bufsize=600 nal_hrd=none ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'testout.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41
encoder : Lavf55.7.100
Stream #0:0(eng): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 320x240 [SAR 1:1 DAR 4:3], q=-1--1, 300 kb/s, 30k tbn, 29.97 tbc
Metadata:
creation_time : 2013-10-01 17:11:42
handler_name : ?Mainconcept Video Media Handler
Stream #0:1(eng): Audio: aac ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, 64 kb/s
Metadata:
creation_time : 2013-10-01 17:11:42
handler_name : #Mainconcept MP4 Sound Media Handler
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> libx264)
Stream #0:1 -> #0:1 (aac -> aac)
Press [q] to stop, [?] for help
frame= 283 fps=0.0 q=21.0 size= 329kB time=00:00:09.30 bitrate= 289.9kbits/
frame= 565 fps=564 q=20.0 size= 760kB time=00:00:18.64 bitrate= 333.7kbits/
frame= 846 fps=564 q=21.0 size= 1179kB time=00:00:28.20 bitrate= 342.5kbits/
frame= 1123 fps=561 q=22.0 size= 1603kB time=00:00:37.33 bitrate= 351.7kbits/
frame= 1376 fps=550 q=25.0 size= 1986kB time=00:00:45.69 bitrate= 356.1kbits/
frame= 1651 fps=550 q=22.0 size= 2377kB time=00:00:55.01 bitrate= 353.9kbits/
frame= 1914 fps=546 q=24.0 size= 2776kB time=00:01:03.70 bitrate= 357.0kbits/
frame= 2181 fps=545 q=24.0 size= 3163kB time=00:01:12.70 bitrate= 356.4kbits/
frame= 2443 fps=543 q=24.0 size= 3566kB time=00:01:21.38 bitrate= 358.9kbits/
frame= 2702 fps=540 q=24.0 size= 3939kB time=00:01:30.04 bitrate= 358.4kbits/
frame= 2965 fps=539 q=24.0 size= 4338kB time=00:01:38.73 bitrate= 359.9kbits/
frame= 3236 fps=539 q=23.0 size= 4731kB time=00:01:48.03 bitrate= 358.7kbits/
frame= 3505 fps=539 q=24.0 size= 5130kB time=00:01:56.75 bitrate= 360.0kbits/
frame= 3765 fps=537 q=26.0 size= 5521kB time=00:02:05.41 bitrate= 360.6kbits/
frame= 4036 fps=538 q=24.0 size= 5905kB time=00:02:14.59 bitrate= 359.4kbits/
frame= 4326 fps=540 q=24.0 size= 6343kB time=00:02:24.10 bitrate= 360.6kbits/
frame= 4606 fps=542 q=27.0 size= 6783kB time=00:02:33.49 bitrate= 362.0kbits/
frame= 4886 fps=543 q=24.0 size= 7168kB time=00:02:42.81 bitrate= 360.7kbits/
frame= 5166 fps=544 q=27.0 size= 7616kB time=00:02:52.13 bitrate= 362.5kbits/
frame= 5456 fps=545 q=24.0 size= 8020kB time=00:03:01.84 bitrate= 361.3kbits/
frame= 5736 fps=546 q=27.0 size= 8458kB time=00:03:11.18 bitrate= 362.4kbits/
frame= 6001 fps=545 q=30.0 size= 8849kB time=00:03:20.17 bitrate= 362.1kbits/
frame= 6264 fps=544 q=27.0 size= 9233kB time=00:03:28.85 bitrate= 362.2kbits/
frame= 6526 fps=544 q=26.0 size= 9611kB time=00:03:37.55 bitrate= 361.9kbits/
frame= 6793 fps=543 q=26.0 size= 10006kB time=00:03:46.51 bitrate= 361.9kbits/
frame= 7076 fps=544 q=24.0 size= 10410kB time=00:03:55.86 bitrate= 361.6kbits/
frame= 7355 fps=544 q=25.0 size= 10835kB time=00:04:05.20 bitrate= 362.0kbits/
frame= 7615 fps=543 q=27.0 size= 11236kB time=00:04:13.88 bitrate= 362.5kbits/
frame= 7883 fps=543 q=25.0 size= 11625kB time=00:04:22.89 bitrate= 362.3kbits/
frame= 8166 fps=544 q=21.0 size= 12040kB time=00:04:32.31 bitrate= 362.2kbits/
Starting second pass: moving header on top of the file
frame= 8203 fps=540 q=-1.0 Lsize= 12417kB time=00:04:33.74 bitrate= 371.6kbits/s
video:10035kB audio:2150kB subtitle:0 global headers:0kB muxing overhead 1.901929%
[libx264 @ 0000000000358160] frame I:41 Avg QP:14.13 size: 18349
[libx264 @ 0000000000358160] frame P:8162 Avg QP:17.24 size: 1167
[libx264 @ 0000000000358160] mb I I16..4: 24.8% 0.0% 75.2%
[libx264 @ 0000000000358160] mb P I16..4: 0.4% 0.0% 0.3% P16..4: 29.1% 6.4% 3.2% 0.0% 0.0% skip:60.7%
[libx264 @ 0000000000358160] coded y,uvDC,uvAC intra: 66.1% 74.1% 53.1% inter: 15.3% 20.2% 4.0%
[libx264 @ 0000000000358160] i16 v,h,dc,p: 23% 21% 11% 45%
[libx264 @ 0000000000358160] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 21% 25% 14% 6% 7% 7% 7% 6% 7%
[libx264 @ 0000000000358160] i8c dc,h,v,p: 43% 28% 19% 10%
[libx264 @ 0000000000358160] ref P L0: 78.4% 12.6% 4.9% 2.4% 1.7%
[libx264 @ 0000000000358160] kb/s:300.33
上述咒语的一个问题是,在 iPad 和 iPhone 以及一些 Android 平板电脑上,您听到的只是没有视频的音频。但是上面列出的文件(ffprobe 的内容)没有这个问题,它可以在 iPad、iPhone、Android 平板电脑上播放。我研究了“音频,没有视频”的原因,并且建议到处都是。但是,ffprobe 中列出的文件可以播放,所以如果我可以匹配 ffprobe 描述的所有其他视频的设置,它们也应该可以一致地播放。我的挑战是使用 ffmpeg 匹配 ffprobe 设置,我在 ffprobe 中看到的内容与 ffmpeg 中的相应设置之间似乎没有一对一的匹配(一个不错的实用程序是让 ffprobe 输出可以用于创建类似格式的文件)。
我浏览了 ffprobe 文档,但找不到任何可以生成可用作 ffmpeg 输入的格式的内容。建议?