实例:修正帧率为24.97的mp4为25
ffmpeg吧
全部回复
仅看楼主
level 1
zx_Sunrise 楼主
刚才在看国漫 散修之王,发现第19集的帧率似乎有问题,为24.97,而不是其他集的25。
源文件为 散修之王.San.Xiu.Zhi.Wang.S01E19.2024.1080p.WEB-DL.AVC.DDP2.0-PanWEB.mkv
205M。这个mkv本身帧率就有问题,转换成 mp4 就显示为 24.97。
那么,我们就用 ffmpeg 重新压制一下,让它的码率跟其他集数的码率一致。
我用下面的ffmpeg命令进行了重压制:
ffmpeg -i "散修之王.San.Xiu.Zhi.Wang.S01E19.2024.1080p.WEB-DL.AVC.DDP2.0-PanWEB.mp4" -map 0:V -c:v libx264 -r 25 -b:v 2500k -maxrate 5000k -bufsize 10M -map 0:a -c:a copy "散修之王.San.Xiu.Zhi.Wang.S01E19.2024.1080p.WEB-DL.AVC.DDP2.0-PanWEB.new.mp4"
说明
-map 0:V 映射视频流,大写的V表示去掉图片封面的视频流,否则你必须指定图片的编码器,0表示第一个输入文件,
因为我们的mp4有2个音频流,所以必须用map参数进行映射,否则就只剩下一个音频流了。
-c:v libx264 指定视频的编码器为libx264,avc编码,同原编码
-r 25 指定帧率为25
-b:v 2500k -bufsize 10M 指定目标码率为2500k, 生成最终视频流的码率不低于2500k,
-maxrate 5000k 指定最大码率为5000k,随便写的,比较大了,3000k就行了,不要低于目标码率
-bufsize 10M 缓存区大小,通常是最大码率的2倍
一定要指定码率来控制文件大小,不要用无法控制文件大小的质量参数
-map 0:a -c:a copy 复制所有的音频流,此文件中有2个音频流
最终输出的文件帧率为25,大小为229M,因为我的码率2500k,设置得比原来的mp4的码率2390左右大了一点,不过也无所谓了。
当然,直接从mkv重压制成mp4也是可以,只要将l输入文件mp4改成mkv就行了:
ffmpeg -i "散修之王.San.Xiu.Zhi.Wang.S01E19.2024.1080p.WEB-DL.AVC.DDP2.0-PanWEB.mkv" -map 0:V -c:v libx264 -r 25 -b:v 2500k -maxrate 5000k -bufsize 10M -map 0:a -c:a copy "散修之王.San.Xiu.Zhi.Wang.S01E19.2024.1080p.WEB-DL.AVC.DDP2.0-PanWEB.new.mp4"
2024年11月30日 08点11分 1
level 1
zx_Sunrise 楼主
发布者标识为DDP2.0的mkv,都有2个音频流,如果你发现带有DDP2.0的mp4只有一个音频流,说明某些人从mkv转换成mp4时没用map参数,丢了一条音频流
2024年11月30日 08点11分 2
level 3
你这样修复的话,它是重采样成25了?还是保留原来的帧数呢?总体时长会不会发生变化?
2024年12月02日 06点12分 3
这个文件本身是25帧的,只是由于文件有部分地方损坏造成了帧率变成24.97。所以,就算重新压制,即你说的重采样,总时长也是跟原文件一样的。
2024年12月03日 06点12分
level 7
Stream #0:0[0x1](und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 1920x1088 [SAR 1:1 DAR 30:17], 2562 kb/s, 10.21 fps, 15 tbr, 48k tbn (default)
fps是编码器真实帧率,
tbr是可变帧率视频的目标输出帧率。
我还特意在自己的压缩工具上增加了把相同帧抽掉,转成可变帧率视频功能,
实际fps会低于显示fps,但播放器会按时间码处理,能节省压缩算力和体积。
2024年12月05日 07点12分 4
level 7
可变帧率日志
11/18/2024 9:44:10 PM D:\视频批量转码\ffmpeg.24.11.05.exe开始编码……
-threads 1 -filter_threads 1 -filter_complex_threads 1 -i "凡人修仙传第047话 再别天南1.2160p.h264.25fps.aac.stereo.582514433.mkv" -ss 130.400 -to 1021.880 -lavfi "mpdecimate[fin]" -map ["fin"] -fps_mode vfr -c:v libaom-av1 -pix_fmt yuv420p10le -cpu-used 3 -threads 1 -aom-params row-mt=0:fp-mt=0 -crf 23 -g 250 -map 0:a:0 -c:a libopus -vbr on -compression_level 10 -b:a 128k -ac 2 "凡人修仙传第047话 再别天南1.2160p.25fps.stereo.582514433.aomav1.crf23.p3.vfr.opus2.0.128k.Trim丨24.11.18.21.43.43.webm"
-threads 1 -filter_threads 1 -filter_complex_threads 1 -i "凡人修仙传第047话 再别天南1.2160p.h264.25fps.aac.stereo.582514433.mkv" -ss 130.400 -to 1021.880 -lavfi "mpdecimate[fin]" -map ["fin"] -fps_mode vfr -c:v libaom-av1 -pix_fmt yuv420p10le -cpu-used 3 -threads 1 -aom-params row-mt=0:fp-mt=0 -crf 23 -g 250 -map 0:a:0 -c:a libopus -vbr on -compression_level 10 -b:a 128k -ac 2 "凡人修仙传第047话 再别天南1.2160p.25fps.stereo.582514433.aomav1.crf23.p3.vfr.opus2.0.128k.Trim丨24.11.18.21.43.43.webm"
11/21/2024 12:33:31 AMframe=21611 fps=0.1 q=0.0 Lsize= 571154KiB time=00:14:51.48 bitrate=5248.5kbits/s speed=0.00487x
[out#0/webm @ 00000166d2332e40] video:557282KiB audio:13458KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.072476%
编码完成,耗时:已用2天2小时47分59秒 (182880秒)
恒定帧率日志
2024/11/23 0:07:56 ffmpeg.24.11.05.exe开始编码……
-threads 1 -filter_threads 1 -filter_complex_threads 1 -i "凡人修仙传第047话 再别天南1.2160p.h264.25fps.aac.stereo.582514433.mkv" -ss 130.400 -to 1021.880 -map 0:v:0 -c:v libaom-av1 -pix_fmt yuv420p10le -cpu-used 3 -threads 1 -aom-params row-mt=0:fp-mt=0 -crf 23 -g 250 -map 0:a:0 -c:a libopus -vbr on -compression_level 10 -b:a 128k -ac 2 "凡人修仙传第047话 再别天南1.2160p.25fps.stereo.582514433.aomav1.crf23.p3.opus2.0.128k.Trim丨24.11.23.00.07.56.webm"
2024/11/25 8:19:32frame=22287 fps=0.1 q=0.0 Lsize= 580597KiB time=00:14:51.48 bitrate=5335.2kbits/s speed=0.00441x
[out#0/webm @ 000002dde92e3ac0] video:566722KiB audio:13458KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.071848%
编码完成,耗时:已用2天8小时10分19秒 (202220秒)
2024年12月05日 07点12分 5
level 1
改变帧率最好不要用-r进行帧率重采样,用过滤器fps=fps=25这样更好一点。视频流损坏不会改变帧率,帧率是写在封装格式里的,不是你要显示的时候,再去按照视频流算出来的,所以你的视频本身就是24.97帧的,是有这种帧率的,历史遗留问题。强迫症非要统一到25帧,还不想丢帧或者帧复制,一个比较完美的解决思路是将24.97FPS视频快放0.12%那么就成25FPS视频了,0.12%的速度变化,应该是个人都察觉不出来的,做法是使用视频过滤器更改每帧时间戳“setpts=PTS*25000/1001/25”,同时使用音频过滤器加快音频播放速度“atempo=25*1001/25000”,同时,转换参数里正常写上“-r 25”,完美解决。
2025年01月31日 09点01分 6
1