Làm cách nào để chuyển đổi 1080 @ 50i -> 720 @ 50p bằng ffmpeg?


9

Tôi thực sự thích video 50fps, nhưng tôi không thể làm cho ffmpeg chuyển đổi nó thành 50fps cho tôi.

Độ phân giải 720p là hoàn toàn tốt với tôi, chỉ cần FPS nhiều hơn.

50i trông mượt mà hơn nhiều trong các trình phát thích hợp (ví dụ: Trình phát GOM thay thế video và phát ở tần số 50Hz. Sự khác biệt rất lớn so với video 25Hz.) ...

Dòng lệnh hiện tại của tôi là:

ffmpeg -i 00010.MTS -threads 3 -filter:v yadif -s "1280x720" -r 50 -b:v 20M output.avi

Dưới đây là nhiều chi tiết video. Nguồn video là từ máy quay phim Cannon HF10 AVCHD.

ffmpeg -i 00010.MTS -threads 3 -filter:v yadif -s "1280x720" -r 50 -b:v 20M output.avi
ffmpeg version N-37541-g670229e Copyright (c) 2000-2012 the FFmpeg developers
  built on Feb  3 2012 20:14:17 with gcc 4.6.2
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-ru
ntime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libope
ncore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --en
able-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-libschroedinger -
-enable-libspeex --enable-libtheora --enable-libvo-aacenc --enable-libvo-amrwben
c --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-
libxvid --enable-zlib
  libavutil      51. 37.100 / 51. 37.100
  libavcodec     54.  0.102 / 54.  0.102
  libavformat    54.  0.100 / 54.  0.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 61.100 /  2. 61.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0.  6.100 /  0.  6.100
  libpostproc    52.  0.100 / 52.  0.100
[h264 @ 000000000033FA30] Increasing reorder buffer to 1
Input #0, mpegts, from '00010.MTS':
  Duration: 00:03:13.92, start: 0.482156, bitrate: 16304 kb/s
  Program 1
    Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448), yuv420p, 1920x1
080 [SAR 1:1 DAR 16:9], 50 fps, 50 tbr, 90k tbn, 50 tbc
    Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, stereo, s16,
256 kb/s
File 'output.avi' already exists. Overwrite ? [y/N] y
w:1920 h:1080 pixfmt:yuv420p tb:1/1000000 sar:1/1 sws_param:
[yadif @ 0000000003CE95B0] mode:0 parity:-1 auto_enable:0
[scale @ 0000000003CE9550] w:1920 h:1080 fmt:yuv420p -> w:1280 h:720 fmt:yuv420p
 flags:0x4
Output #0, avi, to 'output.avi':
  Metadata:
    ISFT            : Lavf54.0.100
    Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 1280x720 [SAR 1:1 DA
R 16:9], q=2-31, 20000 kb/s, 50 tbn, 50 tbc
    Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, s16, 128 kb
/s
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> mpeg4)
  Stream #0:1 -> #0:1 (ac3 -> libmp3lame)
Press [q] to stop, [?] for help
frame=   15 fps=  0 q=2.0 size=     945kB time=00:00:00.62 bitrate=12481.3kbits/
frame=   32 fps= 32 q=2.0 size=    2132kB time=00:00:01.30 bitrate=13435.2kbits/
frame=   51 fps= 34 q=2.0 size=    3372kB time=00:00:02.06 bitrate=13409.2kbits/
frame=   70 fps= 35 q=2.0 size=    4641kB time=00:00:02.82 bitrate=13482.8kbits/
frame=   76 fps= 35 q=2.0 Lsize=    5047kB time=00:00:03.06 bitrate=13511.9kbits

Ý bạn là gì, 'không thể thực hiện'? Nó có cho bạn lỗi không?
Chỉ cần Jake

Nó tạo ra tập tin, trông giống như 25p, không phải là smioth như 50i trong trình phát thích hợp.
BarsMonster

@slhck Đây rồi
BarsMonster

Bất kỳ lý do cụ thể nào để mã hóa thành MPEG-4 Visual thay vì sử dụng lại h.264 (ví dụ: -vcodec libx264Không phải vấn đề đó chỉ ở mức ~ 20 MBit / giây, nhưng vẫn vậy
slhck

@slhck tốt, nó chỉ là mặc định :-)
BarsMonster

Câu trả lời:


1

"Đối với hầu hết các trường hợp thực tế, không thể truy xuất một video lũy tiến hoàn chỉnh từ nội dung xen kẽ."

Ngoài ra nếu bạn có thể tải lên một mẫu nhỏ của video, nó sẽ giúp bạn gây ra sự run rẩy.

Nguồn: mplayerhq.hu/DOCS/HTML/en/menc-feat-telecine.html


7

Giống như nội dung lũy ​​tiến xen kẽ chia mỗi khung hình thành 2 trường, do đó nhân đôi tốc độ khung hình, phương pháp khử xen kẽ phổ biến là kết hợp mỗi 2 trường thành 1 khung hình, làm giảm tốc độ xuống 2, do đó lấy 50 thành 25 khung hình / giây. Tất nhiên bạn có thể nhân đôi mỗi khung hình cuối cùng, nhưng điều đó không mang lại lợi ích gì.

Đầu tiên, chúng ta có thể đọc không sử dụng -deinterlace và yadif thay vào đó (mà bạn đã làm):

 - deinterlace This option is deprecated since the deinterlacing is very low quality. Use the yadif filter with -filter:v yadif. 

Có lẽ bạn sẽ thấy phần yadif trong tài liệu FFMPEG khá thú vị:

Deinterlace the input video ("yadif" means "yet another deinterlacing filter"). 
It accepts the optional parameters: mode:parity:auto. 

MODE specifies the interlacing mode to adopt, accepts one of the following values: 
‘0’
output 1 frame for each frame
‘1’
output 1 frame for each field 
‘2’
like 0 but skips spatial interlacing check 
‘3’
like 1 but skips spatial interlacing check 
Default value is 0. 

PARITY default value is -1.
AUTO default value is 0. 

Lưu ý cách MODE mặc định là 0, hướng dẫn FFMPEG đưa ra 1 khung hình cho mỗi 2 trường, do đó giảm một nửa khung hình / giây. Tôi nghĩ những gì bạn đang tìm kiếm là MODE 1: một khung hình cho mỗi trường . Tôi không chắc chắn làm thế nào để sử dụng các tham số tùy chọn này nhưng có lẽ một cái gì đó như

-filter:v yadif 1:-1:0 -s "1280x720" -r 50 

Ít nhất nó cho đầu ra 50 khung hình / giây, nhưng thật không may, 2 khung hình liên tiếp được tạo ra rất giống nhau ... Trong khi tôi bước khung hình video 50i ban đầu theo khung hình, tôi thực sự thấy rằng chuyển động nhanh có hai lần 'bước' và mượt mà hơn nhiều.
BarsMonster

@BarsMonster Trước tiên, tôi sẽ cố gắng tìm hiểu xem trình phát GOM làm gì, trong trường hợp đó là do một số hình thức nội suy. Tôi tò mò - có nhiều nội dung xen kẽ có chứa thông tin fps cao không? (Rốt cuộc, việc chuyển đổi 25p thành 50i để phát sóng không tạo ra bất kỳ thông tin chuyển động mới nào - bạn cần nội dung theo chiều dọc xen kẽ). Tiếp theo, nếu bạn tìm thấy một kỹ thuật khử liên kết mà GOM sử dụng (xem wikipedia, có khá nhiều), bạn nên thử tìm một bộ lọc cho nó có thể được sử dụng trong AVISYNTH như một phần của quy trình thay vì sử dụng phương pháp -YADIF của FFMPEG .
nhạc chuông

1

Theo tài liệu , -rtùy chọn đặt các khung tệp đầu ra mỗi giây. Ví dụ: điều này đặt đầu ra thành 50 khung hình mỗi giây:

ffmpeg -i input.avi -r 50 output.avi

Thật không may, tập tin được tạo ra tương tự như cho -r 25. Và nó không còn là smoooth nữa. Có vẻ như nó chỉ quay video 25p, và sau đó đóng khung nó.
BarsMonster

Bạn đã thử chỉ định tốc độ khung hình đầu vào là tốt?
Chỉ cần Jake

3
Đó là trích. Khi bạn hủy liên kết video, bạn hy sinh chuyển động mượt mà để tương thích với màn hình lũy tiến.
Jason

@Jason Chà, videoplayer (GOM Player) của tôi thay thế video 50i và hiển thị mượt mà (tức là ở tần số 50Hz) trên màn hình TFT 120Hz của tôi, rõ ràng là tiến bộ. Tại sao bộ giải mã video không thể làm điều tương tự và tạo ra đầu ra 50Hz mượt mà? Tôi hiểu rằng 50i có ít chi tiết nhỏ hơn, nhưng tại sao tôi không thể mong đợi có được đầu ra 50Hz?
BarsMonster

Nó phụ thuộc vào bộ lọc khử xen kẽ được sử dụng. Rõ ràng GOM Player làm tốt công việc này. Đừng biết quá nhiều về cách FFmpeg xử lý video xen kẽ. @BarsMonster
slhck

1

ffmpeg -i input.avi -deinterlace -filter:v yadif -s "1280x720" output.avi


1
Thật không may, nó vẫn chỉ tạo ra đầu ra 25 khung hình / giây ... Tệp gốc là cách dễ dàng hơn .... Ngay cả việc thêm -r 50 cũng không giúp được gì.
BarsMonster

0

Lệnh này đang làm việc cho tôi:

ffmpeg -i source_50i.MTS -aspect 1920:1080 -vf yadif=1,scale=1920:1080 -c:v libx264 -preset fast -profile:v high -crf 23 -ac 2 -strict experimental -c:a aac -b:a 96k -movflags +faststart -y result_50p.mp4

Nguồn là một tập tin máy quay Sony.

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.