我有两个视频(.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文档
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)
-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原子之前。这允许在文件完全下载之前开始视频播放。
这对 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)
ffmpeg -i brokenvideo.mp4 -c:v libx264 -c:a aac fixedvideo.mp4
Run Code Online (Sandbox Code Playgroud)
还必须应用此修复:FFMPEG(libx264)"高度不能被2整除"
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 不将我拥有的音频格式视为立体声。
| 归档时间: |
|
| 查看次数: |
9811 次 |
| 最近记录: |