【发布时间】:2015-10-31 00:26:43
【问题描述】:
我正在尝试转换
给定文件夹中的所有文件 allFolders.txt
> head folderNames.txt
0001
0002
0003
0004
0005
...
使用 ffmpeg 转至视频
ffmpeg version 2.2.3 Copyright (c) 2000-2014 the FFmpeg developers built on Apr 20 2015 13:38:52 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
configuration: --prefix=/home/myUsername/usr/local --enable-nonfree --enable-gpl --enable-pic --enable-shared --enable-libx264 --disable-vaapi
根据 stackoverflow 上的一些答案,我编写了以下 bash 脚本:
#!/bin/bash
while read p; do
cd "$p"
ffmpeg -f concat -i "allImgNames.txt" -framerate 30 -c:v libx264 -profile:v high -crf 20 -pix_fmt yuv420p output.mp4
cd -
done < folderNames.txt
其中allImgNames.txt 是一个包含所有图像名称的文本文件。
奇怪的是,它适用于一些视频,但对于文件列表的其余部分,它却无法显示allImgNames.txt: No such file or directory,这是不正确的。我检查了所有路径几次。我也可以手动执行上面的ffmpeg ... 命令而不会出现问题。
我不知道我做错了什么。所有文件/文件夹名称都是正常的(没有特殊字符)。也许我对 bash 或 ffmpeg 的了解不够。
【问题讨论】:
-
文件名或目录名中是否有空格?
-
您更改了脚本中的目录,因此文件
allImgNames.txt不再位于当前 目录中。除非您将每个目录更改为具有该名称的单独文件? -
不。真正奇怪的是,当我在上面给出的示例中在
cd "$p"之后放置echo "$p"时,当我评论ffmpeg评论时它表现正常,但是一旦我再次取消评论ffmpeg甚至它打印的路径错误(缺少前导 0),例如它打印30而不是0030 -
我有一个文本文件,其中包含每个子目录中的所有图像文件名。这就是为什么我可以在我的 bash 脚本之外正常执行
ffmpeg命令 -
我的意思是
allImgNames.txt文件,它真的有那个外壳吗?在所有文件夹中?它does 存在于all 文件夹中吗?它总是在相同的目录上失败吗?还是看似随机?你有没有试过做例如脚本中的ls allImgNames.txt而不是ffmpeg命令?或者不要更改目录和ffmpeg,只需在循环中执行ls "$p/allImgNames.txt,如果仅在某些目录中丢失文件,这将使其非常明显。