我正在尝试更换在相对受限制的环境中播放的MP4文件,因此我尝试创建一个尽可能接近当前视频文件的视频文件,以确保它能够正常工作。 ffprobe
有这个:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isomavc1
creation_time : 2016-12-07T20:39:51.000000Z
encoder : HandBrake 0.9.9 2013051800
Duration: 00:00:11.01, start: 0.000000, bitrate: 4789 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1080x1920 [SAR 1:1 DAR 9:16], 4648 kb/s, 24 fps, 24 tbr, 90k tbn, 180k tbc (default)
我不知道如何指定mp42
和mp42isomavc1
。其余的我有一些想法:-vf
支持setsar
和setdar
,-pix_fmt yuv420p
,-framerate 24
。
答案 0 :(得分:0)
假设您从视频输入开始并且分辨率并不重要,请使用
ffmpeg -i source -vf setsar=1,format=yuv420p -r 24 \
-c:v libx264 -profile:v main -video_track_timescale 90k \
-color_primaries 1 -color_trc 1 -colorspace 1 -color_range 1 \
-brand mp42 -movflags +faststart out.mp4
FFmpeg不允许用户手动设置minor_version
。编码时,编码器将选择编解码器时基tbc
,不建议手动设置它。颜色属性设置为与您给定的输入匹配,但如果您的源具有不同的属性,并且您不使用过滤器转换它们,则这些属性将为false。当然,您的解码器可能会忽略这些容器级别标志并仅检查比特流。
如果您的输入帧速率不是24,那么ffmpeg将丢弃/复制帧以满足输出速率。除非您的输入具有播放器不支持的帧速率,否则最好跳过-r
选项。