gpt4 book ai didi

ffmpeg h.264 无效切割

转载 作者:行者123 更新时间:2023-12-04 23:31:00 35 4
gpt4 key购买 nike

我有一个包含数百个视频文件的 s3 存储桶。
这些文件是通过使用 ffmpeg 剪切较大视频文件的一部分而创建的。
我为此编写了一个脚本,它从另一个存储桶下载原始视频文件,运行 ffmpeg 剪切文件,并将新文件上传到它的存储桶。
对于从/到 s3 下载和上传,我使用了 this php library .
我使用的 ffmpeg 语法:

ffmpeg -y -vsync 2 -async 1 -ss [time-in] -t [duration] -i [large-input-video.mp4] -vcodec copy -acodec copy [short-output-video.mp4]

这应该只是在指定时间之间剪切原始文件,而不对 a/v 编解码器进行任何更改。
所有原始视频文件都以 h.264 编码,这也是新文件所需的编码(将通过 CDN 流式传输到客户端的 Flash 播放器)。

我的问题是只有一小部分新文件以 h.264 编码输出,但大多数不是(h.264 是必须的,否则文件不会在客户端播放)。
我无法将问题追溯到原始视频,因为当我手动使用相同的 ffmpeg 命令、相同的参数和相同的文件时,输出文件就很好了。似乎随意。

我使用 ffprobe 来获取有关文件编解码器的信息。
例如:
ffprobe 大型(原始)视频文件之一:

...
Stream #0.0(und): Video: h264, yuv420p, 640x352, 499 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
...



对应新剪切文件的ffprobe:

...
Stream #0.0(und): Video: mpeg4, yuv420p, 640x352 [PAR 1:1 DAR 20:11], 227 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc
...



可以看出,区别在于“mpeg4”与“h264”。

任何关于什么可能导致新文件以错误编码出现的见解将不胜感激。

谢谢!

编辑:问题已解决
在分析了所有文件后,我注意到其中大约三分之二的文件使用了错误的编解码器。
由于我在切割过程中使用了三台机器(三台单独的 EC2 服务器),我突然想到其中两台 ffmpeg 安装错误(正如@LordNeckbeard 在他的回答中所建议的那样)。
我再次运行该过程,仅在无效文件上,仅在第三台机器上 - 产生了预期的结果。

最佳答案

输出文件上的“mpeg4”很可能表明 ffmpeg 正在重新编码而不是复制视频流。由于您没有提供该信息,因此我不能对音频说同样的话。较旧的 ffmpeg 使用“mpeg4”视频编码器作为使用 MP4 容器的输出的默认值。检查您的脚本或库,因为在手动调用 ffmpeg 时一切都按预期工作。

较少关注的是 -vsync 2 -async 1使用 -vcodec copy -acodec copy 时可能会被忽略.

另请注意,您可能希望通过 qt-faststart 运行剪切输出。 (它包含在 ffmpeg 源代码中)或者 MP4Box .这会将一些数据移动到文件的开头,以便视频可以在客户端完全下载之前开始播放。

最后,-ss 的位置很重要。作为输入选项(在 -i 之前),它要快得多,因为它会立即寻找您想要的时间然后开始解码,但它不如 -ss 准确作为一个输出选项,它可以在您想要的时间之前完全解码所有内容。如果准确性比速度更重要,请考虑测试 -ss作为输出选项。

关于ffmpeg h.264 无效切割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10383635/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com