繁体   English   中英

如何使用 FFmpeg、无损并保持相同的总帧数来更改视频帧速率?

[英]How can I change a video frame rate with FFmpeg, lossless and keeping the same total number of frames?

我一直在 Stack Overflow 上寻找答案并到处搜索……尽管对我来说它应该是一个非常简单的命令行,但我在任何地方都找不到答案。

我想使用 FFmpeg 将视频的帧速率从 23.976fps 更改为 24fps,无损并保持总帧数。

为了使它更简单:

假设我有一个25fps 的视频总长度为 100 帧

如何使用FFmpeg将其帧速率更改为 50fps无损保持 100 帧的总长度相同

这是迄今为止我遇到的最好的解决方案(可以在这里找到):

将帧提取为 rawvideo:

ffmpeg -i input.mov -f rawvideo -b 50000000 -pix_fmt yuv420p -vcodec rawvideo -s 1920x1080 -y temp.raw

使用新的帧率重新创建视频:

ffmpeg -f rawvideo -b 50000000 -pix_fmt yuv420p -r 24 -s 1920x1080 -i temp.raw -y output.mov

注意 1:在使用新的帧速率重新创建视频时,我必须删除“-b 50000000” ,以使其正常工作。

它完全符合我的意图,但我仍然想知道是否有更简单的方法来做到这一点? 正如同一篇文章中所建议的那样,我尝试将它们仅在一行中连接在一起,但无法使其正常工作。

注 2:尽管它完全符合我的要求,但我后来才意识到使用这种方法会造成质量损失,我宁愿避免这种情况。

提前谢谢大家!

如果您的视频编解码器是 H.264/5,则此两步方法有效且无损。

#1解复用到原始比特流

ffmpeg -i in.mov -c copy in.264

#2使用新帧率重新混合

ffmpeg -r 24 -i in.264 -c copy out.mov

对于其他编解码器,如果有可用的原始比特流格式,则无需转码即可完成。

如果转码没问题,以下单步工作:

ffmpeg -r 24 -i in.mov -vsync 0 -c:v <codecname> out.mov 

当然,您需要指定比特率等参数来控制质量。

接受的答案会丢弃音频吗?

如果这是真的,我认为下面的python代码做了同样的事情,只需设置一个新的FPS并重写视频文件:

import cv2 as cv
import time

time0 = time.time()
vid = cv.VideoCapture('input.flv')
fps = vid.get(cv.CAP_PROP_FPS)
frame_width = round(vid.get(cv.CAP_PROP_FRAME_WIDTH))
frame_height = round(vid.get(cv.CAP_PROP_FRAME_HEIGHT))
frame_count = round(vid.get(cv.CAP_PROP_FRAME_COUNT))

target_fps = fps
target_width = 800
target_height = frame_height * target_width // frame_width

out = cv.VideoWriter('output.mp4',
                     cv.VideoWriter_fourcc(*'avc1'), target_fps, (target_width,target_height))

time1 = time.time()
print('Time passed is %.3fs' % (time1 - time0))

ret, frame = vid.read()

i = 0
while ret:
    i += 1
    if frame_width != target_width:
        frame = cv.resize(frame, (target_width, target_height), interpolation=cv.INTER_LINEAR)
    out.write(frame)
    ret, frame = vid.read()

out.release()
vid.release()

print("COST: %.3fs" %(time.time() - time1))

在这里,我还将视频比例更改为 800:-1。

希望有更好的方法来保留所有帧和音频。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM