일부 비디오 파일을 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