DTS không đơn điệu trên concat (ffmpeg)


17

Sau khi chạy lệnh này ffmpeg -f concat -i mylist.txt -c copy output.mp4- Tôi nhận được output.mp4tệp bị hỏng và thông báo này:

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%

Nội dung của mylist.txt

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

đầu ra cut.mp4 từ ffmpeg:

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

đầu ra cut2.mp4 từ ffmpeg:

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 Tôi đã nhận lệnh này ffmpeg -ss 00:00:11 -i myfile.mp4 -to 00:00:39 -vf 'drawbox= : x=0 : y=0 : color=invert' cut.mp4

cut2.mp4 Tôi đã nhận lệnh này ffmpeg -ss 00:00:00 -i myfile.mp4 -to 00:00:10 -c copy cut2.mp4

Tôi đã tìm kiếm rất nhiều - không tìm thấy bất kỳ giải pháp nào, có lẽ, ai đó có thể giúp tôi với giải pháp này.

output.mp4 có thể chơi được, nhưng trông lạ.

nhập mô tả hình ảnh ở đây


1
Bạn có thể cung cấp cả hai tập tin đầu vào để tôi có thể thực hiện các bài kiểm tra?
llogan

@LordNeckbeard vâng, tôi đã gửi nó cho bạn, cảm ơn bạn rất nhiều.
whitesiroi

1
Tôi dường như không thể lặp lại vấn đề chính xác. Tôi đang sử dụng bản dựng tĩnh gần đây nhất có sẵn từ tessus . Các tệp mẫu dường như khác với ảnh chụp màn hình của bạn, nhưng có vẻ như nó hoạt động tốt trong VLC và QuickTime, ngoại trừ việc tìm kiếm có vẻ bị rối. Tôi đã thử nghiệm trên máy OS X vì nó trông giống như những gì bạn đang sử dụng.
llogan

@LordNeckbeard Cảm ơn bạn rất nhiều, vâng với phiên bản này ffmpeg phiên bản N-71996-g372aa07-tessus nó hoạt động rất tốt. Cảm ơn bạn.
whitesiroi

tl; dr; loại bỏ -c copyđể cho phép mã hóa lại hoặc -c:a copychỉ sử dụng . Sau đó, bước concat vẫn có thể sử dụng -c copyvì tất cả các video đã được mã hóa lại. Lưu ý rằng một số video có cảnh báo này vẫn có vẻ ổn sau khi concat và như vậy -c copylà ổn.
林果

Câu trả lời:


10

Sử dụng mới nhất ffmpeg

Người dùng thông thường nên luôn luôn sử dụng ffmpegtừ nhánh git master hiện tại (mã mới nhất hiện có):

  • Khi gặp sự cố, điều đầu tiên cần làm là kiểm tra xem bạn có đang sử dụng bản dựng từ git master hay không.
  • Nó được coi là ổn định.
  • Nó sẽ có nhiều sửa lỗi và tính năng.
  • Phát triển FFmpeg rất tích cực .
  • Nếu bạn muốn nhận được hỗ trợ từ các tài nguyên trợ giúp chính thức, bạn phải sử dụng git master.
  • Phát hành là dành cho các nhà phân phối.

Xem trang Tải xuống FFmpeg để biết các tùy chọn khác nhau hoặc tham khảo FFmpeg Wiki: Hướng dẫn biên dịch .

Những thứ khác

  • Trong lệnh của bạn với drawboxbạn có thể sao chép âm thanh bằng -c:a copythay vì mã hóa lại nó.

  • Khi sử dụng -ss, -tochỉ hoạt động như mong đợi nếu -ssđược sử dụng làm tùy chọn đầu ra.


Cảm ơn bạn rất nhiều, nó hoạt động tốt hơn và nhanh hơn. Bạn có thể vui lòng kiểm tra video này quá không.stackexchange.com/questions/15477/ cấp Tôi chỉ tò mò nếu nó có thể được đơn giản hóa.
whitesiroi

@whitesiroi Chắc chắn rồi. Trả lời, mặc dù có vẻ như tôi đã làm một bình luận cho câu hỏi đó không vui.
llogan

Xin lỗi vì điều đó.
whitesiroi

1

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

tôi đã có vấn đề tương tự. Tôi đang chạy phiên bản ffmpeg 2.6.3 trên máy mac. Tôi đã chuyển đổi các clip nguồn của mình sang định dạng .MTS với thẻ được thêm là -q 0, cập nhật các phần mở rộng trong tệp văn bản và đặt tệp đầu ra của tôi thành .MTS khi tôi chạy lệnh concat trong ffmpeg. Nó làm việc như một say mê. Đây là quy trình làm việc của tôi.

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

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

đã cập nhật tệp văn bản (mylist.txt) để đọc:

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

sau đó chạy lệnh concat như sau:

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

Đã làm cho tôi! Bạn có thể chuyển đổi đầu ra cuối cùng.MTS sang bất kỳ định dạng nào bạn cần.


Giao thức này có mất dữ liệu không?
vẫy gọi

Không, lệnh đầu tiên chuyển đổi thành MPEG-2 không có chế độ lossless.
Gyan

1

Tôi đã gặp lỗi tương tự và âm thanh trong các video đầu ra của tôi đôi khi không đồng bộ và đôi khi bị mất hoàn toàn, nhưng cuối cùng tôi đã sử dụng mkvmergetừ mkvtoolnix.

Các video đầu vào của tôi đã được mã hóa với các cài đặt khác nhau và chúng có kích thước khác nhau, vì vậy trước tiên tôi đã thay đổi kích thước và mã hóa lại chúng bằng cách sử dụng 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

Một số video đầu vào của tôi không có kênh âm thanh, vì vậy tôi đã sử dụng một lệnh như thế này để thêm kênh âm thanh im lặng vào chúng:

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

Sau đó, tôi nối các video:

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

Nếu các tệp đầu vào của bạn có cùng kích thước, cùng số kênh âm thanh, cùng tốc độ mẫu âm thanh, v.v., bạn có thể sử dụng chỉ mkvmergeđể ghép các tệp một cách dễ dàng. Các tệp đầu vào mkvmergecũng có thể có bộ chứa MP4 nhưng tệp đầu ra sẽ có bộ chứa MKV ngay cả khi phần mở rộng tên tệp của nó được chỉ định là .mp4. Bạn có thể chạy ffmpeg -i output.mkv -c copy output.mp4để thay đổi container.

mkvmergecó cú pháp như thế mkvmerge -o output.mkv file1.mkv + file2.mkv + file3.mkv, đâu mkvmerge -o output.mkv file1.mkv +file2.mkv +file3.mkvcũng được chấp nhận.


1

Dựa trên câu trả lời thực sự hữu ích của Duncan:

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

Thì đây:

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

0

Khi tôi sử dụng ffmpeg để phát lại một số video đã ghi (có thể là TS, MP4 hoặc MKV) và nhận được các dts không đơn điệu trong luồng đầu ra - lỗi thời gian, v.v., video kết quả có vẻ chỉ có âm thanh hoặc phát giật. Cách duy nhất tôi tìm thấy để giải quyết vấn đề này một cách đáng tin cậy là sử dụng AviDemux. Với cài đặt Sao chép cho cả âm thanh và video và chọn MP4V2 Muxer, có thể, trong tùy chọn Cấu hình để chọn Tối ưu hóa cho Truyền phát. Tệp MP4 kết quả hiện có thể được sử dụng trong ffmpeg mà không tạo thông báo lỗi. Tin tưởng đây là sử dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.