2013-08-31 3 views
35

폴더에 여러 개의 청크가 있습니다.avconv로 비디오를 병합하는 방법은 무엇입니까?

avconv -f concat -i <(printf "file '%s'\n" /root/chunk/*.mp4) -y \ 
-c copy /root/test/full.mp4 

알 수없는 입력 형식 : 'CONCAT'

avconv -f concat -i <(printf "%s|" /root/chunk/*.mp4) -y \ 
-c copy /root/test/full.mp4 

알 수없는 입력 형식을

0001.mp4 
0002.mp4 
0003.mp4 
... 
0112.mp4 

내가 full.mp4로 병합하고 싶습니다 내가 사용하려고 : 'concat'

avconv -i concat:`ls -ltr /root/chunk/*.mp4 | awk 'BEGIN {ORS="|"} { print $9 }'` \ 
-c:v copy -c:a copy /root/test/full.mp4 

마지막 판에서는 하나의 입력 파일 만 캐치되어 출력되었습니다.

폴더의 모든 청크를 전체 비디오로 병합하는 방법은 무엇입니까?

저는 ffmpeg 또는 기타를 사용하고 싶지 않습니다. Avconv 만.

+0

이 GitHub의 프로젝트를 살펴 보자 : 다음은 예입니다 https://bugzilla.libav.org/show_bug.cgi ? id = 775 – v010dya

+0

보관 용 계정에서 avconv.txt 파일을 삭제 했으므로 링크 부패 문제가 있습니다. 질문에서 삭제하겠습니다. – v010dya

+0

http://superuser.com/questions/521113/join-mp4-files-in-linux –

답변

20
avconv -i concat:file1.mp4\|file2.mp4 -c copy output.mp4 

컨테이너 유형 (AVI으로 근무 중)에서 작동하는지 모르겠습니다.

+8

제게 도움이 안된 일은 ... mencoder -oac pcm -ovc copy -o merged_file.mp4'ls *. mp4' –

+0

mp3 및 avconv 0.8.10 – Andy

+5

mp4 컨테이너는 이런 식으로 연결할 수 없습니다. –

34

mp4 "허용 된"대답이 제시하는 것처럼 파일을 간단하게 연결할 수 없습니다.

실행하면 그 결과 만 output.mp4이고 내용은 file1.mp4입니다.

그렇다면 원본 파일을 mpeg 스트림으로 올바르게 분할하는 한 원본 질문에서 수행하려는 작업은 실제로 수행 할 수 있습니다.

다음 명령은 파일에, 배에 60초 세그먼트를 input.mp4을 분할한다 [1-3] .TS : 다른 대답에서 알 수 있듯이

avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \ 
    -bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file1.ts 
avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \ 
    -bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file2.ts 
avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \ 
    -bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file3.ts 

그런 다음 함께 많은 그들을 다시 넣을 수 있습니다 :

  • 01 : 부분에서 설명
    avconv -i concat:"file1.ts|file2.ts|file3.ts" -c copy \ 
        -bsf:a aac_adtstoasc -y full.mp4 
    

    는 I는 확장 병렬 트랜스 코더를 만드는 방법이 사용 23,

+1

이 솔루션은 저에게 효과적이지 않습니다.명령 줄에서 'concat'이라는 단어를 사용하면 '알 수없는 입력 형식 :'concat '또는'요청 된 출력 형식 'concat : test.mp3'이 적절한 출력 형식이 아닙니다. '와 같은 오류가 발생합니다. 어떤 제안? –

+1

avconv의 버전은 무엇입니까? – Aaron

+0

avconv 버전 12에서 동일한 문제가 있습니다. 버전 11이 작동하지 않습니다. – omnibrain

0

이 방법은 원시 * .AVI 파일을 concating을 위해 할 것입니다, 나는 가정한다. 그러나이 질문을보고 끝날 것 AVI 파일을 가입하고자하는 많은 사람들이 있기 때문에 어쨌든 여기 내 대답을 게시합니다 :

cat *.avi > out_tmp.avi 
avconv -i out_tmp.avi -c copy output.avi 

한 번 더 시간 : 만 압축 * .AVI 파일을 사용할 수 있습니다.

6

이 만 avconv 경우

avconv -i 1.mp4 1.mpeg 
avconv -i 2.mp4 2.mpeg 
avconv -i 3.mp4 3.mpeg 

cat 1.mpeg 2.mpeg 3.mpeg | avconv -f mpeg -i - -vcodec mpeg4 -strict experimental output.mp4 

이상 작동 작동 - 그러나는 FFmpeg 추가 한 기능을 ...인용에 : avconv 단계 위

"

은 느리고 에게 출력의 품질을 줄여 불필요한 추가 손실 인코딩 단계를 수행 내가 대신 CONCAT 디멀티플렉서에게 (추가 정보) 또는 CONCAT 필터를 사용하는 것이 좋습니다,하지만 그 avconv 부족합니다. "는 FFmpeg에서는 FFmpeg에서 사용할 수있는 기능은 - 당신이 명명 된 파이프를 지원하는 시스템을 사용하는 경우는 중간 파일을 생성하는 것을 피하기 위해 사람들을 사용할 수
SEE https://trac.ffmpeg.org/wiki/Concatenate 

을 @LordNeckbeard -이는 FFmpeg 모든 기록 된 데이터를 전송 표준 오류 (전송 to)를/dev/null로 설정하면 명령 줄이 복잡해지지 않습니다.

mkfifo temp1 temp2 
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1 2> /dev/null & \ 
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2 2> /dev/null & \ 
ffmpeg -f mpegts -i "concat:temp1|temp2" -c copy -bsf:a aac_adtstoasc output.mp4 
+0

마지막 단계에서 많은 오류가 표시되지만 +1 결과는 병합 된 파일이므로 +1이됩니다! – Mark

+1

이 작품은 나를 위해 –

10

은 MP4를 들어 내가 찾은 유일한 작업 솔루션 GPAC 패키지

#!/bin/bash 
filesList="" 
for file in $(ls *.mp4|sort -n);do 
    filesList="$filesList -cat $file" 
done 
MP4Box $filesList -new merged_files_$(date +%Y%m%d_%H%M%S).mp4 

또는 명령 MP4Box로했다 mencoder와 avconv와

MP4Box -cat file1.mp4 -cat file2.mp4 -new mergedFile.mp4 

이다 나는 could'nt는 :-(를 작동하게

+0

나는 데비안 jessie에있어 이것은 (누락 된 패키지로 인해) 실행할 수있는 유일한 대답입니다. 결과는 이상하지만 실제 스트림은 VLC가 보여주는 것보다 짧습니다. 재생이 다시 시작됩니다. –

+0

놀라운 도구입니다. 언급 해 주셔서 감사합니다! –

+0

현재 디렉토리의 모든 mp4 파일을 가져 오는 더 짧은 명령 줄은 다음과 같습니다 :'MP4Box $ (printf - "-cat % s"* .mp4) -new mergedFile.mp4' – filmil

0

나는 이것을 avidemux (gtk 도구)으로 수행했습니다. 대부분의 리눅스에서 패키지로 사용할 수 있으며 Windows 및 Mac에도 사용할 수 있습니다. 간단히 첫 번째 파일을 열었습니다. 그런 다음 순서대로 다음 항목을 추가했습니다. 마지막으로, 오디오 및 비디오 복사본과 형식 mp4를 사용하여 연결된 비디오를 저장했습니다.

정말 잘됐다!

2

이 사람은 나를 위해 작동 :

avconv -i "concat:001.mp4|002.mp4|003.mp4" -c copy full.mp4 

그냥 그것들을 재 인코딩없이 하나의 MP4로 모든 파일을 concats.

+0

이 페이지를 찾은 유일한 이유는 왜냐하면이 솔루션은 단지'concat :: Protocol not found'를 출력하기 때문입니다 ('avconv -protocol'에 의해 출력 된 프로토콜 목록에 있음에도 불구하고) –

0

이렇게하려면 ffmpeg 명령을 사용하고 있습니다. 그것은 여기 WEBM에 관해서

ffmpeg -i concat:/dev/null|file1.ts|file2.ts -c copy -bsf:a aac_adtstoasc -y output.mp4 

가 나는 관련 버그를 제기했습니다 Distributed parallel video trascoding

관련 문제