Downsampling một video với avconv / ffmpeg


7

Tôi biết rất ít về mã hóa và sử dụng avconv / ffmpeg. Tôi đang cố gắng giảm mẫu video như sau:

avconv -i blah_in.avi -s 640x360 -pass 1 blah.avi
avconv -i blah_in.avi -s 640x360 -pass 2 blah.avi

Tôi biết rằng điều này rất đơn giản, nhưng tôi không thể tìm ra vấn đề là gì. Đây là thông báo lỗi từ pass 1:

avconv version 0.8.3-4:0.8.3-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
  built on Jun 12 2012 16:37:58 with gcc 4.6.3
[avi @ 0x9fdd240] non-interleaved AVI
Input #0, avi, from 'blah_in.avi':
  Metadata:
    encoder         : MEncoder svn r34540 (Ubuntu), built with gcc-4.6
  Duration: 01:21:59.24, start: 0.000000, bitrate: 8996 kb/s
    Stream #0.0: Video: mpeg4 (Advanced Simple Profile), yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 23.98 tbr, 23.98 tbn, 23.98 tbc
    Stream #0.1: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s
File 'blah.avi' already exists. Overwrite ? [y/N] y
[buffer @ 0x9fe1e00] w:1920 h:1080 pixfmt:yuv420p
[scale @ 0x9fdcfa0] w:1920 h:1080 fmt:yuv420p -> w:640 h:360 fmt:yuv420p flags:0x4
Incompatible sample format 's16' for codec 'ac3', auto-selecting format 'flt'
[ac3 @ 0x9fdc740] invalid bit rate
Output #0, avi, to 'blah.avi':
  Metadata:
    encoder         : MEncoder svn r34540 (Ubuntu), built with gcc-4.6
    Stream #0.0: Video: mpeg4, yuv420p, 640x360 [PAR 1:1 DAR 16:9], q=2-31, pass 1, 200 kb/s, 90k tbn, 23.98 tbc
    Stream #0.1: Audio: ac3, 44100 Hz, stereo, flt, 200 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (mpeg4 -> mpeg4)
  Stream #0:1 -> #0:1 (mp3 -> ac3)
Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height

Tôi đã thử một số thứ, nhưng chúng kết thúc với một thông báo lỗi tương tự, hoặc chất lượng cực kỳ kém; không quá nhiều do độ phân giải thấp, nhưng đầy đủ các tạo tác nén.

Bây giờ, những gì tôi muốn đạt được là độ phân giải / mã hóa tương tự như tệp avi sau, phát tốt trên thiết bị video trẻ em của tôi:

Stream #0.0: Video: mpeg4 (Advanced Simple Profile), yuv420p, 624x352 [PAR 1:1 DAR 39:22], 25 fps, 25 tbr, 25 tbn, 25 tbc
Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s

1
Tôi không chắc đó là nguyên nhân cốt lõi của vấn đề, nhưng bạn thực sự nên chỉ định bitrate - 200 kb/sđối với âm thanh là khá nhiều (đặc biệt là khi đầu vào có tốc độ bit thấp hơn) trong khi đối với video thì quá ít. Bạn cũng có thể sao chép luồng không thay đổi ( -acodec copyiirc).
peterph

Câu trả lời:


2

Dòng cuối cùng trong nhật ký đầu ra quá chung chung - bạn sẽ phải tìm kiếm thêm. Lỗi là đây:

[ac3 @ 0x9fdc740] invalid bit rate

Vấn đề là vì một số lý do avconv muốn mã hóa âm thanh MP3 của bạn sang AC3. Thực tế, khi bạn chỉ thay đổi kích thước video, bạn có thể để dòng bit âm thanh một mình.


Lưu ý rằng thay đổi kích thước và mã hóa lại sẽ làm giảm chất lượng của bạn một cách mạnh mẽ. Vì vậy, trừ khi bạn thực sự cần, đừng làm điều đó. Video của bạn sẽ bị mất thế hệ .

Nếu bạn có thể, hãy tránh sử dụng codec MPEG-4 Phần 2 (Xvid hoặc libavcodec -igen mpeg4) và sử dụng codec MPEG-4 Phần 10 / H.264 thay vào đó (ví dụ: x264). Vì H.264 không được hỗ trợ đúng cách trong các thùng chứa AVI, nên chúng tôi sẽ sử dụng MP4 thay vào đó, đây sẽ là lựa chọn của bạn thay vì AVI trong hầu hết thời gian.

ffmpeg -i in.avi -c:a copy -c:v libx264 -crf 23 -s:v 640x360 output.mp4

Điều này sẽ sao chép luồng âm thanh ( -c:a copy), mã hóa video thành x264 ( -c:v libx264) với chất lượng không đổi là 23 ( -crf). Sử dụng giá trị thấp hơn ở đây để có chất lượng tốt hơn (với các giá trị lành mạnh từ 18 Hàng28). Kích thước sẽ được thay đổi với -s:v.

Tôi đang sử dụng FFmpeg đồng nghĩa với Libav ở đây, vì cú pháp phải giống nhau. Tuy nhiên, tôi khuyên bạn nên bỏ phiên bản Libav mặc định đi kèm với Ubuntu và biên dịch FFmpeg từ nguồn hoặc sử dụng bản dựng tĩnh Linux gần đây .


1
... cụ thể, mã hóa AC-3 không thành công vì 200 kbit không phải là tốc độ bit hợp lệ được liệt kê trong thông số AC-3 , Phụ lục A, Bảng 4. Gần nhất là 192 và 224.
derobert

1

Tốc độ bit video được chỉ định là rất thấp: 200kpbs. Hãy thử lệnh này

ffmpeg -i input_video -b 800 -s 640x360 -vcodec xvid -acodec copy output_video

Theo đề xuất trong các bình luận nếu thiết bị hỗ trợ h.264 thì đó sẽ là lựa chọn tốt hơn.

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.