concat의 비단 일 DTS (ffmpeg)


17

이 명령을 실행 한 후 ffmpeg -f concat -i mylist.txt -c copy output.mp4손상된 output.mp4파일 과이 메시지가 나타납니다.

ffmpeg -f concat -i mylist.txt -c copy output.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, concat, from 'mylist.txt':
  Duration: N/A, start: 0.000000, bitrate: 829 kb/s
    Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x900, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc
    Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf56.25.101
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1440x900, q=2-31, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 15360 tbc
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598061, current: 467644; changing to 598062. This may result in incorrect timestamps in the output file.
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598062, current: 468044; changing to 598063. This may result in incorrect timestamps in the output file.
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598063, current: 468444; changing to 598064. This may result in incorrect timestamps in the output file.
...
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598362, current: 588044; changing to 598363. This may result in incorrect timestamps in the output file.
frame= 1472 fps=0.0 q=-1.0 Lsize=    5825kB time=00:00:49.04 bitrate= 973.0kbits/s
video:4903kB audio:877kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.776358%

의 내용 mylist.txt

file 'cut.mp4'
file 'cut2.mp4'

ffmpeg에서 cut.mp4 출력 :

ffmpeg -i cut.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'cut.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.25.101
  Duration: 00:00:39.04, start: 0.036281, bitrate: 837 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x900, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

ffmpeg의 cut2.mp4 출력 :

ffmpeg -i cut2.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'cut2.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.25.101
  Duration: 00:00:10.07, start: 0.000000, bitrate: 1498 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1440x900, 1271 kb/s, 30 fps, 30 tbr, 12k tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 218 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

cut.mp4 나는이 명령으로 ffmpeg -ss 00:00:11 -i myfile.mp4 -to 00:00:39 -vf 'drawbox= : x=0 : y=0 : color=invert' cut.mp4

cut2.mp4 나는이 명령으로 ffmpeg -ss 00:00:00 -i myfile.mp4 -to 00:00:10 -c copy cut2.mp4

나는 많은 것을 찾았습니다-해결책을 찾지 못했습니다. 아마도 누군가 나를 도울 수 있습니다.

output.mp4 재생할 수 있지만 이상하게 보입니다.

여기에 이미지 설명을 입력하십시오


1
테스트를 수행 할 수 있도록 두 입력 파일을 모두 제공 할 수 있습니까?
llogan

@LordNeckbeard 예, 당신에게 보냈습니다. 대단히 감사합니다.
whitesiroi

1
정확한 문제를 재현 할 수 없습니다. tessus 에서 사용 가능한 최신 정적 빌드를 사용하고 있습니다 . 샘플 파일은 스크린 샷과 다르지만 VLC 및 QuickTime에서 제대로 작동하는 것 같습니다. OS X 컴퓨터에서 사용하고있는 것처럼 보이기 때문에 테스트했습니다.
llogan

@LordNeckbeard 매우 감사합니다.이 버전의 ffmpeg 버전 N-71996-g372aa07-tessus를 사용해 주셔서 감사합니다. 감사합니다.
whitesiroi

tl; dr; -c copy다시 인코딩을 허용하거나 사용 -c:a copy하지 않으려면 제거하십시오 . 그러면 -c copy모든 동영상이 이미 다시 인코딩되었으므로 연결 단계를 계속 사용할 수 있습니다 . 이 경고가있는 일부 비디오는 연결 후에도 여전히 좋아 보이므로 -c copy괜찮습니다.
林果 皞

답변:


10

최신 사용 ffmpeg

일반 사용자는 항상 ffmpeg현재 git master 브랜치 (사용 가능한 최신 코드)에서 사용해야 합니다.

  • 문제가 발생하면 가장 먼저 할 일은 git master의 빌드를 사용하고 있는지 확인하는 것입니다.
  • 안정적인 것으로 간주됩니다.
  • 더 많은 버그 수정 및 기능이 있습니다.
  • FFmpeg 개발은 매우 활발하다 .
  • 공식 도움말 리소스에서 지원을 받으려면 git master를 사용해야합니다.
  • 배포판을위한 릴리스입니다.

다양한 옵션에 대해서는 FFmpeg 다운로드 페이지를 참조하거나 FFmpeg Wiki : Compile Guides를 참조하십시오 .

다른 것들

  • 명령을 사용 drawbox하면 오디오를 다시 인코딩하는 대신 스팀 복사 할 수 있습니다 -c:a copy.

  • 사용하는 경우 -ss, -to경우에만 예상대로 작동합니다 -ss출력 옵션으로 사용됩니다.


대단히 감사합니다. 더 잘 작동합니다. 이것도 확인하십시오. video.stackexchange.com/questions/15477/… 단순화 될 수 있는지 궁금합니다.
whitesiroi

트윗 담아 가기 답변했지만, 그 질문에 대한 논평자를 불행하게 만들었습니다.
llogan

그 죄송합니다.
whitesiroi

1

https://trac.ffmpeg.org/wiki/Concatenate

나는이 같은 문제가 있었다. Mac에서 ffmpeg 버전 2.6.3을 실행하고 있습니다. 소스 태그를 -q 0 태그가 추가 된 .MTS 형식으로 변환하고 텍스트 파일의 확장자를 업데이트 한 다음 ffmpeg에서 concat 명령을 실행할 때 출력 파일을 .MTS로 설정했습니다. 그것은 매력처럼 작동했습니다. 여기 내 워크 플로우가 있습니다.

ffmpeg -i clip-1.MOV -q 0 clip-1.MTS

ffmpeg -i clip-2.MOV -q 0 clip-2.MTS

텍스트 파일 (mylist.txt)을 다음과 같이 업데이트했습니다.

file clip-1.MTS
file clip-2.MTS

그런 다음 다음과 같이 concat 명령을 실행하십시오.

ffmpeg -f concat -i mylist.txt -c copy output.MTS

나를 위해 일했다! 최종 출력 MTS를 원하는 형식으로 변환 할 수 있습니다.


이 프로토콜은 무손실입니까?
becko

아니요, 첫 번째 명령은 손실없는 모드가없는 MPEG-2로 변환됩니다.
Gyan

1

비슷한 오류가 발생하여 출력 비디오의 오디오가 때때로 동기화되지 않고 때로는 완전히 누락되었지만 mkvmergemkvtoolnix에서 대신 사용했습니다.

입력 비디오는 다른 설정으로 인코딩되었으며 크기가 다르므로 먼저 다음을 사용하여 크기를 조정하고 다시 인코딩했습니다 ffmpeg.

for f in *.mp4;do w=1280;h=720;ffmpeg -i $f -filter:v "scale=iw*min($w/iw\,$h/ih):ih*min($w/iw\,$h/ih),pad=$w:$h:($w-iw*min($w/iw\,$h/ih))/2:($h-ih*min($w/iw\,$h/ih))/2" -c:v libx264 -crf 22 -preset slow -pix_fmt yuv420p -c:a libfdk_aac -vbr 3 -ac 2 -ar 44100 ${f%mp4}mkv;done

입력 비디오 중 일부에 오디오 채널이 없으므로 다음과 같은 명령을 사용하여 자동 오디오 채널을 추가했습니다.

for f in *.mkv;do ffprobe $f|&grep -q '1: Audio'||ffmpeg -i $f -f lavfi -i anullsrc -c:a libfdk_aac -shortest -c:v copy temp-$f;mv {temp-,}$f;done

그 후 비디오를 연결했습니다.

mkvmerge -o /tmp/output.mkv $(printf %s\\n *.mkv|sed '1!s/^/+/')

입력 파일의 크기, 오디오 채널 수, 오디오 샘플 속도 등이 동일 mkvmerge하면 파일을 무손실로 연결하는 데 사용할 수 있습니다 . 에 대한 입력 파일 mkvmerge에는 MP4 컨테이너도있을 수 있지만 파일 이름 확장자가로 지정되어 있어도 출력 파일에 MKV 컨테이너가 있습니다 .mp4. ffmpeg -i output.mkv -c copy output.mp4컨테이너를 변경하기 위해 실행할 수 있습니다 .

mkvmerge같은 구문은 mkvmerge -o output.mkv file1.mkv + file2.mkv + file3.mkv, mkvmerge -o output.mkv file1.mkv +file2.mkv +file3.mkv또한 인정된다.


1

Duncan의 유용한 답변을 바탕으로 :

for f in ./*.mp4; do ffmpeg -i $f -q 0 "${f%.*}.mts"; done

그런 다음 :

ffmpeg -f concat -safe 0 -i <(for f in ./*.mts; do echo "file '$PWD/$f'"; done) -c copy All.mts

0

ffmpeg를 사용하여 일부 녹화 된 비디오 (TS, MP4 또는 MKV 일 수 있음)를 리 뮤텍스하고 출력 스트림 (타임 스탬프 등) 오류에서 단조롭지 않은 dts를 얻는 경우 결과 비디오에 오디오 만있는 것 같거나 빠르게 재생됩니다. 내가 이것을 안정적으로 처리하는 유일한 방법은 AviDemux를 사용하는 것입니다. 오디오 및 비디오 모두에 대한 복사 설정과 MP4V2 Muxer를 선택하면 구성 옵션에서 스트리밍 최적화를 선택할 수 있습니다. 결과 MP4 파일은 이제 오류 메시지를 생성하지 않고 ffmpeg에서 사용할 수 있습니다. 이것이 사용된다고 신뢰하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.