web-dev-qa-db-fra.com

avconv comment copier tous les flux et fusionner les métadonnées (date de création du correctif)?

J'essaie de corriger les métadonnées de certaines anciennes vidéos. J'aimerais donc copier tous les flux audio, vidéo et sous-titres et fusionner les métadonnées d'un fichier txt.

Je commence par vider les métadonnées avec: avconv -i out.mp4 -f ffmetadata metadata.txt

puis essayez de copier avec les métadonnées: avconv -i MOV_0732.mp4 -f ffmetadata -i metadata.txt -c:v copy -c:a copy -c:s copy -map 0 out.mp4

Mais les métadonnées finales sont intactes, si je déplace les arguments de métadonnées à la fin, avconv ne commence pas:

[buffer @ 0x2128d40] w:1280 h:720 pixfmt:yuv420p
[mpeg4 @ 0x2124660] Invalid pixel aspect ratio 65536/65536, limit is 255/255
Output #0, mp4, to 'out.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: isom3gp4
    creation_time   : 1947-03-24 14:12:20
    Stream #0.0(eng): Video: mpeg4, yuv420p, 1280x720 [PAR 65536:65536 DAR 16:9], q=2-31, 200 kb/s, 90k tbn, 90k tbc
    Metadata:
      creation_time   : 1947-03-24 14:12:20
    Stream #0.1(eng): Audio: [0][0][0][0] / 0x0000, 48000 Hz, mono, s16, 200 kb/s
    Metadata:
      creation_time   : 1947-03-24 14:12:20
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> mpeg4)
  Stream #0:1 -> #0:1 (aac -> libvo_aacenc)
Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
2
Paulo Lopes

Après avoir lu la documentation et de nombreuses recherches, j'ai finalement obtenu la réponse que je voulais, la dernière commande est:

avconv -i IN.mp4 -i METADATA.txt -map_metadata 1 -codec copy -map 0 OUT.mp4

Ça signifie:

  • utiliser les entrées: IN.mp4 et METADATA.txt
  • mapper les métadonnées de l'entrée 1 (METADATA.txt)
  • copier tous les codecs (sans transcodage)
  • mapper tous les flux de l'entrée 0 (IN.mp4)
  • écrire à OUT.mp4
3
Paulo Lopes