FFmpeg - 将 AVI 转换为 MP4(QuickTime 播放器中没有音频)
FFmpeg - Converting AVI to MP4 (no audio in QuickTime player)
我用下面的命令将一个avi文件转换成mp4文件,但是转换后的mp4文件用QuickTime播放时没有声音(其他播放器没有这个问题)。我能够使用相同的命令将 mkv 转换为 mp4 而没有音频问题。
ffmpeg -i show.avi -vcodec libx264 -vprofile high -crf 28 -acodec copy show.mp4
但是我能够通过以下两个命令解决问题(首先将音频从 mp4 文件提取到 mp3 文件,然后将 mp4 文件与 mp3 文件合并)。
ffmpeg -i show.mp4 -vn -acodec libmp3lame -ac 2 -qscale:a 4 -ar 48000 show.mp3
ffmpeg -i show.mp4 -i show.mp3 show2.mp4
show2.mp4 显示 QuickTime 没有音频问题。有人知道第一个命令有什么问题吗?
下面是我的 ffmpeg 信息。
% ffmpeg -i show.avi -vcodec libx264 -vprofile high -crf 28 -acodec copy show.mp4
ffmpeg version N-60236-gffb000fff8-static https://johnvansickle.com/ffmpeg/ \
Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug \
--disable-ffplay --disable-indev=sndio --disable-outdev=sndio \
--cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls \
--enable-gmp --enable-libgme --enable-gray --enable-libaom \
--enable-libfribidi --enable-libass --enable-libvmaf \
--enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb \
--enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband \
--enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis \
--enable-libopus --enable-libtheora --enable-libvidstab \
--enable-libvo-amrwbenc --enable-libvpx --enable-libwebp \
--enable-libx264 --enable-libx265 --enable-libxml2 \
--enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
libavutil 57. 18.100 / 57. 18.100
libavcodec 59. 20.100 / 59. 20.100
libavformat 59. 17.100 / 59. 17.100
libavdevice 59. 5.100 / 59. 5.100
libavfilter 8. 25.100 / 8. 25.100
libswscale 6. 5.100 / 6. 5.100
libswresample 4. 4.100 / 4. 4.100
libpostproc 56. 4.100 / 56. 4.100
Input #0, avi, from 'show.avi':
Metadata:
software : Nandub v1.0rc2
Duration: 01:38:52.93, start: 0.000000, bitrate: 984 kb/s
Stream #0:0: Video: msmpeg4v3 (DIV3 / 0x33564944), yuv420p, \
576x240, 842 kb/s, 23.98 fps, 23.98 tbr, 23.98 tbn
Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (msmpeg4v3 (msmpeg4) -> h264 (libx264))
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[libx264 @ 0x76824c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x76824c0] profile High, level 2.1, 4:2:0, 8-bit
[libx264 @ 0x76824c0] 264 - core 164 r3081 19856cc - H.264/MPEG-4 \
AVC codec - Copyleft 2003-2021 - 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=7 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=23 \
scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 \
crf=28.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 \
aq=1:1.00
Output #0, mp4, to 'show.mp4':
Metadata:
software : Nandub v1.0rc2
encoder : Lavf59.17.100
Stream #0:0: Video: h264 (avc1 / 0x31637661), yuv420p(progressive),\
576x240, q=2-31, 23.98 fps, 11988 tbn
Metadata:
encoder : Lavc59.20.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
Stream #0:1: Audio: mp3 (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
frame= 1 fps=0.0 q=0.0 size= 0kB time=00:00:00.48 bitrate= \
0.8kbits/sframe= 120 fps=0.0 q=-1.0 Lsize= 148kB \
time=00:00:05.01 bitrate= 242.5kbits/s speed=21.2x
video:71kB audio:73kB subtitle:0kB other streams:0kB global headers:0kB \
muxing overhead: 3.456417%
[libx264 @ 0x76824c0] frame I:1 Avg QP: 9.52 size: 77
[libx264 @ 0x76824c0] frame P:65 Avg QP:26.99 size: 1030
[libx264 @ 0x76824c0] frame B:54 Avg QP:22.71 size: 92
[libx264 @ 0x76824c0] consecutive B-frames: 32.5% 16.7% 17.5% 33.3%
[libx264 @ 0x76824c0] mb I I16..4: 100.0% 0.0% 0.0%
[libx264 @ 0x76824c0] mb P I16..4: 0.2% 1.3% 0.1% P16..4: 13.7% 5.2% \
4.2% 0.0% 0.0% skip:75.4%
[libx264 @ 0x76824c0] mb B I16..4: 0.4% 0.2% 0.0% B16..8: 7.8% 0.4% \
0.0% direct: 0.1% skip:91.1% L0:41.8% L1:50.0% BI: 8.2%
[libx264 @ 0x76824c0] 8x8 transform intra:39.3% inter:58.4%
[libx264 @ 0x76824c0] coded y,uvDC,uvAC intra: 8.9% 6.7% 2.4% inter: 5.5% \
4.8% 1.1%
[libx264 @ 0x76824c0] i16 v,h,dc,p: 80% 9% 11% 0%
[libx264 @ 0x76824c0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 12% 10% 69% 2% 2% 2% \
1% 2% 1%
[libx264 @ 0x76824c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 13% 38% 5% 6% 6% \
5% 4% 3%
[libx264 @ 0x76824c0] i8c dc,h,v,p: 68% 14% 17% 0%
[libx264 @ 0x76824c0] Weighted P-Frames: Y:27.7% UV:15.4%
[libx264 @ 0x76824c0] ref P L0: 75.3% 11.5% 8.5% 3.4% 1.3%
[libx264 @ 0x76824c0] ref B L0: 83.8% 11.1% 5.1%
[libx264 @ 0x76824c0] ref B L1: 98.9% 1.1%
[libx264 @ 0x76824c0] kb/s:115.09
从你的日志中我可以看出你输入的音频是 MP3。
Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
大多数系统希望 MPEG 容器 (MP4) 将 AAC 音频作为标准。
- 实际的 MP4 音频编解码器可以是 AAC、AC3、ALAC、CELP 等等。
- 但为了保持一种标准,他们更喜欢 AAC。
- 自己使用 AAC 是大多数媒体播放器中通用播放的最安全选择。
如果输入视频有非 AAC 音频,最快的解决方法是不使用-acodec copy
。
解法:
ffmpeg -i show.avi -vcodec libx264 -vprofile high -crf 28 show.mp4
PS:
关于ffmpeg -i show.mp4 -i show.mp3 show2.mp4
。没有必要创建临时 MP3 文件。这里你告诉 FFmpeg 忽略 show.mp4
里面的 MP3 和使用 show.mp3
的 MP3 这实际上是一回事
您无需制作 MP3 文件的中间步骤即可获得相同的结果。
ffmpeg -i show.mp4 -c:v copy show2.mp4
输出 show2.mp4
现在将有 AAC 音频(除非您指定不同的编解码器,否则这是 FFmpeg 对 MP4 的默认选择)。
我用下面的命令将一个avi文件转换成mp4文件,但是转换后的mp4文件用QuickTime播放时没有声音(其他播放器没有这个问题)。我能够使用相同的命令将 mkv 转换为 mp4 而没有音频问题。
ffmpeg -i show.avi -vcodec libx264 -vprofile high -crf 28 -acodec copy show.mp4
但是我能够通过以下两个命令解决问题(首先将音频从 mp4 文件提取到 mp3 文件,然后将 mp4 文件与 mp3 文件合并)。
ffmpeg -i show.mp4 -vn -acodec libmp3lame -ac 2 -qscale:a 4 -ar 48000 show.mp3
ffmpeg -i show.mp4 -i show.mp3 show2.mp4
show2.mp4 显示 QuickTime 没有音频问题。有人知道第一个命令有什么问题吗?
下面是我的 ffmpeg 信息。
% ffmpeg -i show.avi -vcodec libx264 -vprofile high -crf 28 -acodec copy show.mp4
ffmpeg version N-60236-gffb000fff8-static https://johnvansickle.com/ffmpeg/ \
Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug \
--disable-ffplay --disable-indev=sndio --disable-outdev=sndio \
--cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls \
--enable-gmp --enable-libgme --enable-gray --enable-libaom \
--enable-libfribidi --enable-libass --enable-libvmaf \
--enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb \
--enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband \
--enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis \
--enable-libopus --enable-libtheora --enable-libvidstab \
--enable-libvo-amrwbenc --enable-libvpx --enable-libwebp \
--enable-libx264 --enable-libx265 --enable-libxml2 \
--enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
libavutil 57. 18.100 / 57. 18.100
libavcodec 59. 20.100 / 59. 20.100
libavformat 59. 17.100 / 59. 17.100
libavdevice 59. 5.100 / 59. 5.100
libavfilter 8. 25.100 / 8. 25.100
libswscale 6. 5.100 / 6. 5.100
libswresample 4. 4.100 / 4. 4.100
libpostproc 56. 4.100 / 56. 4.100
Input #0, avi, from 'show.avi':
Metadata:
software : Nandub v1.0rc2
Duration: 01:38:52.93, start: 0.000000, bitrate: 984 kb/s
Stream #0:0: Video: msmpeg4v3 (DIV3 / 0x33564944), yuv420p, \
576x240, 842 kb/s, 23.98 fps, 23.98 tbr, 23.98 tbn
Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (msmpeg4v3 (msmpeg4) -> h264 (libx264))
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[libx264 @ 0x76824c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x76824c0] profile High, level 2.1, 4:2:0, 8-bit
[libx264 @ 0x76824c0] 264 - core 164 r3081 19856cc - H.264/MPEG-4 \
AVC codec - Copyleft 2003-2021 - 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=7 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=23 \
scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 \
crf=28.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 \
aq=1:1.00
Output #0, mp4, to 'show.mp4':
Metadata:
software : Nandub v1.0rc2
encoder : Lavf59.17.100
Stream #0:0: Video: h264 (avc1 / 0x31637661), yuv420p(progressive),\
576x240, q=2-31, 23.98 fps, 11988 tbn
Metadata:
encoder : Lavc59.20.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
Stream #0:1: Audio: mp3 (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s
frame= 1 fps=0.0 q=0.0 size= 0kB time=00:00:00.48 bitrate= \
0.8kbits/sframe= 120 fps=0.0 q=-1.0 Lsize= 148kB \
time=00:00:05.01 bitrate= 242.5kbits/s speed=21.2x
video:71kB audio:73kB subtitle:0kB other streams:0kB global headers:0kB \
muxing overhead: 3.456417%
[libx264 @ 0x76824c0] frame I:1 Avg QP: 9.52 size: 77
[libx264 @ 0x76824c0] frame P:65 Avg QP:26.99 size: 1030
[libx264 @ 0x76824c0] frame B:54 Avg QP:22.71 size: 92
[libx264 @ 0x76824c0] consecutive B-frames: 32.5% 16.7% 17.5% 33.3%
[libx264 @ 0x76824c0] mb I I16..4: 100.0% 0.0% 0.0%
[libx264 @ 0x76824c0] mb P I16..4: 0.2% 1.3% 0.1% P16..4: 13.7% 5.2% \
4.2% 0.0% 0.0% skip:75.4%
[libx264 @ 0x76824c0] mb B I16..4: 0.4% 0.2% 0.0% B16..8: 7.8% 0.4% \
0.0% direct: 0.1% skip:91.1% L0:41.8% L1:50.0% BI: 8.2%
[libx264 @ 0x76824c0] 8x8 transform intra:39.3% inter:58.4%
[libx264 @ 0x76824c0] coded y,uvDC,uvAC intra: 8.9% 6.7% 2.4% inter: 5.5% \
4.8% 1.1%
[libx264 @ 0x76824c0] i16 v,h,dc,p: 80% 9% 11% 0%
[libx264 @ 0x76824c0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 12% 10% 69% 2% 2% 2% \
1% 2% 1%
[libx264 @ 0x76824c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 13% 38% 5% 6% 6% \
5% 4% 3%
[libx264 @ 0x76824c0] i8c dc,h,v,p: 68% 14% 17% 0%
[libx264 @ 0x76824c0] Weighted P-Frames: Y:27.7% UV:15.4%
[libx264 @ 0x76824c0] ref P L0: 75.3% 11.5% 8.5% 3.4% 1.3%
[libx264 @ 0x76824c0] ref B L0: 83.8% 11.1% 5.1%
[libx264 @ 0x76824c0] ref B L1: 98.9% 1.1%
[libx264 @ 0x76824c0] kb/s:115.09
从你的日志中我可以看出你输入的音频是 MP3。
Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s
大多数系统希望 MPEG 容器 (MP4) 将 AAC 音频作为标准。
- 实际的 MP4 音频编解码器可以是 AAC、AC3、ALAC、CELP 等等。
- 但为了保持一种标准,他们更喜欢 AAC。
- 自己使用 AAC 是大多数媒体播放器中通用播放的最安全选择。
如果输入视频有非 AAC 音频,最快的解决方法是不使用-acodec copy
。
解法:
ffmpeg -i show.avi -vcodec libx264 -vprofile high -crf 28 show.mp4
PS:
关于ffmpeg -i show.mp4 -i show.mp3 show2.mp4
。没有必要创建临时 MP3 文件。这里你告诉 FFmpeg 忽略 show.mp4
里面的 MP3 和使用 show.mp3
的 MP3 这实际上是一回事
您无需制作 MP3 文件的中间步骤即可获得相同的结果。
ffmpeg -i show.mp4 -c:v copy show2.mp4
输出 show2.mp4
现在将有 AAC 音频(除非您指定不同的编解码器,否则这是 FFmpeg 对 MP4 的默认选择)。