【问题标题】:How to split Y4M video file into multiple Y4M files using FFMPEG?如何使用 FFMPEG 将 Y4M 视频文件拆分为多个 Y4M 文件?
【发布时间】:2017-07-14 01:39:00
【问题描述】:

我正在处理一个转码视频项目,我需要将一个视频文件拆分为多个文件。

输入文件为Y4M 格式。

输出文件也是Y4M 格式,每个视频文件有8 帧。

我该如何使用ffmpeg

【问题讨论】:

标签: video ffmpeg video-processing


【解决方案1】:

我找到了解决方案(使用ffmpeg)。

以下示例创建示例输入文件(用于测试),并将其拆分为多个部分。
在我的示例中,输入文件每秒包含 8 帧,分割过程每秒创建一个输出文件。
(我尝试使用选项-segment_frames 8 而不是-segment_time 1,但它不起作用)。

创建输入文件(用于测试):
创建AVI文件并将AVI文件转换为y4m格式文件:

ffmpeg -f lavfi -i testsrc=duration=10:size=160x120:rate=8 -c:v rawvideo -pix_fmt bgr24 -y input.avi
ffmpeg -i input.avi -pix_fmt yuv444p input.y4m

将文件分成 8 帧的片段(每个视频文件 1 秒):

对于 Windows(使用 %%):

ffmpeg -i input.y4m -f segment -segment_time 1 -pix_fmt yuv444p output%%4d.y4m

对于 Linux(使用 %):

ffmpeg -i input.y4m -f segment -segment_time 1 -pix_fmt yuv444p output%4d.y4m

【讨论】:

  • 所以你的解决方案是改变视频的帧率而不是分割它,这会影响视频的质量吗?
  • 我尝试了linux的命令,它在终端上运行良好,但是当我在matlab上使用它时function [] = segmenting(dir)cd(dir);videoNameIn = 'galleon_422_cif';videoNameOut = 'segment';videoType = '.y4m';segmentTime = 1;pix_fmt = 'yuv422p'; system(['ffmpeg -i ', videoNameIn, videoType, ' -f segment -segment_time ', num2str(segmentTime), ' -pix_fmt ', pix_fmt , videoNameOut,'%3d',videoType]); end 我收到一个错误:At least one output file must be specified
  • 您不需要更改帧速率,您可以使用几分之一秒。示例:ffmpeg -i input.y4m -f segment -segment_time 0.5 -pix_fmt yuv444p output%4d.y4m。将-segment_time参数设置为8/framerate
  • 关于错误:您在yuv422p 之后错过了space。应该是:system(['ffmpeg -i ', videoNameIn, videoType, ' -f segment -segment_time ', num2str(segmentTime), ' -pix_fmt ', pix_fmt, ' ', videoNameOut,'%3d',videoType]);
  • 你应该学习如何调试你自己的代码......没有你得到yuv422psegment001.y4m而不是yuv422p segment001.y4m的空间......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-13
  • 2019-11-26
  • 2021-07-23
  • 1970-01-01
相关资源
最近更新 更多