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).
-r 23.98
vous devez utiliser -r 24000/1001
ou -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.