ffmpeg - whatsapp:不支持视频格式

San*_*idi 12 ffmpeg whatsapp

我有两个视频(.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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我注意到的视频差异:

(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

Mar*_*Mey 29

有一些选项可以提供更好的兼容性:

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

  • 说真的,这很有效,但是你怎么可能知道这个庞大的命令行? (2认同)
  • @CaioMar 我真的不记得我是怎么得到它的。我认为通过研究 ffmpeg H264 文档和“尝试和失败”。这一切都与“兼容性”有关……而 h264 编码有相应的选项。 (2认同)

Teo*_*cci 12

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

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
Run Code Online (Sandbox Code Playgroud)
  • 如果您的输入包含AAC 音频,您可以通过更改为流式复制而不是重新编码保持音频质量。-acodec aac -ar 44100 -ac 2-acodec copy
选项 解释
-vcodec libx264 选择视频编码器libx264
-pix_fmt yuv420p 确保 YUV 4:2:0 色度二次采样以实现兼容性
-profile:v 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 文件将其所有元数据数据包存储在文件末尾,以名为atoms的数据单元形式存储。原子mdat位于moov原子之前。如果文件是通过添加 来创建的-movflags faststart,则moov原子会移动到 MP4 文件的开头。通过使用此选项,moov原子位于mdat原子之前。这允许在文件完全下载之前开始视频播放。


Evg*_*tov 7

这对 2020 年的我有用

ffmpeg -i broken.mp4 -c:v libx264 -profile:v high -level 3.0 -pix_fmt yuv420p -brand mp42 fixed.mp4
Run Code Online (Sandbox Code Playgroud)


bra*_*obo 6

复制自https://www.reddit.com/r/ffmpeg/comments/564kyc/ffmpeg_whatsapp_video_format_not_supported/?st=ivjxdi0v&sh=848ce7eb

ffmpeg -i brokenvideo.mp4 -c:v libx264 -c:a aac fixedvideo.mp4
Run Code Online (Sandbox Code Playgroud)

还必须应用此修复:FFMPEG(libx264)"高度不能被2整除"

  • 此命令将重新编码视频和音频。我敢打赌,这只是视频标签的问题。尝试`ffmpeg -i broken.mp4 -c复制-vtag avc1 fixed.mp4` (2认同)

ube*_*kel 4

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

ffmpeg -i broken.mp4 -c:v libx264 -profile:v baseline -level 3.0 -pix_fmt yuv420p -ac 2 working.mp4
Run Code Online (Sandbox Code Playgroud)

我必须添加,-ac 2因为 iOS 不将我拥有的音频格式视为立体声。