Comment convertir 1080 @ 50i -> 720 @ 50p en utilisant ffmpeg?

9

J'aime vraiment la vidéo à 50 images par seconde, mais je ne peux pas faire de ffmpeg la convertir en 50 images par seconde pour moi.

La résolution 720p me convient parfaitement, j'ai juste besoin de plus de FPS.

50i semble juste beaucoup plus fluide dans les bons lecteurs (par exemple, GOM Player désentrelace la vidéo et la lit à 50 Hz. Très grande différence avec la vidéo à 25 Hz.) ...

Ma ligne de commande actuelle est:

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

Voici plus de détails vidéo. La vidéo source provient du caméscope 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
BarsMonster
la source
Que voulez-vous dire, «ne peut pas faire»? Cela vous donne-t-il des erreurs?
Just Jake
Il produit un fichier, qui ressemble à 25p, pas aussi lisse que 50i dans un lecteur approprié.
BarsMonster
@slhck Ça y est
BarsMonster
N'importe quelle raison spécifique pour l'encodage en MPEG-4 Visual au lieu d'utiliser à nouveau h.264 (par exemple -vcodec libx264? Pas que cela devrait avoir autant d'importance à ~ 20 Mbits / s, mais quand même.
slhck
@slhck bien, c'est juste par défaut :-)
BarsMonster

Réponses:

1

"Dans la plupart des cas pratiques, il n'est pas possible de récupérer une vidéo progressive complète à partir d'un contenu entrelacé."

De plus, si vous pouviez télécharger un petit échantillon de la vidéo, cela aiderait considérablement votre cause.

Source: mplayerhq.hu/DOCS/HTML/en/menc-feat-telecine.html

Steven Penny
la source
7

Tout comme l'entrelacement d'un contenu progressif divise chaque image en 2 champs, doublant ainsi la fréquence d'images, la méthode courante de désentrelacement consiste à combiner chaque 2 champs en 1 image, ce qui réduit le taux de 2, ce qui prend 50 à 25 images par seconde. Vous pouvez bien sûr doubler chaque image finale, mais cela n'apporte aucun avantage.

Tout d'abord, nous pouvons lire pour ne pas utiliser -deinterlace et yadif à la place (ce que vous faites déjà):

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

Vous trouverez probablement la section yadif de la documentation FFMPEG assez intéressante:

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. 

Remarquez comment le MODE par défaut est 0, ce qui indique à FFMPEG de sortir 1 trame pour chaque 2 champs, réduisant ainsi de moitié les fps. Je pense que ce que vous recherchez est le MODE 1: une image par champ . Je ne sais pas trop comment utiliser ces paramètres facultatifs, mais peut-être quelque chose comme

-filter:v yadif 1:-1:0 -s "1280x720" -r 50 
mtone
la source
Au moins, cela donne une sortie de 50 ips, mais malheureusement, 2 images séquentielles générées sont très similaires ... Alors que lorsque je fais un pas vidéo 50i original image par image, je vois vraiment que le mouvement rapide a deux fois plus de `` pas '', et beaucoup plus fluide.
BarsMonster
@BarsMonster Tout d'abord, j'essaierais de savoir ce que fait le lecteur GOM, au cas où cela serait dû à une forme d'interpolation. Je suis curieux - y a-t-il autant de contenu entrelacé qui contient des informations à haute résolution? (Après tout, la conversion d'un 25p en 50i pour la diffusion ne crée pas de nouvelles informations de mouvement - vous avez besoin d'un contenu droit à entrelacé). Ensuite, si vous trouvez une technique de désentrelacement que GOM utilise (voir wikipedia, il y en a un certain nombre), vous devriez essayer de trouver un filtre pour celui-ci qui peut être utilisé dans AVISYNTH dans le cadre du processus au lieu d'utiliser la méthode -YADIF de FFMPEG .
mtone
1

Selon la documentation , l' -roption définit les images du fichier de sortie par seconde. Par exemple, cela définit la sortie à 50 images par seconde:

ffmpeg -i input.avi -r 50 output.avi
Just Jake
la source
Malheureusement, le fichier produit est à peu près le même que pour -r 25. Et ce n'est plus lisse. On dirait qu'il a juste pris une vidéo 25p, puis l'a modifié.
BarsMonster
Avez-vous également essayé de spécifier la fréquence d'images en entrée?
Just Jake
3
Cela est ignoré. Lorsque vous désentrelacez une vidéo, vous sacrifiez le mouvement fluide pour la compatibilité avec les affichages progressifs.
Jason
@Jason Eh bien, mon lecteur vidéo (lecteur GOM) désentrelace la vidéo 50i et la montre en douceur (c.-à-d. À 50 Hz) sur mon moniteur TFT 120 Hz, qui est évidemment progressif. Pourquoi le recodeur vidéo ne peut-il pas faire la même chose et produire une sortie fluide à 50 Hz? Je comprends que le 50i a moins de petits détails, mais pourquoi ne puis-je pas m'attendre à obtenir une sortie de 50 Hz?
BarsMonster
Cela dépend du filtre de désentrelacement utilisé. De toute évidence, GOM Player fait un bon travail dans ce domaine. Je ne sais pas trop comment FFmpeg gère la vidéo entrelacée. @BarsMonster
slhck
1

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

Jason
la source
1
Malheureusement, il ne produisait toujours que 25 images par seconde ... Le fichier d'origine est beaucoup plus fluide .... Même l'ajout de -r 50 n'a pas aidé.
BarsMonster
0

Cette commande fonctionne pour moi:

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

La source était un fichier caméscope Sony.

ecchphoto
la source