我想用 FFMPEG 转换 mp4 格式的视频,同时保持源视频的比特率(CBR 模式)和质量,
我尝试了一些在这里找到的命令:
https://trac.ffmpeg.org/wiki/Encode/H.264#CBRConstantBitRate
https://superuser.com/questions/314354/ffmpeg-constant-bitrate
https://brokenpipe.wordpress.com/2016/10/07/ffmpeg-h-264-constant-bitrate-cbr-encoding-for-iptv/
通过上面的链接,我使用 -minrate
实现了恒定比特率, -maxrate
和其他一些参数,
ffmpeg -i <source> -b <sourceBitrate> -minrate <sourceBitrate> -maxrate <sourceBitrate> 2> log.txt output.mp4
ffmpeg -i <source> -c:v libx264 -x264-params "nal-hrd=cbr" -b:v <sourceBitrate> -minrate <sourceBitrate> -maxrate <sourceBitrate> 2> log.txt output.mp4
ffmpeg -i <source> -c:a libmp3lame -vcodec h264 -preset veryfast -f mp4 -crf 18 "nal-hrd=cbr" -b:v <sourceBitrate> -minrate <sourceBitrate> -maxrate <sourceBitrate> 2> log.txt output.mp4
但转换后的视频质量与源文件不同。我想保持与来源相同的质量。我怎样才能做到这一点?
我做错了什么吗?
谢谢你...
最佳答案
我是 blog post 的作者你联系了。
你不应该 nal-hrd
cbr
和 mp4
因为 avcc
MP4 中使用的格式不支持填充数据。
No filler data. Video data is naturally represented as variable bit rate in the file format and should be filled for transmission if needed. Filler Data NAL units and Filler Data SEI messages shall not be present in the file format stored stream.
(ISO/IEC 14496-15 - 以 ISO 基本媒体文件格式传输网络抽象层 (NAL) 单元结构化视频)
正如您在我的示例中看到的那样,输出是使用附件 B 的 MPEG-TS。nal-hrd
还需要 设置 vbv-bufsize
.
关于video - 具有保持视频质量的 FFMPEG CBR(恒定比特率模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48055899/