我有两个视频 (.mp4) 文件。一个上传到 Whatsapp,另一个则不上传。
使用 ffmpeg 我检查了它们的属性:
a) 上传视频的属性:
Duration: 00:00:56.45, start: 0.148000, bitrate: 1404 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1080x1080, 1359 kb/s, 23.98 fps, 23.98 tbr, 90k tbn, 47.95 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (HE-AACv2) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 47 kb/s (default)
Metadata:
handler_name : SoundHandler
At least one output file must be specified
b)视频未上传到whatsapp(因为它说格式不支持)
Duration: 00:00:56.10, start: 0.000000, bitrate: 543 kb/s
Stream #0:0: Video: h264 (High) (H264 / 0x34363248), yuv420p, 1080x1080 [SAR 1:1 DAR 1:1], 464 kb/s, 23.98 fps, 23.98 tbr, 23.98 tbn, 47.95 tbc
Stream #0:1: Audio: aac (LC) ([255][0][0][0] / 0x00FF), 48000 Hz, stereo, fltp, 56 kb/s
我注意到视频中的差异:
(avc1 / 0x31637661)
vs (H264 / 0x34363248)
1359 kb/s
vs 464 kb/s
90k tbn
vs 23.98 tbn
可能是什么原因?
第二个视频也无法在 Android 中播放。
视频链接是 https://drive.google.com/open?id=0B4UM6vTHw4pyMExQQ1lxZGp0N2c
有一些选项可以实现更好的兼容性:
ffmpeg -i broken.mp4 -c:v libx264 -profile:v baseline -level 3.0 -pix_fmt yuv420p working.mp4
使用
-profile:v baseline -level 3.0
,您可以使文件与大多数老玩家更加兼容,包括 WhatsApp ;)。尽管如此,这会禁用一些高级功能。
-pix_fmt yuv420p
需要编译到基线(具有 4:2:0 色度子采样的 YUV 平面色彩空间)。
此外,您还可以调整其他选项,如比特率、帧率、音频等。
来源:H.264 文档
ffmpeg -i brokenvideo.mp4 -c:v libx264 -c:a aac fixedvideo.mp4
还必须应用此修复:FFMPEG(libx264)“高度不能被 2 整除”
我尝试了之前的所有命令,但出现了一些错误。我能够使用此命令对我的视频进行编码,以下是解释以及为什么我这样设置它以获得更好的兼容性:
ffmpeg -i input.mp4 \
-c:v libx264 -pix_fmt yuv420p \
-profile:v baseline -level 3.0 \
-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -vb 1024k \
-acodec aac -ar 44100 -ac 2\
-minrate 1024k -maxrate 1024k -bufsize 1024k \
-movflags +faststart \
output.mp4
-acodec aac -ar 44100 -ac 2
更改为 -acodec copy
来进行流复制,而不是重新编码,以保持音频质量。
选项 | 解释 |
---|---|
|
选择视频编码器libx264 |
|
确保 YUV 4:2:0 色度二次采样以实现兼容性 |
|
将编码配置文件设置为 baseline。主要用于需要额外数据丢失稳健性的低成本应用程序 |
|
将操作点级别设置为3.0,这是与WhatsApp兼容所必需的 |
|
如果出现不能被 2 整除的错误,请参阅 |
|
选择音频编码器aac |
|
将最小比特率容差设置为 1024k(以位/秒为单位)。不然就没啥用了 |
|
将最大比特率容限设置为 1024k(以位/秒为单位)。需要设置bufsize |
|
将速率控制缓冲区大小设置为 1024k(以位为单位) |
|
启用流媒体快速启动 |
通常,MP4 文件的所有“元数据”数据包都存储在文件末尾,以名为“原子”的数据单元形式存储。 mdat
原子位于 moov
原子之前。如果文件是通过添加
-movflags faststart
创建的,则 moov
原子会移动到 MP4 文件的开头。通过使用此选项,moov
原子位于 mdat
原子之前。这允许在文件完全下载之前开始视频播放。这对我2020年有用
2023-01-22 我使用了得票最多的答案格式,它适用于视频,但音频不适用于 iPhone。这对我有用:
我必须添加
-ac 2
,因为 iOS 不将我的音频格式视为立体声。
复制@teocci的答案
ffmpeg -i 'input.mp4' `
-c:v libx264 -pix_fmt yuv420p `
-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -vb 1024k `
-acodec aac -ar 44100 -ac 2 `
-minrate 1024k -maxrate 1024k -bufsize 1024k `
-movflags +faststart `
output.mp4
如果您的视频已有 aac:
ffmpeg -i 'input.mp4' `
-c:v libx264 -pix_fmt yuv420p `
-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -vb 1024k `
-acodec copy `
-minrate 1024k -maxrate 1024k -bufsize 1024k `
-movflags +faststart `
output.mp4
查看原始答案以了解模式详细信息。不允许发表评论,所以改为发布答案
Если у пользователя возникли проблемы с отправкой контента, требуется выяснить, поддерживает ли приложение файлы этого типа。 О всех путях решения этих проблем пошагово рассказано на этом ресурсе:
https://faqchat.ru/kakoi-format-video-podderzhivaet-vatsap/