![ffmpeg 编码为 VP9 会导致 Google Chrome 无法播放视频,而编码为 VP8 则可以播放](https://linux22.com/image/1470099/ffmpeg%20%E7%BC%96%E7%A0%81%E4%B8%BA%20VP9%20%E4%BC%9A%E5%AF%BC%E8%87%B4%20Google%20Chrome%20%E6%97%A0%E6%B3%95%E6%92%AD%E6%94%BE%E8%A7%86%E9%A2%91%EF%BC%8C%E8%80%8C%E7%BC%96%E7%A0%81%E4%B8%BA%20VP8%20%E5%88%99%E5%8F%AF%E4%BB%A5%E6%92%AD%E6%94%BE.png)
自从我遇到主题中指定的问题以来,已经过去了很多时间。
我尝试了多个ffmpeg
静态构建,自己使用不同的标志从 Git 存储库构建了它,并在所有主流操作系统上构建了它,甚至构建了libvpx
,但问题仍然存在。我无法让 ffmpeg 编码VP9
视频,这不会使 Google Chrome 崩溃。
我有一个Intel Core 2 Quad Q9550
4 核的,例如,我使用带有以下选项的brew
-built :ffmpeg
ffmpeg version 2.8.1 Copyright (c) 2000-2015 the FFmpeg developers
built with Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
configuration: --prefix=/usr/local/Cellar/ffmpeg/2.8.1_1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-libfreetype --enable-libvorbis --enable-libvpx --enable-libass --enable-ffplay --enable-libfdk-aac --enable-libopus --enable-libquvi --enable-libx265 --enable-nonfree --enable-vda
libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
有问题的视频是:
General
Complete name : OneSecondTestYUV422.mov
Format : MPEG-4
Format profile : QuickTime
Codec ID : qt
File size : 13.0 MiB
Duration : 1s 0ms
Overall bit rate mode : Variable
Overall bit rate : 109 Mbps
Movie name : Untitled Project
Description : This video is about Untitled Project
Encoded date : UTC 2015-10-17 16:43:21
Tagged date : UTC 2015-10-17 16:43:22
Writing library : Apple QuickTime
com.apple.quicktime.keywords : ProRes Samples
com.apple.quicktime.author : No Name
com.apple.quicktime.title : Untitled Project
Video
ID : 1
Format : ProRes
Format version : Version 0
Format profile : 422
Codec ID : apcn
Duration : 1s 0ms
Bit rate mode : Variable
Bit rate : 106 Mbps
Width : 1 920 pixels
Height : 1 080 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 24.000 fps
Color space : YUV
Chroma subsampling : 4:2:2
Scan type : Progressive
Bits/(Pixel*Frame) : 2.138
Stream size : 12.7 MiB (98%)
Title : Core Media Video
Writing library : Apple
Encoded date : UTC 2015-10-17 16:43:21
Tagged date : UTC 2015-10-17 16:43:22
Color primaries : BT.709
Transfer characteristics : BT.709
Matrix coefficients : BT.709
Audio
ID : 2
Format : PCM
Format settings, Endianness : Little
Format settings, Sign : Signed
Codec ID : lpcm
Duration : 1s 0ms
Bit rate mode : Constant
Bit rate : 2 304 Kbps
Channel(s) : 2 channels
Channel positions : Front: L R
Sampling rate : 48.0 KHz
Bit depth : 24 bits
Stream size : 281 KiB (2%)
Title : Core Media Audio
Encoded date : UTC 2015-10-17 16:43:21
Tagged date : UTC 2015-10-17 16:43:22
Other
ID : 3
Type : Time code
Format : QuickTime TC
Duration : 1s 0ms
Time code of first frame : 00:00:00:00
Time code, striped : Yes
Title : Core Media Time Code
Encoded date : UTC 2015-10-17 16:43:22
Tagged date : UTC 2015-10-17 16:43:22
我传递的命令ffmpeg
是:
ffmpeg -i OneSecondTestYUV422.mov -map 0:0 -map 0:1 -c:a libvorbis -async 1 -c:v libvpx-vp9 -b:v 17418.24k -maxrate 34836.48k -bufsize 34836.48k -r 24 -s 1920x1080 -aspect 16:9 -trellis 0 -subq 6 -me_range 16 -b_strategy 1 -refs 3 -sws_flags fast_bilinear -direct-pred 1 -sc_threshold 40 -qmin 2 -qmax 51 -copyts -threads 4 -sn -y UnplayableResult.webm
我在互联网上搜索了很多次,包括这些网站,但无济于事。
答案1
好像我明白了(有趣的是,我遇到了这个问题好几天,最终在问题发布后解决了它)。
ffmpeg
看到原始视频具有像素格式,YUV 4:2:2
并相应地将其编码为相同格式。但是,Google Chrome 似乎不支持这种像素格式,并且它希望它是YUV 4:2:0
。
因此,我已经传递-pix_fmt yuv420p
到命令行,瞧,我有一个可在 Google Chrome 中播放的视频!
答案2
我遇到了类似的问题:我去年编码的 WebM-VP9 视频中有些可以在 Firefox 中播放,有些则不能(Firefox 44、45、Mac OS X)。但是 Firefox 39 可以播放所有视频!?
感谢 TranslucentCloud 的提示,我终于使用 ffprobe 检查了一些文件。它们只是在以下方面有所不同:yuv422p(电视)对阵yuv420p(电视)。
-pix_fmt:v yuv420p
在编码的第二轮中添加该选项后,我的麻烦就解决了。视频在所有 Firefox 版本中均可播放,效果很好。