我有很多孩子的大视频文件(.MTS 格式)。现在我想将它们转换为 divx / xvid 以节省硬盘空间,同时还能在电视机上观看。
视频文件存储在我的硬盘上的嵌套文件夹中(根据拍摄时间或特殊事件)。因此,在保留现有文件夹结构的情况下,我想自动转换所有视频(我认为这可能需要几天时间)。
如果您能指导我如何实现这一目标,我将不胜感激?
答案1
您可以使用它ffmpeg
来转换视频格式。如果尚未安装,请使用以下方式获取:
sudo apt install ffmpeg
我成功尝试了以下命令将示例视频转换为基于 AVI 的 DivX 5.0 格式:
ffmpeg -i sample.mp4 -f avi -vtag DX50 sample.divx
首先,您要指定输入视频文件,例如-i Videos/sample.mts
,然后我们说我们希望输出格式为 AVI,并使用 DivX 5.0 标签-f avi -vtag: DX50
。最后一个参数是要生成的输出文件,这里是Videos/sample.divx
。
我建议您先尝试一个小视频,并验证一切是否按预期工作,播放器是否可以识别格式以及视频质量和文件大小是否合适。您可以使用附加参数调整后者-q:v N
,其中N
是一个数字,数字越小表示质量越高、文件大小越大。合适的值可能在 2-8 范围内,也许可以试试 5:
ffmpeg -i sample.mp4 -f avi -vtag DX50 -q:v 5 sample.divx
然后,一旦测试成功并且格式和质量都没问题,您就可以使用如下 Bash 脚本递归批量转换特定源目录内的所有 .mts 视频文件:
#!/bin/bash
# Change the directories and quality level (lower=better) below accordingly:
inputfolder="/path/to/somewhere"
outputfolder="/path/to/elsewhere"
videoquality=5
shopt -s globstar nocaseglob nocasematch # enable ** and globs case-insensitivity
for inputfile in "$inputfolder"/**/*.mts ; do
outputfile="$outputfolder/$(basename "${inputfile%.mts}").divx"
ffmpeg -i "$inputfile" -f avi -vtag DX50 -q:v "$videoquality" "$outputfile"
done
或者如果您希望输出文件与输入位于同一目录中,这里有一个较短的版本:
#!/bin/bash
# Change the directory and quality level (lower=better) below accordingly:
folder="/path/to/somewhere"
videoquality=5
shopt -s globstar nocaseglob nocasematch # enable ** and globs case-insensitivity
for inputfile in "$folder"/**/*.mts ; do
ffmpeg -i "$inputfile" -f avi -vtag DX50 -q:v "$videoquality" "${inputfile%.mts}.divx"
done
答案2
find -mindepth 1 -type d | xargs -n1 -I '{}' convert '{}'/* '{}'.pdf
find
查找所有文件-mindepth 1
确保它不包含当前目录-type d
确保只找到目录xargs
对每个找到的目录运行命令-n1
表示每行(1)将运行一个命令-I '{}'
说任何时候我们看到'{}'
我们用找到的目录名称替换它convert
是一个用于转换图像(在本例中为 PDF)的 ImageMagick 工具'{}'/*
查找目录中的所有图像'{}'.pdf
表示输出 PDF 文件为目录名称并.pdf
附加