
一部のビデオファイルをH264からH265に一括変換する必要があります。私のffmpegコマンドラインを知っていて相対パスを持つファイル名のcsvがあります(その場所の一部のファイルがすでに変換されているため、それを駆動するにはファイルリストが必要です)。今私が持っている唯一の問題は、ファイルリストから変換を推進することです。
私のコマンドライン:
cat mkv-analysis.csv | while read file; do $(ffmpeg -i '$file' -c:v libx265 -x265-params crf=23 -preset medium -c:a copy -c:s copy '${file%.mkv}_new.mkv'); done;
そしてデータサンプル:
Folder.A/file.A.mkv
Folder.B/file_b.mkv
Folder_C/file.C.mkv
だから、「$file:そのファイルやディレクトリがありません」というメッセージが表示されたら、誰もが私が間違っていることを教えてもらえますか?
答え1
一重引用符を使用すると、$file
変数が拡張されないことを意味します。
$ var="foo"
$ echo "$var"
foo
$ echo '$var'
$var
したがって、探しているコマンドは次のようになります(一部の改善点を含む)。
while read -r file; do
ffmpeg -i "$file" -c:v libx265 -x265-params crf=23 -preset medium -c:a copy -c:s copy "${file%.mkv}_new.mkv"
done < mkv-analysis.csv
cat
コマンドを次のように渡す必要もなく、まったく意味がないことに注意してください。コマンドの置き換え($(command)
)。これは、コマンドの出力を変数としてキャプチャする場合にのみ必要です。
答え2
私の考えには、次のようなものが必要だと思います。
$ cat mkv-analysis.csv | xargs -I % ffmpeg ...
%はパラメータで、あなたの場合はファイルパスです。
mkv-analysis.csv
次の形式を想定してください。
file-path1
file-path2
...
形式が異なる場合は、次の形式で準備する必要がありますawk
。例:
$ awk '...awk script...' mkv-analysis.csv | xargs ffmpeg ...
最も重要なのはファイルをxargs
提供することであり、この手順ではファイルを見つけることができるはずです。ffmpeg
ffmpeg