我有一个文件-sample.mkv
=========================================================
File: sample.mkv
Width: 854 pixels
Height: 480 pixels
Aspect ratio: 1.77:1
Frames: 0
Duration: 00:00:33 hours/mins/secs
Framerate: 25.000 frames per second
Video format: H264
Video bitrate: 0 bits per second
---------------------------
Audio track 1 (Stream 0.1, AID 0):
---------------------------
Codec: pcm_s16le
Bitrate: 4233000 bits per second
Sampling rate: 44100 Hz
=========================================================
我想通过 ffmpeg 将其重新编码到 FLV 容器中:
$ ffmpeg -i sample.mkv -b:a 4233k -c:v h264 -c:a pcm_s16le sample.flv
但我收到了:
=========================================================
File: sample.flv
Width: 854 pixels
Height: 480 pixels
Aspect ratio: 1.77:1
Frames: 0
Duration: 00:00:33 hours/mins/secs
Framerate: 25.000 frames per second
Video format: H264
Video bitrate: 0 bits per second
---------------------------
Audio track 1 (Stream 0.1, AID 0):
---------------------------
Codec: pcm_s16le
Bitrate: 1411000 bits per second
Sampling rate: 44100 Hz
=========================================================
为什么比特率会从 4233000 变为 1411000?
这样一来,声音就变得很差了 :(
更新完整日志
ffmpeg -i sample.mkv -b:a 4233k -c:v h264 -c:a pcm_s16le sample.flv
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
configuration: --prefix=/opt/ffmpeg --libdir=/opt/ffmpeg/lib/ --enable-shared --enable-avresample --disable-stripping --enable-gpl --enable-version3 --enable-nonfree --enable-runtime-cpudetect --build-suffix=.ffmpeg --enable-postproc --enable-x11grab --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libdc1394 --enable-libfaac --enable-libfdk_aac --enable-libflite --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libvo-aacenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-openal --enable-opengl --enable-pthreads --enable-vaapi --enable-vdpau --enable-zlib --enable-debug=3
libavutil 54. 20.100 / 54. 20.100
libavcodec 56. 26.100 / 56. 26.100
libavformat 56. 25.101 / 56. 25.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 11.102 / 5. 11.102
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Guessed Channel Layout for Input Stream #0.1 : 5.1
Input #0, matroska,webm, from 'sample.mkv':
Metadata:
MINOR_VERSION : 512
COMPATIBLE_BRANDS: qt
MAJOR_BRAND : qt
ENCODER : Lavf56.25.101
Duration: 00:00:33.08, start: 0.080000, bitrate: 4691 kb/s
Stream #0:0(eng): Video: h264 (High), yuv420p, 854x480 [SAR 1:1 DAR 427:240], 25 fps, 25 tbr, 1k tbn, 50 tbc (default)
Metadata:
LANGUAGE : eng
HANDLER_NAME : DataHandler
ENCODER : Lavc56.26.100 libx264
Stream #0:1(eng): Audio: pcm_s16le, 44100 Hz, 6 channels, s16, 4233 kb/s (default)
Metadata:
LANGUAGE : eng
HANDLER_NAME : DataHandler
ENCODER : Lavc56.26.100 pcm_s16le
[libx264 @ 0x914de0] using SAR=1/1
[libx264 @ 0x914de0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x914de0] profile High, level 3.0
[libx264 @ 0x914de0] 264 - core 142 r2389 956c8d8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - 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=6 lookahead_threads=1 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=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, flv, to 'sample.flv':
Metadata:
MINOR_VERSION : 512
COMPATIBLE_BRANDS: qt
MAJOR_BRAND : qt
encoder : Lavf56.25.101
Stream #0:0(eng): Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p, 854x480 [SAR 1:1 DAR 427:240], q=-1--1, 25 fps, 1k tbn, 25 tbc (default)
Metadata:
LANGUAGE : eng
HANDLER_NAME : DataHandler
encoder : Lavc56.26.100 libx264
Stream #0:1(eng): Audio: pcm_s16le ([3][0][0][0] / 0x0003), 44100 Hz, 5.1, s16, 4233 kb/s (default)
Metadata:
LANGUAGE : eng
HANDLER_NAME : DataHandler
encoder : Lavc56.26.100 pcm_s16le
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (pcm_s16le (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
frame= 812 fps= 93 q=-1.0 Lsize= 18938kB time=00:00:33.00 bitrate=4700.7kbits/s
video:1841kB audio:17056kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.214361%
[libx264 @ 0x914de0] frame I:23 Avg QP:16.97 size: 20207
[libx264 @ 0x914de0] frame P:294 Avg QP:20.61 size: 3904
[libx264 @ 0x914de0] frame B:495 Avg QP:23.24 size: 550
[libx264 @ 0x914de0] consecutive B-frames: 15.0% 7.9% 9.6% 67.5%
[libx264 @ 0x914de0] mb I I16..4: 34.6% 45.1% 20.3%
[libx264 @ 0x914de0] mb P I16..4: 3.5% 12.4% 0.8% P16..4: 19.1% 5.7% 2.4% 0.0% 0.0% skip:56.0%
[libx264 @ 0x914de0] mb B I16..4: 0.4% 0.4% 0.1% B16..8: 12.5% 1.0% 0.1% direct: 0.5% skip:85.1% L0:43.1% L1:50.9% BI: 5.9%
[libx264 @ 0x914de0] 8x8 transform intra:64.0% inter:75.7%
[libx264 @ 0x914de0] coded y,uvDC,uvAC intra: 33.0% 43.7% 13.4% inter: 4.1% 6.8% 1.0%
[libx264 @ 0x914de0] i16 v,h,dc,p: 53% 22% 9% 16%
[libx264 @ 0x914de0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 27% 21% 27% 3% 5% 4% 5% 4% 4%
[libx264 @ 0x914de0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 28% 20% 12% 5% 7% 9% 6% 8% 5%
[libx264 @ 0x914de0] i8c dc,h,v,p: 62% 20% 14% 5%
[libx264 @ 0x914de0] Weighted P-Frames: Y:32.0% UV:30.6%
[libx264 @ 0x914de0] ref P L0: 72.5% 16.1% 8.0% 3.3% 0.1%
[libx264 @ 0x914de0] ref B L0: 86.4% 11.6% 2.0%
[libx264 @ 0x914de0] ref B L1: 95.1% 4.9%
[libx264 @ 0x914de0] kb/s:464.26
更新2:
ffmpeg -i sample.mkv -ac 6 -c copy sample.flv
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
configuration: --prefix=/opt/ffmpeg --libdir=/opt/ffmpeg/lib/ --enable-shared --enable-avresample --disable-stripping --enable-gpl --enable-version3 --enable-nonfree --enable-runtime-cpudetect --build-suffix=.ffmpeg --enable-postproc --enable-x11grab --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libdc1394 --enable-libfaac --enable-libfdk_aac --enable-libflite --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libvo-aacenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-openal --enable-opengl --enable-pthreads --enable-vaapi --enable-vdpau --enable-zlib --enable-debug=3
libavutil 54. 20.100 / 54. 20.100
libavcodec 56. 26.100 / 56. 26.100
libavformat 56. 25.101 / 56. 25.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 11.102 / 5. 11.102
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Guessed Channel Layout for Input Stream #0.1 : 5.1
Input #0, matroska,webm, from 'sample.mkv':
Metadata:
MINOR_VERSION : 512
COMPATIBLE_BRANDS: qt
MAJOR_BRAND : qt
ENCODER : Lavf56.25.101
Duration: 00:00:33.08, start: 0.080000, bitrate: 4691 kb/s
Stream #0:0(eng): Video: h264 (High), yuv420p, 854x480 [SAR 1:1 DAR 427:240], 25 fps, 25 tbr, 1k tbn, 50 tbc (default)
Metadata:
LANGUAGE : eng
HANDLER_NAME : DataHandler
ENCODER : Lavc56.26.100 libx264
Stream #0:1(eng): Audio: pcm_s16le, 44100 Hz, 6 channels, s16, 4233 kb/s (default)
Metadata:
LANGUAGE : eng
HANDLER_NAME : DataHandler
ENCODER : Lavc56.26.100 pcm_s16le
Output #0, flv, to 'sample.flv':
Metadata:
MINOR_VERSION : 512
COMPATIBLE_BRANDS: qt
MAJOR_BRAND : qt
encoder : Lavf56.25.101
Stream #0:0(eng): Video: h264 ([7][0][0][0] / 0x0007), yuv420p, 854x480 [SAR 1:1 DAR 427:240], q=2-31, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
Metadata:
LANGUAGE : eng
HANDLER_NAME : DataHandler
ENCODER : Lavc56.26.100 libx264
Stream #0:1(eng): Audio: pcm_s16le ([3][0][0][0] / 0x0003), 44100 Hz, 5.1, 4233 kb/s (default)
Metadata:
LANGUAGE : eng
HANDLER_NAME : DataHandler
ENCODER : Lavc56.26.100 pcm_s16le
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 812 fps=0.0 q=-1.0 Lsize= 18968kB time=00:00:33.00 bitrate=4708.2kbits/s
video:1872kB audio:17056kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.214011%
答案1
据我所知,FLV 格式不正式支持 PCM 格式的未压缩音频(请参阅规格)。但是,您仍然可以使用 ffmpeg 将 PCM 音频多路复用到 FLV 中。似乎存在错误或不兼容问题,无法ffplay
正确播放音频,但在 VLC 中对我来说是可行的:
ffmpeg -i sample.mkv -c copy sample.flv
如果您希望与其他播放器更兼容,您可能需要将音频限制为两个通道。具体操作如下:
ffmpeg -i sample.mkv -c:v copy -c:a pcm_s16le -ac 2 sample.flv
这会减少音频通道的数量,但不会损失任何质量。比特率看起来会更低,但通道数会减少。
您的其他选择是 AAC 音频或 MP3 音频:
ffmpeg -i sample.mkv -c:v copy -c:a aac -strict experimental -b:a 128k sample.flv
ffmpeg -i sample.mkv -c:v copy -c:a libmp3lame sample.flv
这会自动将多声道音频转换为立体声。
请注意,如果在 FLV 中使用 MP3,您将被限制使用以下音频采样率:44100、22050、11025。可以使用选项-ar
或aresample
筛选。