연속된 파일 연결

연속된 파일 연결

내 디렉토리에 연결하고 싶은 비디오 목록이 있습니다.

Video1.mpg
Video2.mpg
.
.
.
Video35.mpg

cat 명령에 수동으로 쓸 필요 없이 번호가 매겨진 순서대로 연결하고 싶습니다.

답변1

그리고 zsh그리고ffmpeg:

files=(Video*.mpg(n))
ffmpeg -f concat -safe 0 -i <(printf 'file %s\n' ${(qq)files}) -c copy output.mpg

(n)zsh글로벌 예선숫자순으로 정렬합니다. (qq)작은따옴표로 묶인 변수 확장 플래그입니다. ffmpeg파일 이름에 작은따옴표, 백슬래시 또는 개행 문자가 포함되어 있으면 예상대로 정확하게 인용된다고 보장할 수 없습니다.

내가 이해한 바로는 위의 내용은 모든 mpg 파일이 동일한 코덱을 사용한다고 가정합니다.

AFAICT, mpeg특히 파일의 경우 파일을 파일 수준에서 연결할 수도 있으며 대부분의 플레이어에서 계속 재생할 수 있으므로 다음을 수행할 수도 있습니다(여전히 작동함 zsh).

cat Video*.mpg(n) > output.mpg

macOS에 기본적으로 설치되어 있지만 zsh기본 로그인 셸을 명시적으로 변경하지 않는 한 터미널에서 얻을 수 있는 기본 셸은 아닙니다 bash. 따라서 먼저 터미널의 쉘 프롬프트에 입력 zsh하거나 다음을 실행해야 합니다.zshbash

zsh -c 'cat Video*.mpg(n) > output.mpg'

대신에.

답변2

Bash 중괄호 확장을 사용하십시오.

cat Video{{1..9},{10..35}}.mpg > outputfile

앞으로는 0파일 이름을 처음 지정할 때 패딩이 사용되므로 다음과 같이 할 수 있습니다.

cat Video{01..35}.mpg > outputfile

답변3

한 가지 방법은 다음과 같습니다.

cat $(ls Video*.mpg | sort -to -k2 -n )>outputfile  

ls Video*.mpg- 패턴을 기준으로 파일 나열 - 구분 기호, 두 번째 키 및 숫자를 사용하여
sort -to -k2 -n파일 정렬o-n

* ls알 수 없는 파일 목록에서 작업하는 것은 예측할 수 없지만 질문에 따르면 이것은 상대적으로 작고 알려진 목록입니다.

관련 정보