【发布时间】:2019-12-17 08:13:38
【问题描述】:
我有一堆 .png 文件
file_000.png
file_005.png
file_010.png
我正在使用继承的 ffmpeg 脚本将 .png 文件拼接成一个 .mp4 文件。我不明白所有的标志,但我过去成功使用过这个脚本
## images_to_movie.sh
set -o noglob
in_files=$1
out_file=$2
ffmpeg \
-framerate 10 \
-loglevel warning \
-pattern_type glob -i $in_files \
-pix_fmt yuv420p \
-vf 'crop=trunc(iw/2)*2:trunc(ih/2)*2:0:0' \
-y \
$out_file
用命令
./images_to_movie file_*.png files.mp4
我现在收到错误消息
编解码器“png”的像素格式“yuv420p”不兼容,自动选择 格式'rgb24'
一些搜索表明
-pix_fmt yuv420p
已弃用,我应该改用
-pix_fmt yuv420p -color_range 2
但错误仍然存在。我尝试使用
-pix_fmt rgb24
错误消失了,但我没有创建 .mp4 文件。
我需要如何修改这个脚本来创建一个 .mp4 文件?
【问题讨论】:
-
您是否有理由相信未创建输出文件与您之前修复的错误之间存在关系?也就是说——为什么不忽略已经修复的错误,询问修复了该错误的代码形式,并仅关注没有创建输出文件?
-
这里有一个重要问题:
set -o noglob在脚本启动后停止扩展 glob。但是,当您运行./images_to_movie file_*.png files.mp4时,该 glob before 将完全扩展images_to_movie运行,因此您最终将$1作为第一个文件file_*.png扩展为,$2成为第二个。 -
...所以您的第二个 .png 文件可能被替换为 .mp4 输出。顺便说一句,如果您使用
bash -x ./images_to_movie file_*.png files.mp4跟踪脚本,在运行时将每一行记录到 stderr,您可以在实践中看到这一点。