Am încercat să adaug 2 subtitrări .srt la un videoclip, dar fișierul rezultat are doar primul subtitlu. Aceasta este comanda pe care am folosit-o:
ffmpeg -i $movie.mov -i $sub_en.srt -i $sub_de.srt \ -c:v copy -c:a copy \ -c:s:0 srt -metadata:s:s:0 language=eng \ -c:s:1 srt -metadata:s:s:1 language=ger \ $output.mkv
Ieșirea completă de mai jos arată, de asemenea, că codifică doar 1 subtitrare (am înlocuit numele fișierelor lungi cu variabilele utilizate mai sus pentru claritate):
ffmpeg version 3.3.2-static http://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2017 the FFmpeg developers built with gcc 5.4.1 (Debian 5.4.1-11) 20170519 configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-5 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gray --enable-libass --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg libavutil 55. 58.100 / 55. 58.100 libavcodec 57. 89.100 / 57. 89.100 libavformat 57. 71.100 / 57. 71.100 libavdevice 57. 6.100 / 57. 6.100 libavfilter 6. 82.100 / 6. 82.100 libswscale 4. 6.100 / 4. 6.100 libswresample 2. 7.100 / 2. 7.100 libpostproc 54. 5.100 / 54. 5.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from "$movie.mov": Metadata: major_brand : qt minor_version : 0 compatible_brands: qt creation_time : 2017-08-23T15:33:19.000000Z Duration: 00:56:34.92, start: 0.000000, bitrate: 20807 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 20546 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc (default) Metadata: creation_time : 2017-08-23T15:33:20.000000Z handler_name : Core Media Data Handler encoder : H.264 timecode : 01:00:00:00 Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 255 kb/s (default) Metadata: creation_time : 2017-08-23T15:33:20.000000Z handler_name : Core Media Data Handler Stream #0:2(und): Data: none (tmcd / 0x64636D74) (default) Metadata: creation_time : 2017-08-23T15:33:20.000000Z handler_name : Core Media Data Handler timecode : 01:00:00:00 Input #1, srt, from "$sub_en.srt": Duration: N/A, bitrate: N/A Stream #1:0: Subtitle: subrip Input #2, srt, from "$sub_de.srt": Duration: N/A, bitrate: N/A Stream #2:0: Subtitle: subrip Output #0, matroska, to "$output.mkv": Metadata: major_brand : qt minor_version : 0 compatible_brands: qt encoder : Lavf57.71.100 Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 20546 kb/s, 25 fps, 25 tbr, 1k tbn, 25 tbc (default) Metadata: creation_time : 2017-08-23T15:33:20.000000Z timecode : 01:00:00:00 handler_name : Core Media Data Handler encoder : H.264 Stream #0:1(ger): Audio: aac (LC) ([255][0][0][0] / 0x00FF), 48000 Hz, stereo, fltp, 255 kb/s (default) Metadata: creation_time : 2017-08-23T15:33:20.000000Z handler_name : Core Media Data Handler Stream #0:2: Subtitle: subrip (srt) Metadata: encoder : Lavc57.89.100 srt Stream mapping: Stream #0:0 -> #0:0 (copy) Stream #0:1 -> #0:1 (copy) Stream #1:0 -> #0:2 (subrip (srt) -> subrip (srt)) Press [q] to stop, [?] for help frame=20372 fps=236 q=-1.0 Lsize= 2091417kB time=00:13:35.78 bitrate=21001.7kbits/s speed=9.45x video:2065455kB audio:25494kB subtitle:8kB other streams:0kB global headers:0kB muxing overhead: 0.022014% Exiting normally, received signal 2.
Știu că în acest caz particular pot folosi mkvmerge
, dar nu ar fi funcționează pentru subtitrări .mp4 mov_text (.ttxt) și oricum aș vrea să înțeleg ce este în neregulă cu comanda mea ffmpeg.
Răspuns
Ori de câte ori există mai multe intrări alimentate către ffmpeg și aveți nevoie de unul mai mult decât flux video / audio / subtitrare trimis la ieșire, sunt necesare instrucțiuni -map
.
ffmpeg -i $movie.mov -i $sub_en.srt -i $sub_de.srt \ -map 0:v -map 0:a -map 1 -map 2 \ -c:v copy -c:a copy -c:s srt \ -metadata:s:s:0 language=eng -metadata:s:s:1 language=ger \ $output.mkv
Deoarece subtitrările sunt SRT, puteți face doar -c:s copy
.
-map number
de 20 de ori. Aveți altă soluție?