ffmpeg - Whatsapp:不支持视频格式

问题描述 投票:0回答:7

我有两个视频 (.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 whatsapp
7个回答
116
投票

有一些选项可以实现更好的兼容性:

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 文档


8
投票

8
投票

我尝试了之前的所有命令,但出现了一些错误。我能够使用此命令对我的视频进行编码,以下是解释以及为什么我这样设置它以获得更好的兼容性:

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
  • 如果您的输入包含 AAC 音频,您可以通过将 -acodec aac -ar 44100 -ac 2 更改为
    -acodec copy
    来进行
    流复制
    ,而不是重新编码,以保持音频质量。
选项 解释
-vcodec libx264
选择视频编码器libx264
-pix_fmt yuv420p
确保 YUV 4:2:0 色度二次采样以实现兼容性
-profile:v baseline
将编码配置文件设置为 baseline。主要用于需要额外数据丢失稳健性的低成本应用程序
-level 3.0
将操作点级别设置为3.0,这是与WhatsApp兼容所必需的
-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2"
如果出现不能被 2 整除的错误,请参阅
-acodec aac
选择音频编码器aac
-minrate 1024k
将最小比特率容差设置为 1024k(以位/秒为单位)。不然就没啥用了
-maxrate 1024k
将最大比特率容限设置为 1024k(以位/秒为单位)。需要设置bufsize
-bufsize 1024k
将速率控制缓冲区大小设置为 1024k(以位为单位)
-movflags +faststart
启用流媒体快速启动

有关快速启动的注意事项

通常,MP4 文件的所有“元数据”数据包都存储在文件末尾,以名为“原子”的数据单元形式存储。 mdat 原子位于 moov 原子之前。如果文件是通过添加

-movflags faststart
创建的,则
moov
原子会移动到 MP4 文件的开头。通过使用此选项,
moov
原子位于
mdat
原子之前。这允许在文件完全下载之前开始视频播放。
    
这对我2020年有用


7
投票

2023-01-22 我使用了得票最多的答案格式,它适用于视频,但音频不适用于 iPhone。这对我有用:

1
投票

我必须添加

-ac 2
,因为 iOS 不将我的音频格式视为立体声。

复制

@teocci的答案

0
投票

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/

0
投票

© www.soinside.com 2019 - 2024. All rights reserved.