답변:
이전 답변은 out.mov라는 하나의 출력 파일 만 만듭니다. 오래된 영화마다 별도의 출력 파일을 만들려면 다음을 시도하십시오.
for i in *.avi;
do name=`echo "$i" | cut -d'.' -f1`
echo "$name"
ffmpeg -i "$i" "${name}.mov"
done
i was unexpected at this time.
do name=`echo "${i%.*}"`;
점과 공백이있는 파일 이름에서 작동합니다.
.bat
Windows에서 지원 됩니까?
들어 리눅스 와 맥 OS 이 사용하여 한 줄에서 수행 할 수 매개 변수 확장을 출력 파일의 파일 이름 확장자를 변경하려면 :
for i in *.avi; do ffmpeg -i "$i" "${i%.*}.mp4"; done
ffmpeg
동일한 파일로 입력 및 출력 할 수 없으므로 입력 파일과 다른 이름을 입력 파일이나 다른 디렉토리로 출력해야합니다. 2) Bash 명령이 Windows 10에서 기본적으로 작동하는지 확실하지 않습니다. 아마도 Linux 및 macOS와 같이 Bash를 기본적으로 사용할 수있는 시스템을 대상으로한다는 답변에 추가해야 할 수도 있습니다. lxs는이 질문에 대한 Windows 답변을 제공했습니다.
for f in *.mkv; do ffmpeg -i "$f" -map 0 -movflags faststart -c:v libx264 -c:a copy -c:s copy "${f/x265/x264}"; done
그리고 Windows에서 :
FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec mp3 "%~nG.mp3"
FOR /F "tokens=*" %G IN ('dir /b *.mp3') DO ffmpeg -i "%G" -map_metadata -1 -c:v copy -c:a copy "%~nG .mp3"
한 줄짜리 bash 스크립트는 쉽게 할 수 있습니다- *.avi
파일 형식으로 바꾸 십시오.
for i in *.avi; do ffmpeg -i "$i" -qscale 0 "$(basename "$i" .avi)".mov ; done
-qscale
. 그것을 제거하고 기본 설정을 사용하거나 -crf
대신 사용하십시오 (기본값은 -crf 23
).
basename
서브 쉘이 인용 되지 않기 때문에 명령이 실패합니다 . 이것이 바로 bash가 대신 쉘 확장을 갖는 이유입니다. for i in * .avi; ffmpeg -i "$ i"-qscale 0 "$ (기본 이름"$ i ".avi)". mov; 완료
하위 디렉토리로 변환하려면 다음을 사용하십시오.
find . -exec ffmpeg -i {} {}.mp3 \;
find *.mp4 -exec ffmpeg -i {} {}.mp3 \;
find . -name *.ogg -or -name *.wma -exec ffmpeg -i {} {}.mp3 \;
find . -name *.wma -exec ffmpeg -i {} {}.mp3 \; -exec rm {} \;
Windows의 경우 :
여기에서 모든 (.mp4) 파일을 (.mp3) 파일로 변환합니다.
cmd를 열고 원하는 폴더로 이동 한 후 명령을 입력하십시오.
바로 가기 : (선택 사항)
1. (.mp4) 파일이있는 폴더로 이동합니다
. 2. Shift 키를 누른 상태에서 마우스 왼쪽 버튼을 클릭하고 "여기에서 PowerShell 창 열기"
또는 "여기에서 명령 프롬프트 창 열기 "를 선택합니다.
3. "cmd"를 입력합니다. [참고 : PowerShell 대신 cmd를 직접 여는 경우이 단계를 건너 뛰십시오]
4. 명령을 실행하십시오.
for %i in (*.mp4) do ffmpeg -i "%i" "%~ni.mp3"
이 파일을 Windows 10의 배치 파일에 넣으려면 %% i를 사용해야합니다.
ffmpeg로 무언가를 일괄 변환하고 싶지만 편리한 Windows 인터페이스를 갖고 싶은 사람을 위해이 프론트 엔드를 개발했습니다.
https://sourceforge.net/projects/ffmpeg-batch
그것은 ffmpeg에 창 패션 인터페이스, 진행률 표시 줄 및 남은 시간 정보, ffmpeg를 사용할 때 항상 놓친 기능을 추가합니다.
GNU 병렬 을 vid_dir
사용하는 경우 CPU 코어 중 하나를 제외한 모든 .avi 파일 을 mp4로 병렬 변환 할 수 있습니다.
find vid_dir -type f -name '*.avi' -not -empty -print0 |
parallel -0 -j -1 ffmpeg -loglevel fatal -i {} {.}.mp4
다른 형식으로 변환 '*.avi'
하거나 다른 형식으로 변환하려면 또는 .mp4
필요에 따라 변경하십시오 . GNU Parallel은 대부분의 Linux 배포판 리포지토리에 일반적으로라는 패키지로 표시됩니다 parallel
.
!
배쉬 원 라이너의 끝에 추가하여 동일한 작업을 수행 할 수 없습니까?
중복 될 수 있음을 알고 있지만이 스크립트를 사용하여 파일을 일괄 변환합니다.
old_extension=$1
new_extension=$2
for i in *."$old_extension";
do ffmpeg -i "$i" "${i%.*}.$new_extension";
done
유연성을 높이려면 두 가지 주장이 필요합니다.
별칭을 만들지 만 다음과 같이 수동으로 사용할 수도 있습니다.
sh batch_convert.sh mkv mp4
모든 mkv
파일을 mp4
파일 로 변환 합니다.
보시다시피 약간 더 다목적입니다. 긴로 ffmpeg
변환 할 수 있습니다 당신은 어떤 두 개의 확장을 지정할 수 있습니다.
물론 PowerShell이 등장했습니다 . 특히 이와 같은 것을 매우 쉽게 만들 수 있도록 특별히 설계되었습니다 .
예, PowerShell은 Windows 이외의 다른 운영 체제 에서도 사용할 수 있지만 Windows에는 사전 설치되어 있으므로 모든 사람에게 유용합니다.
먼저, 현재 디렉토리 내의 모든 파일을 나열하고 싶으므로 다음으로 시작하겠습니다.
ls
ls -Recurse
하위 디렉토리의 모든 파일을 재귀 적으로 변환하려는 경우 에도 사용할 수 있습니다 .
그런 다음 변환하려는 파일 형식 (예 : "avi")으로 만 필터링합니다.
ls | Where { $_.Extension -eq ".avi" }
그 후에는을 통해 해당 정보를 FFmpeg로 전달합니다 ForEach
.
FFmpeg의 입력 FullName
에는 파일의 전체 경로 인-를 사용 합니다. 그리고는 FFmpeg의 출력을 위해 우리는을 사용합니다 Name
-하지만 교체 을 .avi
가진 끝 .mp3
. 따라서 다음과 같이 보일 것입니다.
$_.Name.Replace(".avi", ".mp3")
자,이 모든 것을 하나로 합치 자 결과는 다음과 같습니다.
ls | Where { $_.Extension -eq ".avi" } | ForEach { ffmpeg -i $_.FullName $_.Name.Replace(".avi", ".mp3") }
그러면 FFmpeg를 통해 모든 ".avi"파일을 ".mp3"파일로 변환하고 따옴표로 묶은 세 가지 항목을 바꾸어 원하는 변환 유형을 결정하고 다른 인수를 FFmpeg에 추가하십시오 ForEach
.
한 단계 더 나아가 Remove-Item
마지막에 추가 하여 이전 파일을 자동으로 삭제할 수 있습니다.
경우 ffmpeg
경로에 있지이며, 쓰기, 당신이 현재하고있는 디렉토리에 실제로의 ./ffmpeg
가 대신의 ffmpeg
.
이것이 누군가를 돕기를 바랍니다.
.ps1
파일이 아닌 파일 에 넣으십시오 .bat
. Set-ExecutionPolicy RemoteSigned
이전에 PS 스크립트를 실행 한 적이 없다면 관리자 권한으로 실행 해야합니다.
당신이 원하는 경우 ffmpegX와 일괄 처리에 그래픽 인터페이스를 시도 빠른 고점을 . 무료이며 마지막 ffmpegX 설정을 사용하여 드롭 한 파일을 변환합니다.
폴더를 Quick Batcher로 끌어 놓을 수는 없습니다. 따라서 파일을 선택한 다음 Quick Batcher를 통해 넣으십시오.
이 중 하나만 나를 위해 일했습니다. pls는 ffmpeg.exe 파일이있는 곳에서 "newfiles"폴더를 수동으로 만들어야한다는 것을 알았습니다.
변환 합니다. 파일을 .wav 오디오 코드로 :
for %%a in ("*.*") do ffmpeg.exe -i "%%a" "newfiles\%%~na.wav"
pause
즉, 모든 .mp3 파일을 .wav로 변환하려면로 변경 ("*.*")
하십시오 ("*.mp3")
.
이 스크립트의 저자는 다음과 같습니다
https://forum.videohelp.com/threads/356314-How-to-batch-convert-multiplex-any-files-with-ffmpeg
그것이 도움이되기를 바랍니다.
현재 디렉토리의 모든 jpg 파일에서 mp4 비디오가 생성됩니다.
echo exec("ffmpeg -framerate 1/5 -i photo%d.jpg -r 25 -pix_fmt yuv420p output.mp4");
그리고 Windows의 경우 작동하지 않습니다
FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec mp3 "%~nG.mp3"
내가 두 배로해도 %
.
나는 심지어 제안 할 것이다 :
-acodec ***libmp3lame***
또한:
FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec libmp3lame "%~nG.mp3"
이것은 AVI를 1280x mp4로 일괄 변환하는 데 사용하는 것입니다.
FOR /F "tokens=*" %%G IN ('dir /b *.avi') DO "D:\Downloads\ffmpeg.exe" -hide_banner -i "%%G" -threads 8 -acodec mp3 -b:a 128k -ac 2 -strict -2 -c:v libx264 -crf 23 -filter:v "scale=1280:-2,unsharp=5:5:1.0:5:5:0.0" -sws_flags lanczos -b:v 1024k -profile:v main -preset medium -tune film -async 1 -vsync 1 "%%~nG.mp4"
cmd 파일로 잘 작동하고 실행하면 루프가 해당 폴더의 모든 avi 파일을 찾습니다.
FFmpeg MY (전화 번호 변경)를 호출하고 입력 이름을 전달하면 선명하게 설정이 다시 조정됩니다. 나는 CRF와 " -b:v 1024k
" 가 필요하지 않습니다 .
출력 파일은 입력 파일에서 확장자를 뺀 값이며 mp4는 새로운 확장자입니다.
Linux 에서이 단일 라이너를 사용하여 파일 (일반적으로 H265)을 문제없이 Kodi에서 재생할 수있는 것으로 변환합니다.
for f in *.mkv; do ffmpeg -i "$f" -c:v libx264 -crf 28 -c:a aac -b:a 128k output.mkv; mv -f output.mkv "$f"; done
이렇게하면 임시 파일로 변환 된 다음 원본이 바뀌어 변환 후에도 이름이 동일하게 유지됩니다.
그것을하는 작은 PHP 스크립트 :
#!/usr/bin/env php
<?php
declare(strict_types = 1);
if ($argc !== 2) {
fprintf ( STDERR, "usage: %s dir\n", $argv [0] );
die ( 1 );
}
$dir = rtrim ( $argv [1], DIRECTORY_SEPARATOR );
if (! is_readable ( $dir )) {
fprintf ( STDERR, "supplied path is not readable! (try running as an administrator?)" );
die(1);
}
if (! is_dir ( $dir )) {
fprintf ( STDERR, "supplied path is not a directory!" );
die(1);
}
$files = glob ( $dir . DIRECTORY_SEPARATOR . '*.avi' );
foreach ( $files as $file ) {
system ( "ffmpeg -i " . escapeshellarg ( $file ) . ' ' . escapeshellarg ( $file . '.mp4' ) );
}
escapeshellarg()
Windows와 Linux 모두에서 작동합니다. 그래도 가장자리에 동의합니다.
아직 제안되지 않은 또 다른 간단한 해결책은 다음을 사용하는 것입니다 xargs
.
ls *.avi | xargs -i -n1 ffmpeg -i {} "{}.mp4"
하나의 사소한 함정은 출력 파일의 어색한 이름입니다 (예 :) input.avi.mp4
. 이에 대한 가능한 해결 방법은 다음과 같습니다.
ls *.avi | xargs -i -n1 bash -c "i={}; ffmpeg -i {} "\${i%.*}.mp4"
"