Impossible de concaténer des vidéos ffmpeg

9

J'ai une image bitmap que j'aimerais concaténer au début de nombreuses vidéos comme une sorte d'écran de titre ou d'écran d'avertissement.

J'essaie de le transformer en une vidéo avec les mêmes attributs que le reste de la vidéo. Alors d'abord, j'introspecte la vidéo:

ffmpeg version 2.2.1 Copyright (c) 2000-2014 the FFmpeg developers
  built on Apr 11 2014 22:50:38 with Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.2.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
  libavutil      52. 66.100 / 52. 66.100
  libavcodec     55. 52.102 / 55. 52.102
  libavformat    55. 33.100 / 55. 33.100
  libavdevice    55. 10.100 / 55. 10.100
  libavfilter     4.  2.100 /  4.  2.100
  libavresample   1.  2.  0 /  1.  2.  0
  libswscale      2.  5.102 /  2.  5.102
  libswresample   0. 18.100 /  0. 18.100
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'EO1.mp4':
  Metadata:
major_brand     : isom
minor_version   : 512
compatible_brands: isomiso2avc1mp41
creation_time   : 1970-01-01 00:00:00
encoder         : Lavf52.78.3
  Duration: 00:00:17.77, start: 0.000000, bitrate: 582 kb/s
Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 584x328 [SAR 1:1 DAR 73:41], 512 kb/s, 23.98 fps, 23.98 tbr, 1199 tbn, 47.96 tbc (default)
Metadata:
  creation_time   : 1970-01-01 00:00:00
  handler_name    : VideoHandler
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 64 kb/s (default)
Metadata:
  creation_time   : 1970-01-01 00:00:00
  handler_name    : SoundHandler

Ensuite, j'essaie de créer un fichier similaire:

/usr/local/Cellar/ffmpeg/2.2.1/bin/ffmpeg -y -loop 1 -i Disclaimer.png -c: v libx264 -r 23.98 -t 5 -pix_fmt yuv420p -profile: v main disclaimer.mp4

Cela semble fonctionner correctement. La vidéo joue, je m'attendrais à ce qu'il le fasse. Les attributs s'avèrent très similaires. Voici un diff:

< Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'disclaimer.mp4':
---
> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'EO1.mp4':
18,20c18,21
<     encoder         : Lavf55.33.100
<   Duration: 00:00:05.01, start: 0.000000, bitrate: 21 kb/s
<     Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 584x328 [SAR 1:1 DAR 73:41], 17 kb/s, 23.98 fps, 23.98 tbr, 19184 tbn, 47.96 tbc (default)
---
>     creation_time   : 1970-01-01 00:00:00
>     encoder         : Lavf52.78.3
>   Duration: 00:00:17.77, start: 0.000000, bitrate: 582 kb/s
>     Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 584x328 [SAR 1:1 DAR 73:41], 512 kb/s, 23.98 fps, 23.98 tbr, 1199 tbn, 47.96 tbc (default)
21a23
22a25,28
>     Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 64 kb/s (default)
>     Metadata:
>       handler_name    : SoundHandler

Mais quand j'essaye de concaténer, j'obtiens des erreurs.

> $ cat temporary.txt 

    file disclaimer.mp4
    file EO1.mp4

/usr/local/Cellar/ffmpeg/2.2.1/bin/ffmpeg -y -f concat -i temporaire.txt -c copie output.mp4

[concat @ 0x7fd880806600] Estimating duration from bitrate, this may be inaccurate
Input #0, concat, from 'temporary.txt':
  Duration: 00:00:00.02, start: 0.000000, bitrate: 17 kb/s
Stream #0:0: Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 584x328 [SAR 1:1 DAR 73:41], 17 kb/s, 23.98 fps, 23.98 tbr, 19184 tbn, 47.96 tbc
Output #0, mp4, to 'output.mp4':
  Metadata:
encoder         : Lavf55.33.100
Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 584x328 [SAR 1:1 DAR 73:41], q=2-31, 17 kb/s, 23.98 fps, 19184 tbn, 19184 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0x7fd880829a00] Non-monotonous DTS in output stream 0:0; previous: 93600, current: 5951; changing to 93601. This may result in incorrect timestamps in the output file.
[concat @ 0x7fd880806600] Invalid stream index 1
[mp4 @ 0x7fd880829a00] Non-monotonous DTS in output stream 0:0; previous: 93601, current: 6001; changing to 93602. This may result in incorrect timestamps in the output file.
[concat @ 0x7fd880806600] Invalid stream index 1
[mp4 @ 0x7fd880829a00] Non-monotonous DTS in output stream 0:0; previous: 93602, current: 6051; changing to 93603. This may result in incorrect timestamps in the output file.

...

frame=  546 fps=0.0 q=-1.0 Lsize=    1127kB time=00:00:04.90 bitrate=1882.9kbits/s    
video:1123kB audio:0kB subtitle:0 data:0 global headers:0kB muxing overhead 0.349865%

La sortie semble ne contenir que mon fichier de non-responsabilité, pas le reste de la vidéo.

Je ne comprends pas non plus pourquoi il a l'impression qu'il doit "estimer" quoi que ce soit. Il connaît le FPS d'entrée et les durées d'entrée. Je ne sais pas si c'est le problème ou non. C'est peut-être juste un bug.

Mon autre option est d'utiliser le "filtre de concaténation" mais c'est un transcodage avec perte, non? Je préfère que la deuxième vidéo soit exactement la même après la concaténation qu’avant.

Edit: a fini par essayer le "protocole" concat qui est la troisième option. Les documents découragent son utilisation mais cela a fonctionné mieux que les deux autres (démultiplexeur Concat et filtre concat).

Paul
la source
1
Curieux - pourquoi votre temps de création montre-t-il 1970?
Rajib
Notez qu'au lieu de -r 23.98vous devez utiliser -r 24000/1001ou -r ntsc-film(à moins bien sûr que l'autre vidéo ait été créée avec -r 23.98). Cela ne résoudra peut-être pas le problème actuel.
llogan
Si vous utilisez votre propre build, vous pourriez envisager d'essayer de construire une autre version significative ...
174140

Réponses:

1

Je sais que ce n'est probablement pas la réponse que vous cherchez, mais pourquoi ne pas utiliser un logiciel de montage vidéo pour ce faire? Le montage vidéo peut prendre différentes fréquences d'images, codecs, etc. et les combiner dans le format cible et il sera lisible par un logiciel ordinaire. Un certain nombre de programmes offrent le mode batch si vous devez ajouter la clause de non-responsabilité à un tas de vidéos.

Il existe des éditeurs vidéo open source gratuits et propriétaires. Je pense que ce que vous faites est bien en dehors de ce que concaténer a été conçu pour combiner essentiellement des fichiers du même type et format.

Mrbios
la source
0

Les deux vidéos doivent avoir exactement le même codage en ce qui concerne la taille de l'image, le rapport hauteur / largeur, les images par seconde et le débit binaire.

Essayez d'utiliser le convertisseur eRrightSofts Super (c). Il s'agit d'une interface graphique très étendue pour ffmpeg. Il contient également "MediaInfo", vous pouvez donc vérifier vos films pour voir s'ils sont exactement les mêmes.

Les auteurs ne revendiquent pas la paternité sauf pour l'interface graphique et accordent tout le crédit à ffmpeg etc.

Il devrait faire ce dont vous avez besoin et bien plus encore. C'est un logiciel gratuit.

Je l'ai personnellement utilisé pour joindre des fichiers, extraire de la vidéo ou de l'audio, recoder des vidéos dans différents formats. Le nom dit Super et c'est le cas.

Theunis
la source