Lors du fractionnement de MP4 avec ffmpeg, comment puis-je inclure des métadonnées?


8

J'ai quelques MP4 que je veux télécharger sur mon compte Flickr, mais ils ont une taille maximale de 500 Mo, car le mien n'est que de 550, je prévoyais de les diviser en deux, puis de les télécharger, mais je veux m'assurer que toutes les méta les données sont incluses, mais elles ne semblent pas l'être. J'ai essayé chacune des solutions suivantes sans succès (à la fin de ce post, j'ai les sorties ffprobe originales et nouvelles):

ffmpeg -ss 00:00:00.00 -t 00:04:19.35 -i SANY0069.MP4 -acodec copy -vcodec copy -map_metadata 0:0 SANY0069A.MP4

ffmpeg -ss 00:00:00.00 -t 00:04:19.35 -i SANY0069.MP4 -acodec copy -vcodec copy -map_meta_data SANY0069.MP4:SANY0069A.MP4 SANY0069A.MP4

avec celui-ci, j'ai produit manuellement les balises META individuelles que j'ai prises à partir de cette commande

ffmpeg -i SANY0069A.MP4 -f ffmetadata meta.txt
ffmpeg -ss 00:00:00.00 -t 00:04:19.35 -i SANY0069.MP4 -acodec copy -vcodec copy -metadata major_brand="mp42" -metadata minor_version="1" -metadata compatible_brands="mp42avc1" -metadata creation_time="2012-09-29 09:05:50" -metadata comment="SANYO DIGITAL CAMERA CA9" -metadata comment-eng="SANYO DIGITAL CAMERA CA9" SANY0069A.MP4

en utilisant la sortie de l'ancienne commande, j'ai également essayé ceci:

ffmpeg -ss 00:00:00.00 -t 00:04:19.35 -i SANY0069.MP4 -acodec copy -vcodec copy -f ffmetadata -i meta.txt SANY0069A.MP4 

Sortie: exemple de sortie de ma première commande:

ffmpeg -ss 00:00:00.00 -t 00:04:19.35 -i SANY0069.MP4 -acodec copy -vcodec copy -map_metadata 0:0 SANY0069A.MP4
ffmpeg version 0.8.12, Copyright (c) 2000-2011 the FFmpeg developers
  built on Jun 13 2012 09:57:38 with gcc 4.6.3 20120306 (Red Hat 4.6.3-2)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --enable-bzlib --enable-libcelt --enable-libdc1394 --enable-libdirac --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab --enable-avfilter --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
  libavutil    51.  9. 1 / 51.  9. 1
  libavcodec   53.  8. 0 / 53.  8. 0
  libavformat  53.  5. 0 / 53.  5. 0
  libavdevice  53.  1. 1 / 53.  1. 1
  libavfilter   2. 23. 0 /  2. 23. 0
  libswscale    2.  0. 0 /  2.  0. 0
  libpostproc  51.  2. 0 / 51.  2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'SANY0069.MP4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: mp42avc1
    creation_time   : 2012-09-29 09:05:50
    comment         : SANYO DIGITAL CAMERA CA9
    comment-eng     : SANYO DIGITAL CAMERA CA9
  Duration: 00:08:38.71, start: 0.000000, bitrate: 9142 kb/s
    Stream #0.0(eng): Video: h264 (Constrained Baseline), yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 9007 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc
    Metadata:
      creation_time   : 2012-09-29 09:05:50
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s
    Metadata:
      creation_time   : 2012-09-29 09:05:50
File 'SANY0069A.MP4' already exists. Overwrite ? [y/N] y
Output #0, mp4, to 'SANY0069A.MP4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: mp42avc1
    creation_time   : 2012-09-29 09:05:50
    comment         : SANYO DIGITAL CAMERA CA9
    comment-eng     : SANYO DIGITAL CAMERA CA9
    encoder         : Lavf53.5.0
    Stream #0.0(eng): Video: libx264, yuv420p, 1280x720 [PAR 1:1 DAR 16:9], q=2-31, 9007 kb/s, 30k tbn, 29.97 tbc
    Metadata:
      creation_time   : 2012-09-29 09:05:50
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, 127 kb/s
    Metadata:
      creation_time   : 2012-09-29 09:05:50
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press [q] to stop, [?] for help
frame= 7773 fps=4644 q=-1.0 Lsize=  289607kB time=00:04:19.35 bitrate=9147.4kbits/s    
video:285416kB audio:4033kB global headers:0kB muxing overhead 0.054571%

et enfin, quand je compare la ffprobe de l'original et la première partie split, j'obtiens les 2 sorties suivantes: original

ffprobe version 0.8.12, Copyright (c) 2007-2011 the FFmpeg developers
  built on Jun 13 2012 09:57:38 with gcc 4.6.3 20120306 (Red Hat 4.6.3-2)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --enable-bzlib --enable-libcelt --enable-libdc1394 --enable-libdirac --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab --enable-avfilter --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
  libavutil    51.  9. 1 / 51.  9. 1
  libavcodec   53.  8. 0 / 53.  8. 0
  libavformat  53.  5. 0 / 53.  5. 0
  libavdevice  53.  1. 1 / 53.  1. 1
  libavfilter   2. 23. 0 /  2. 23. 0
  libswscale    2.  0. 0 /  2.  0. 0
  libpostproc  51.  2. 0 / 51.  2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'SANY0069.MP4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: mp42avc1
    creation_time   : 2012-09-29 09:05:50
    comment         : SANYO DIGITAL CAMERA CA9
    comment-eng     : SANYO DIGITAL CAMERA CA9
  Duration: 00:08:38.71, start: 0.000000, bitrate: 9142 kb/s
    Stream #0.0(eng): Video: h264 (Constrained Baseline), yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 9007 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc
    Metadata:
      creation_time   : 2012-09-29 09:05:50
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s
    Metadata:
      creation_time   : 2012-09-29 09:05:50

Divisé

ffprobe version 0.8.12, Copyright (c) 2007-2011 the FFmpeg developers
  built on Jun 13 2012 09:57:38 with gcc 4.6.3 20120306 (Red Hat 4.6.3-2)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --enable-bzlib --enable-libcelt --enable-libdc1394 --enable-libdirac --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab --enable-avfilter --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
  libavutil    51.  9. 1 / 51.  9. 1
  libavcodec   53.  8. 0 / 53.  8. 0
  libavformat  53.  5. 0 / 53.  5. 0
  libavdevice  53.  1. 1 / 53.  1. 1
  libavfilter   2. 23. 0 /  2. 23. 0
  libswscale    2.  0. 0 /  2.  0. 0
  libpostproc  51.  2. 0 / 51.  2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'SANY0069A.MP4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf53.5.0
    comment         : SANYO DIGITAL CAMERA CA9
  Duration: 00:04:19.37, start: 0.000000, bitrate: 9146 kb/s
    Stream #0.0(eng): Video: h264 (Constrained Baseline), yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 9015 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00

Je sais que c'est incroyablement long mais c'est en fait une question assez simple. J'ai pensé qu'il serait préférable de fournir autant de détails que possible.

tout conseil ici serait super,

Merci


1
Les questions longues et détaillées sont bien meilleures que l'inverse, et il est bon de ne pas avoir à demander la sortie de la console ffmpeg.
llogan

Ouais, je le pensais, je ne suis pas exactement un noob linux donc j'ai pensé que c'était l'information dont toute personne qui pourrait réellement aider aurait besoin.
Josh

Je viens de regarder cela brièvement, mais je crois que tout sauf creation_time(sauf si cela est omis) et commentsont automatiquement définis. Le comportement de creation_timesemble varier entre 0.8.12et ffmpeg actuel de Git; il ne semble pas l'ajouter / le copier à moins que je ne l'inclue. Je n'ai pas fait référence au code, mais ne pas copier creation_timelorsque la copie de flux peut ou non être considérée comme un bug en fonction de la personne à qui vous demandez.
llogan

Je pense que la façon dont il se comporte sur mon système serait considérée comme un bug par tous, s'il ne copie pas l'heure de création à partir de la vidéo d'origine, ne devrait-il pas régler l'heure de création sur le présent? Autrement dit, au lieu du 1/1/1970 (l'époque?). De plus, les marques major_brand, minor_version et compatible_brands ne devraient-elles pas être les mêmes si j'utilisais le codec "copie"? de même avec l'encodeur étant réglé?
Josh

Réponses:


2

FFmpeg devrait transférer automatiquement les métadonnées (essayez donc sans -map_metadataet voyez si cela fonctionne), mais si ce n'est pas le cas, vous devriez essayer d'utiliser -map_metadata 0plutôt que -map_metadata 0:0- le :0il fait référence au premier flux de données (probablement la vidéo), et ffmpeg pourrait essayer pour copier uniquement les métadonnées spécifiques au flux, plutôt que celles du fichier entier.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.