
.MOV
저는 Arch Linux 4.13.10을 사용하고 있으며 Canon EOS 카메라로 촬영한 여러 파일을 결합하고 싶습니다 .
.ts
그림과 같이 FFmpeg를 사용하여 파일을 전송 스트림(파일) 으로 변환하려고 했습니다 .여기, 결과 파일에서 사운드가 누락되었습니다.
결과 파일이 이면 좋겠지만 .mp4
이것이 반드시 필요한 것은 아닙니다.
어떻게 해야 하나요?
답변1
다음을 사용하여 파일을 병합하는 데 성공했습니다.FFmpeg의 역다중화 기능. 변환 을 위해 .mp4
이 오류를 피하기 위해 오디오 스트림을 명시적으로 변환해야 했습니다.
스트림 #1에서 코덱 pcm_s16le에 대한 태그를 찾을 수 없습니다. 코덱은 현재 컨테이너에서 지원되지 않습니다.
다음은 파일을 결합하는 명령입니다 merged.mp4
.
ffmpeg -f concat -i files_to_combine.txt -vcodec copy -acodec aac -strict -2 -b:a 384k merged.mp4
출력 파일이 .MOV
파일일 수도 있는 경우 명령은 다음과 같습니다.
ffmpeg -f concat -i files_to_combine.txt -vcodec copy -acodec copy merged.MOV
텍스트 파일의 내용은 다음과 같습니다 files_to_combine.txt
.
file ./first_file.MOV
file ./second_file.MOV
오류가 발생하는 경우
안전하지 않은 파일 이름 'space.mov가 있는 파일' files_to_combine.txt: 작업이 허용되지 않습니다.
파일 이름을 신뢰하면 -safe 0
이 오류를 해결하기 위해 추가할 수 있습니다. FFmpeg 참조매뉴얼 페이지:
ffmpeg -safe 0 -f concat ...
더 짧은 명령
5년 뒤에 같은 일을 시도했는데, 나도 성공했다.
ffmpeg -f concat -i files_to_combine.txt merged.mov
그리고
ffmpeg -f concat -i files_to_combine.txt -f mp4 merged.mp4
답변2
find *.MOV | sed 's:\ :\\\ :g'| sed 's/^/file /' > fl.txt; ffmpeg -f concat -i fl.txt -c copy output.mp4; rm fl.txt
답변3
대신 파일을 연결하는 방법을 찾고 있다면 .mp4
여기에서 다른 답변을 참조하세요.스택 오버플로: FFmpeg를 사용하여 두 개의 MP4 파일을 연결하는 방법은 무엇입니까?
.mov
여러 개 또는 .MOV
파일을 하나로 결합하려면
...해야 할 일은 다음과 같습니다.
# 0. Copy all .mov files that (you'd like to combine) into a single directory.
# Then `cd` into that directory.
# 1. Create a "files.txt" file containing a list of files to combine
find . -type f -iname "*.mov" | sort -V \
| awk '{print "file \x27" $0 "\x27"}' > files.txt
# [WHAT I USUALLY USE: FAST]
# 2. **If all of your .mov files have the same encoding** (ex: they were
# all recorded on the same video camera and with the same settings), you can
# specify to use the "copy" codec via `-c copy`, which means it will NOT
# have to re-encode the video. This just concatenates all the files together.
# THIS TAKES **SECONDS**.
time ffmpeg -f concat -safe 0 -i files.txt -c copy merged.mov
# [SLOW; SOMETIMES NECESSARY]
# OR 2. **If each of your .mov files has a different encoding,** you'll need to
# re-encode them all into a single stream.
# - This uses the "files.txt" file created above, and outputs the merged
# file into "merged.mov".
# THIS COULD TAKE **HOURS**.
time ffmpeg -f concat -safe 0 -i files.txt merged.mov
나는 일반적으로 첫 번째 옵션을 사용할 수 있는 상황에 있습니다.초대신에시간, 정말 좋아요!
추가 세부정보 및 설명
표시 되는 경우
ls -1
다음 파일이 있습니다.REC_0009.MOV REC_0010.MOV REC_0011.MOV
그러면
find
명령이 다음 파일을 생성합니다files.txt
.file './REC_0009.MOV' file './REC_0010.MOV' file './REC_0011.MOV'
부품
-iname "*.mov"
은 케이스를 수행합니다.~에.mov
민감한*은 또는.MOV
또는 기타 대문자 조합으로 끝나는 모든 파일과 일치합니다 .-safe 0
명령 을 잊어버리고ffmpeg
파일 이름에 짝수 형식의 "디렉토리"가 있으면./
다음과 같은 오류가 발생합니다.[concat @ 0x555a24968700] Unsafe file name './REC_0009.MOV' files.txt: Operation not permitted
이
-safe 0
옵션은ffmpeg
이 오류를 무시하고 파일 경로에 "안전하지 않은" 디렉터리를 허용하도록 지시합니다.ffmpeg
매뉴얼 페이지 에서온라인에서만 가능합니다(~ 아니다man ffmpeg
내 Linux Ubuntu 20.04 컴퓨터의 로컬 매뉴얼 페이지 에서 ):https://manpages.org/ffmpeg:safe
로 설정하면
1
안전하지 않은 파일 경로를 거부합니다. 파일 경로는 프로토콜 사양을 포함하지 않고 상대적이며 모든 구성 요소에 이식 가능한 문자 집합(문자, 숫자, 마침표, 밑줄 및 하이픈)의 문자만 포함하고 구성 요소 시작 부분에 마침표가 없는 경우 안전한 것으로 간주됩니다.로 설정하면
0
모든 파일 이름이 허용됩니다.기본값은 입니다
1
.-1
1
형식이 자동으로 검색되었는지 여부와 그렇지 않은 경우 와 동일합니다0
.이
-c copy
옵션은ffmpeg
"복사" 코덱을 사용하도록 지시합니다. 이는 비디오를 다시 인코딩하지 않음을 의미합니다. 이것이 바로 속도를 높이는 이유입니다.
참고자료
- 나는 공부했다@Matthias Braun의 답변도.
\x27
캐릭터 를 생성하는 데 사용하는 내 대답은 다음과 같습니다'
.스택 오버플로: 작은따옴표로 묶인 문자열 내에서 작은따옴표를 이스케이프 처리하는 방법- 위 명령의 뉘앙스를 파악하는 동안 VSCode 텍스트 편집기에서 GitHub Copilot AI와 많은 대화를 나누었습니다.
- MP4 파일에 대한 나의 답변:스택 오버플로: FFmpeg를 사용하여 두 개의 MP4 파일을 연결하는 방법은 무엇입니까?