1 votes

L'ajustement à la milliseconde dans FFmpeg entraîne un ralentissement massif de la vitesse de traitement

Je suis nouveau ici, c'est la première fois que je m'inscris sur un forum comme celui-ci, alors je m'excuse sincèrement si je suis nul ! Merci d'avance pour votre patience. J'utilise Windows CMD sur mon ordinateur portable.

J'essaie de couper (supprimer) les 7,3 premières secondes d'une vidéo de danse dont l'audio est synchronisé avec ces mouvements. Voici la ligne de code avec laquelle j'ai commencé :

ffmpeg -ss 7.3 -i myVideo.mp4 -c copy trimmed.mp4

Alors que ce montage se fait instantanément (très bien), la milliseconde est ignorée et le fichier de sortie résultant est coupé à partir de 7 secondes au lieu de 7,3. J'ai donc essayé de réviser comme suit (en inversant l'ordre des entrées) :

ffmpeg -i myVideo.mp4 -ss 7.3 -c copy trimmed.mp4

Ici, le montage était à nouveau instantané (excellent) ET coupé au niveau de détail correct de la milliseconde, mais un retard sur mon audio a été introduit (rendant la vidéo éditée inutile). J'utilise actuellement le logiciel générique "Movies & TV" pour lire la vidéo, mais je finirai par télécharger ces vidéos sur Vimeo, d'où elles seront diffusées sur plusieurs appareils.

J'ai cherché partout et je n'ai trouvé qu'une seule solution :

ffmpeg -ss 7.3 -i myVideo.mp4 -c:v libx264 -c:a aac trimmed.mp4

Bien que cette méthode fonctionne correctement, le traitement d'un fichier de 450 Mo prend malheureusement environ 45 minutes. J'ai environ 800 vidéos similaires à éditer (qui ont toutes la même intro qui doit être coupée) et je me demandais s'il y avait un moyen d'obtenir le niveau de précision de la milliseconde sans créer un ralentissement massif du traitement ? Ou peut-être pourrais-je résoudre ce problème en utilisant un ordinateur plus rapide ? Je suis ouvert à toutes les idées, merci beaucoup pour votre aide !

Voici la sortie de la ligne de commande non coupée de mon deuxième commande :

ffmpeg -i myVideo.mp4 -ss 7.3 -c copy trimmed.mp4
ffmpeg version N-94576-g1965161ef6 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9.1.1 (GCC) 20190807
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
  libavutil      56. 33.100 / 56. 33.100
  libavcodec     58. 55.100 / 58. 55.100
  libavformat    58. 31.101 / 58. 31.101
  libavdevice    58.  9.100 / 58.  9.100
  libavfilter     7. 58.100 /  7. 58.100
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'myVideo.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: mp41mp42isom
    creation_time   : 2019-07-18T19:40:35.000000Z
  Duration: 00:03:37.25, start: 0.000000, bitrate: 20007 kb/s
    Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 126 kb/s (default)
    Metadata:
      creation_time   : 2019-07-18T19:40:35.000000Z
      handler_name    : Core Media Audio
    Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 19864 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 60k tbc (default)
    Metadata:
      creation_time   : 2019-07-18T19:40:35.000000Z
      handler_name    : Core Media Video
Output #0, mp4, to 'trimmed.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: mp41mp42isom
    encoder         : Lavf58.31.101
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 19864 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 30k tbc (default)
    Metadata:
      creation_time   : 2019-07-18T19:40:35.000000Z
      handler_name    : Core Media Video
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 126 kb/s (default)
    Metadata:
      creation_time   : 2019-07-18T19:40:35.000000Z
      handler_name    : Core Media Audio
Stream mapping:
  Stream #0:1 -> #0:0 (copy)
  Stream #0:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 6271 fps=2425 q=-1.0 Lsize=  523124kB time=00:03:29.93 bitrate=20412.9kbits/s speed=81.2x
video:519589kB audio:3357kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.034075%

0voto

slhck Points 209720

Lorsque vous coupez une vidéo avec la fonction de copie de flux binaire ( -c copy ), vous ne pouvez pas couper à des dates arbitraires. Une vidéo ne peut être coupée qu'à des images clés (intra frames ou I-frames), car ces images ne nécessitent pas la présence d'autres images dans le flux binaire pour être décodées.

Ce que ffmpeg fera, c'est qu'il inclura toutes les images nécessaires pour que l'image au point que vous avez spécifié (7,2 s) soit décodable. Cela signifie que votre vidéo coupée pourrait contient autant d'images que l'original. ffmpeg attribuera cependant à ces images un timestamp négatif afin qu'elles ne soient pas affichées - tous les lecteurs ne respectent pas cette règle. Cela peut entraîner des problèmes de synchronisation A/V.

Quoi qu'il en soit, la seule méthode pour obtenir une précision totale est de réencoder la vidéo, comme vous l'avez montré dans votre deuxième commande. La seule façon d'accélérer le processus est d'utiliser un CPU plus rapide, d'utiliser un encodeur GPU plus rapide (par exemple NVENC si vous avez un GPU NVIDIA pris en charge), ou de permettre à l'encodeur de désactiver certaines fonctionnalités, ce qui rendra le fichier de sortie un peu plus volumineux (l'encodage sera moins efficace). Voir la page Guide d'encodage H.264 pour plus d'informations. Exemple :

ffmpeg -ss 7.3 -i myVideo.mp4 -c:v libx264 -preset faster -c:a aac trimmed.mp4

Les -preset peut être réglée sur d'autres préréglages en fonction de la patience dont vous disposez pour l'encodage.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X