Sử dụng avconv, khi chuyển sang MKV, có cách nào để sửa các tệp đầu vào AVI được đóng gói không?


11

Do lỗi tương thích giữa máy chủ Plex và TV Panasonic, cách duy nhất để nó hoạt động tốt là chuyển mọi thứ sang MKV, sao chép thẳng tất cả các luồng (video, âm thanh, phụ đề)

Có vẻ đủ đơn giản:

avconv -i "input.avi" -c copy "output.mkv"

Ngoại trừ:

avconv version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers
  built on Apr  2 2013 17:00:59 with gcc 4.6.3
[mpeg4 @ 0x8422140] Invalid and inefficient vfw-avi packed B frames detected
Input #0, avi, from 'input.avi':
  Metadata:
    encoder         : VirtualDubMod 1.5.4.1 (build 2117/release)
  Duration: 00:27:38.52, start: 0.000000, bitrate: 1173 kb/s
    Stream #0.0: Video: mpeg4 (Advanced Simple Profile), yuv420p, 640x352 [PAR 1:1 DAR 20:11], 25 tbr, 25 tbn, 25 tbc
    Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 132 kb/s
File 'output.mkv' already exists. Overwrite ? [y/N] y
Output #0, matroska, to 'output.mkv':
  Metadata:
    encoder         : Lavf53.21.1
    Stream #0.0: Video: mpeg4, yuv420p, 640x352 [PAR 1:1 DAR 20:11], q=2-31, 1k tbn, 25 tbc
    Stream #0.1: Audio: libmp3lame, 48000 Hz, stereo, 132 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press ctrl-c to stop encoding
[matroska @ 0x8422cc0] Can't write packet with unknown timestamp
av_interleaved_write_frame(): Invalid argument

Với các dòng gotcha có liên quan là:

[mpeg4 @ 0x8422140] Invalid and inefficient vfw-avi packed B frames detected#
<snip>
[matroska @ 0x8422cc0] Can't write packet with unknown timestamp
av_interleaved_write_frame(): Invalid argument

Tôi không thể thấy tùy chọn để giải nén các khung B (hoặc xây dựng sơ đồ thời gian VBR? Chúng ta có cần các khung trong avconv không?)

Có cách nào để làm điều này, như trong avidemux không?

Câu trả lời:


8

Cách giải quyết là chuyển đổi sang .mp4 trước:

avconv -i input.avi -c copy temp.mp4
avconv -i temp.mp4 -c copy output.mkv
rm temp.mp4

Đáng buồn thay, người ta không thể đơn giản chuyển định dạng mp4 giữa các phiên bản avconv: "[mp4 @ 0x80846c0] muxer không hỗ trợ đầu ra không thể tìm kiếm"


Cảm ơn, tôi sẽ thử nó tối nay. Tôi tự hỏi nếu có một lệnh hoạt động như một bộ đệm? Chờ lệnh viết để stdin hoàn thành trước khi chuyển tất cả sang stdout. Với tìm kiếm trên thiết bị xuất chuẩn. Điều đó sẽ có ích. avconv -i xxx | buf | avconv -i stdin xxx
RoboJ1M

1
Thông báo lỗi tôi đã thêm có liên quan cụ thể đến việc cố gắng sử dụng các đường ống với avconv, vì các đường ống vốn không thể tìm kiếm được. Cách tốt nhất có thể làm là định vị temp.mp4 trên một tmpfs hoặc hệ thống tệp trong bộ nhớ tương tự. / dev / shm / là một ứng cử viên tốt cho việc này, nếu một người có đủ RAM.
rmsr

Về đường ống, có lẽ bạn có thể làm điều đó với các đường ống có tên aka fifo. Có một tìm kiếm cho mkfifo. Về cơ bản, bạn sử dụng một tệp như một bộ lưu trữ tạm thời cho cá mập.
Sparhawk

Giải pháp này cũng hoạt động cho ffmpeg
c97

8

Kể từ vé này năm 1979 tại ftrmpeg bugtracker , giải pháp đơn giản nhất là sửa lỗi này hoặc thêm thủ công -fflags +genptsvào dòng lệnh.

Tức là thay đổi

ffmpeg -i inputfile_that_cant_be_muxed_into_mkv.ext -c copy out.mkv

đến

ffmpeg -fflags +genpts -i inputfile_that_cant_be_muxed_into_mkv.ext -c copy out.mkv

1
Điều này vẫn mang lại cho tôi lỗi tương tự: /
Felix

làm việc với tôi với avconvphiên bản 0.8.16, cho đến khi nó hiển thị một số lẻ Can't write packet with unknown timestampở cuối tập tin. Kỳ dị.
malat

2
Đảm bảo -fflagsđược sử dụng làm tùy chọn đầu vào: nó phải đi trước -i input. Nhưng có lẽ nó sẽ không hoạt động nếu bạn không đặt +genptsđúng chỗ.
Peter Cordes

Điều này cũng hoạt động tốt với avconv9.18-6: 9.18-0ubfox0.14.04.1
Elder Geek

2

Nhờ Andreas Cadhalasta ffmpeggiờ đây có bộ lọc mới: mpeg4_unpack_bframes(xem tài liệu tham khảo ). Điều này sẽ cho phép bạn thoát khỏi tin nhắn : Invalid and inefficient vfw-avi packed B frames detected.

Cách sử dụng đơn giản như:

ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi
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.