Wie konvertiere ich 1080 @ 50i -> 720 @ 50p mit ffmpeg?

16232
BarsMonster

Ich mag 50-fps-Video wirklich, aber ich kann nicht machen, dass ffmpeg es für mich in 50fps konvertiert.

720p Auflösung ist bei mir absolut in Ordnung, brauche einfach mehr FPS.

50i sieht in normalen Playern einfach viel ruhiger aus (zum Beispiel deintercen der GOM Player das Video und spielt es bei 50 Hz. Sehr großer Unterschied zu 25 Hz-Video.) ...

Meine aktuelle Befehlszeile lautet:

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

Hier finden Sie weitere Videodetails. Das Quellvideo stammt vom Cannon HF10 AVCHD-Camcoder.

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 
9
Was meinst du mit "kann nicht machen"? Gibt es Fehler? Just Jake vor 13 Jahren 0
Es erzeugt Dateien, die wie 25p aussehen, nicht so weich wie 50i im richtigen Player. BarsMonster vor 13 Jahren 0
@slhck Hier geht es BarsMonster vor 12 Jahren 0
Gibt es einen bestimmten Grund für die Codierung in MPEG-4 Visual, anstatt h.264 erneut zu verwenden (z. B. "-vcodec libx264")? Es ist nicht wichtig, dass dies bei ~ 20 MBit / s eine Rolle spielt. slhck vor 12 Jahren 0
@slhck na ja, es ist nur Standard :-) BarsMonster vor 12 Jahren 0
Was passiert, wenn Sie ffmpeg mit "-r 100" verwenden? Warum verwenden Sie keinen Mencoder mit -vf scale = width: height? harrymc vor 12 Jahren 0
Nun, in der Mediainfo-Datei gibt es 100 FPS, aber ich bekomme immer noch nur 25 FPS auf dem Player. Wenn Sie Bild für Bild schrittweise vorgehen, sind es genau 25 FPS. BarsMonster vor 12 Jahren 0
Gelingt es mencoder, ffmpeg besser zu fahren? harrymc vor 12 Jahren 0
Noch eine Frage: Sind Sie sicher, dass das Eingangsvideo wirklich 50 fps ist? Wenn Sie mit "-r 100" versuchen, scheint es, dass die Header-Informationen den Videostream nicht immer korrekt beschreiben. Apropos: War die Videodatei "-r 100" größer als die mit "-r 50" erzeugte? harrymc vor 12 Jahren 0

5 Antworten auf die Frage

6
mtone

Just like interlacing progressive content divides each frame into 2 fields, thus doubling the frame rate, the common method of deinterlacing is to combine each 2 fields into 1 frame, which reduces the rate by 2, thus taking 50 into 25fps. You can of course double each final frame, but that does not provide any benefit.

First, we can read not to use -deinterlace, and yadif instead (which you already do):

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

You'll probably find the the yadif section of the FFMPEG documentation pretty interesting:

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. 

Notice how the default MODE is 0, which instructs FFMPEG to ouput 1 frame for each 2 fields, thus halving the fps. I think what you're looking for is MODE 1: one frame per field. I'm not too sure how to use these optional parameters but perhaps something like

-filter:v yadif 1:-1:0 -s "1280x720" -r 50 
Zumindest gibt es eine Ausgabe von 50 Bildern pro Sekunde, aber leider sind zwei aufeinanderfolgende Frames sehr ähnlich ... Während ich beim Original-50i-Video Frame für Frame Schritt für Schritt sehe, sehe ich wirklich, dass der Zeitraffer doppelt so viele "Schritte" hat und viel weicher ist. BarsMonster vor 12 Jahren 0
@BarsMonster Zuerst würde ich versuchen herauszufinden, was der GOM-Player macht, falls es auf irgendeine Form der Interpolation zurückzuführen ist. Ich bin neugierig - gibt es so viele interlaced Inhalte, die Informationen mit hoher Bildrate enthalten? (Bei der Konvertierung eines 25p in 50i für die Übertragung werden schließlich keine neuen Bewegungsinformationen erstellt - Sie benötigen Inhalte, die nur einen Interlaced-Effekt haben). Wenn Sie ein von GOM verwendetes Deinterlacting-Verfahren finden (siehe Wikipedia, es gibt viele), sollten Sie einen Filter suchen, der in AVISYNTH als Teil des Prozesses verwendet werden kann, anstatt die FFMPEG-YADIF-Methode zu verwenden . mtone vor 12 Jahren 0
1
Just Jake

Gemäß der Dokumentation werden mit der -rOption die Ausgabefelder pro Sekunde festgelegt. Beispielsweise wird die Ausgabe auf 50 Bilder pro Sekunde festgelegt:

ffmpeg -i input.avi -r 50 output.avi 
Leider ist die erzeugte Datei ungefähr die gleiche wie für -r 25. Und es ist nicht länger smoooth. Es sieht so aus, als hätte es nur ein 25p-Video benötigt, und dann wurde es umrahmt. BarsMonster vor 13 Jahren 0
Haben Sie auch versucht, die Eingabe-Framerate anzugeben? Just Jake vor 13 Jahren 0
Das ist erledigt. Wenn Sie ein Video deinterlace machen, opfern Sie die sanfte Bewegung, um mit progressiven Displays kompatibel zu sein. Jason vor 12 Jahren 3
@Jason Nun, mein Videoplayer (GOM Player) deinterlace 50i Video und zeigt es glatt (dh bei 50 Hz) auf meinem 120 Hz TFT-Monitor, was offensichtlich progressiv ist. Warum kann ein Videorekoder nicht dasselbe tun und einen glatten 50Hz-Ausgang erzeugen? Ich verstehe, dass 50i weniger kleine Details hat, aber warum kann ich nicht mit einer 50Hz-Ausgabe rechnen? BarsMonster vor 12 Jahren 0
Dies hängt vom verwendeten Deinterlacing-Filter ab. Natürlich macht GOM Player dies gut. Ich weiß nicht, wie FFmpeg mit Interlaced-Video umgeht. @BarsMonster slhck vor 12 Jahren 0
1
Jason

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

Leider produzierte es immer noch nur 25 fps ... Die Originaldatei ist um einiges ruhiger ... Auch das Hinzufügen von -r 50 hat nicht geholfen. BarsMonster vor 12 Jahren 1
1
Steven Penny

"In den meisten praktischen Fällen ist es nicht möglich, ein komplettes progressives Video von interlaced Inhalten abzurufen."

Auch wenn Sie ein kleines Beispiel des Videos hochladen könnten, würde dies Ihre Sache erheblich verbessern.

Quelle: mplayerhq.hu/DOCS/HTML/de/menc-feat-telecine.html

0
ecchphoto

Dieser Befehl funktioniert für mich:

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 

Die Quelle war eine Sony-Camcorder-Datei.