我想要转换大型媒体集中未使用 H264 编码的任何文件。为了做到这一点,我需要一个工具来列出所有文件,我需要转换。有很多文件需要检查。搜索需要递归,因为文件以以下格式存储 /media/tv Shows/show name/season 01/filename.extension
答案1
这是我到目前为止所想到的。请注意,这是您应该执行的操作的粗略近似。
首先,找到所有视频文件并将它们输出到要读取的文件中,您可以跳过这部分并将结果传递到下一步。
find path/to/videos/directory -name \*.mp4 >> /tmp/videoList.txt
这将查找.mp4
媒体目录的所有子文件夹中的所有文件并将它们放入一个文件中。
接下来,您可以使用如图所示的工具这个例子探测每个视频文件使用的编码。在本例中,我们正在寻找 h264。
while read p; do
mediainfo $p | grep -v h264 | grep .mp4 | \
cut -f2 -d: >> /tmp/h264List.txt
done </tmp/videoList.txt
此示例创建一个文件 ,/tmp/h264List.txt
其中包含使用 h264 编码的所有文件。从这里您可以进行比较并找到所有非 h264 视频文件。
sort /tmp/videoFiles.txt /tmp/h264List.txt | uniq -u >> /tmp/nonh264List.txt
此时,您应该有一个文件,其中包含您搜索的目录中的所有非 h264 视频文件。总的来说,它可能看起来像这样:
请注意,这是一个粗略的示例!
#!/bin/bash
find /home/user/videos/tvshows -name \*.mp4 >> /tmp/videoList.txt
while read p; do
mediainfo $p | grep -v h264 | grep .mp4 | \
cut -f2 -d: >> /tmp/h264List.txt
done </tmp/videoList.txt
sort /tmp/videoList.txt /tmp/h264List.txt | uniq -u >> /tmp/nonh264List.txt
#Optional Cleanup, only if necessary
mv /tmp/nonh264List.txt /home/user/needToEncode.txt
rm /tmp/*.txt
然后从这里您可以对文件进行类似的循环needToEncode.txt
来运行您所需的ffmpeg
编码。您需要将媒体保存位置的路径以及文件扩展名和编码更改为您要查找的内容。
我将添加一个链接文档对于ffmpeg
, 以及为了mediainfo
。您还可以使用如图所示的ffmpeg
工具ffprobe
这里来完成这个任务。
在尝试任何操作之前,请务必阅读我提供的所有链接。该脚本可能不是最优化的或完全按照您的期望工作,但我能够使用它来查找所有视频文件,对它们进行排序,并将输出保存到文件中。