我有一个网站,允许人们上传各种格式的大型视频文件(avi,mp4,mkv和flv)。我需要生成1分钟的“样本”。从已上载的较大文件中,样本需要采用相同的格式,具有与原始文件相同的帧维度和比特率。有没有办法简单地将文件的一部分剪切成新文件?最好是在ffmpeg(或任何其他工具,如果不可能ffmpeg)。

有帮助吗?

解决方案

首先,您需要了解视频文件的实际工作方式。以下是一组教程解释:过度互联网视频简化指南

然后,您可以尝试各种可能有助于切片样本的工具。一个是flvtool(如果您的输入是FLV)或 FFmpeg 。使用FFmpeg,您可以指定开始时间和停止时间,它将尝试切出您要求的内容(但必须找到最近的关键帧才能开始切片)。

这是用于读取名为input.flv的文件的FFmpeg命令,在视频中开始15秒,然后在接下来的60秒内切出,但是为音频代码和视频编解码器保留相同的参数,并将其写入输出文件:

ffmpeg -i input.flv -ss 15 -t 60 -acodec copy -vcodec copy output.flv

最后,如果你想要,你可以用C或C ++(使用FFmpeg的libav库)或Java编写计算机代码(使用 Xuggler )以编程方式执行此操作,但这对您的用例来说非常先进。

其他提示

如果您在保持自动和视频同步时遇到问题,以下内容可能会有所帮助(在其他网站上找到):

ffmpeg -sameq -i file.flv -ss 00:01:00 -t 00:00:30 -ac 2 -r 25 -copyts output.flv

正如Evan所说,接受的答案中的方法可能导致A / V同步丢失。但是他的解决方案不正确,因为 -sameq 已被删除。

https://trac.ffmpeg.org/wiki/Seeking 所述<代码> -ss 选项应该在 -i 之后而不是之后。这为我解决了这个问题。

下一个选项是使用 -fs 开关。例如:

ff -i ip.mkv -fs 500M -c copy ~/Movies/reservoir/carbohydrates.mkv

从所选源中提取500兆字节(500×1000×1000字节+'复用开销')。 - 基于文件大小,你可以告诉

一个人的爱。尊重。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top