Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 使用ffmpeg向mp4添加某种字幕_Video_Ffmpeg_Subtitle_Mpeg Dash_Ttml - Fatal编程技术网

Video 使用ffmpeg向mp4添加某种字幕

Video 使用ffmpeg向mp4添加某种字幕,video,ffmpeg,subtitle,mpeg-dash,ttml,Video,Ffmpeg,Subtitle,Mpeg Dash,Ttml,我有一个副标题(看起来确实像),但我不知道如何将它添加到我正在创建的MP4中。 首先是字幕的十六进制转储: 00000000 00 00 00 18 66 74 79 70 69 73 6f 36 00 00 00 00 |....ftypiso6....| 00000010 69 73 6f 36 64 61 73 68 00 00 00 28 66 72 65 65 |iso6dash...(free| 00000020 55 53 50 20 62 79 20 43 6f

我有一个副标题(看起来确实像),但我不知道如何将它添加到我正在创建的MP4中。 首先是字幕的十六进制转储:

00000000  00 00 00 18 66 74 79 70  69 73 6f 36 00 00 00 00  |....ftypiso6....|
00000010  69 73 6f 36 64 61 73 68  00 00 00 28 66 72 65 65  |iso6dash...(free|
00000020  55 53 50 20 62 79 20 43  6f 64 65 53 68 6f 70 11  |USP by CodeShop.|
00000030  11 11 11 11 11 11 11 11  11 11 11 11 11 11 11 11  |................|
00000040  00 00 02 1d 6d 6f 6f 76  00 00 00 6c 6d 76 68 64  |....moov...lmvhd|
00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 01  |................|
00000060  00 00 00 00 00 01 00 00  01 00 00 00 00 00 00 00  |................|
00000070  00 00 00 00 00 01 00 00  00 00 00 00 00 00 00 00  |................|
*
00000090  00 00 00 00 40 00 00 00  00 00 00 00 00 00 00 00  |....@...........|
000000a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000000b0  00 00 00 02 00 00 01 81  74 72 61 6b 00 00 00 5c  |........trak...\|
000000c0  74 6b 68 64 00 00 00 07  00 00 00 00 00 00 00 00  |tkhd............|
000000d0  00 00 00 01 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000000e0  00 00 00 00 00 00 00 00  00 00 00 00 00 01 00 00  |................|
*
00000100  00 00 00 00 00 00 00 00  00 00 00 00 40 00 00 00  |............@...|
00000110  00 00 00 00 00 00 00 00  00 00 01 1d 6d 64 69 61  |............mdia|
00000120  00 00 00 20 6d 64 68 64  00 00 00 00 00 00 00 00  |... mdhd........|
00000130  00 00 00 00 00 00 03 e8  00 00 00 00 39 84 00 00  |............9...|
00000140  00 00 00 35 68 64 6c 72  00 00 00 00 00 00 00 00  |...5hdlr........|
00000150  73 75 62 74 00 00 00 00  00 00 00 00 00 00 00 00  |subt............|
00000160  55 53 50 20 53 75 62 74  69 74 6c 65 20 48 61 6e  |USP Subtitle Han|
00000170  64 6c 65 72 00 00 00 00  c0 6d 69 6e 66 00 00 00  |dler.....minf...|
00000180  0c 73 74 68 64 00 00 00  00 00 00 00 24 64 69 6e  |.sthd.......$din|
00000190  66 00 00 00 1c 64 72 65  66 00 00 00 00 00 00 00  |f....dref.......|
000001a0  01 00 00 00 0c 75 72 6c  20 00 00 00 01 00 00 00  |.....url .......|
000001b0  88 73 74 62 6c 00 00 00  3c 73 74 73 64 00 00 00  |.stbl...<stsd...|
000001c0  00 00 00 00 01 00 00 00  2c 73 74 70 70 00 00 00  |........,stpp...|
000001d0  00 00 00 00 01 68 74 74  70 3a 2f 2f 77 77 77 2e  |.....http://www.|
000001e0  77 33 2e 6f 72 67 2f 6e  73 2f 74 74 6d 6c 00 00  |w3.org/ns/ttml..|
000001f0  00 00 00 00 10 73 74 74  73 00 00 00 00 00 00 00  |.....stts.......|
00000200  00 00 00 00 10 73 74 73  63 00 00 00 00 00 00 00  |.....stsc.......|
00000210  00 00 00 00 14 73 74 73  7a 00 00 00 00 00 00 00  |.....stsz.......|
00000220  00 00 00 00 00 00 00 00  10 73 74 63 6f 00 00 00  |.........stco...|
00000230  00 00 00 00 00 00 00 00  28 6d 76 65 78 00 00 00  |........(mvex...|
00000240  20 74 72 65 78 00 00 00  00 00 00 00 01 00 00 00  | trex...........|
00000250  01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000260  18 73 74 79 70 69 73 6f  36 00 00 00 00 69 73 6f  |.stypiso6....iso|
00000270  36 6d 73 64 68 00 00 00  28 66 72 65 65 55 53 50  |6msdh...(freeUSP|
00000280  20 62 79 20 43 6f 64 65  53 68 6f 70 11 11 11 11  | by CodeShop....|
00000290  11 11 11 11 11 11 11 11  11 11 11 11 11 00 00 00  |................|
000002a0  2c 73 69 64 78 00 00 00  00 00 00 00 01 00 00 03  |,sidx...........|
000002b0  e8 00 00 00 00 00 00 00  00 00 00 00 01 00 00 0f  |................|
000002c0  09 00 00 ea 60 90 00 00  00 00 00 00 68 6d 6f 6f  |....`.......hmoo|
000002d0  66 00 00 00 10 6d 66 68  64 00 00 00 00 00 00 00  |f....mfhd.......|
000002e0  01 00 00 00 50 74 72 61  66 00 00 00 14 74 66 68  |....Ptraf....tfh|
000002f0  64 00 02 00 02 00 00 00  01 00 00 00 01 00 00 00  |d...............|
00000300  14 74 66 64 74 01 00 00  00 00 00 00 00 00 00 00  |.tfdt...........|
00000310  00 00 00 00 20 74 72 75  6e 00 00 07 01 00 00 00  |.... trun.......|
00000320  01 00 00 00 70 00 00 ea  60 00 00 0e 99 02 80 00  |....p...`.......|
00000330  40 00 00 0e a1 6d 64 61  74 3c 3f 78 6d 6c 20 76  |@....mdat<?xml v|
00000340  65 72 73 69 6f 6e 3d 22  31 2e 30 22 20 65 6e 63  |ersion="1.0" enc|
00000350  6f 64 69 6e 67 3d 22 75  74 66 2d 38 22 3f 3e 3c  |oding="utf-8"?><|
00000360  74 74 20 78 6d 6c 6e 73  3d 22 68 74 74 70 3a 2f  |tt xmlns="http:/|
00000370  2f 77 77 77 2e 77 33 2e  6f 72 67 2f 6e 73 2f 74  |/www.w3.org/ns/t|
00000380  74 6d 6c 22 20 78 6d 6c  6e 73 3a 73 6d 70 74 65  |tml" xmlns:smpte|
00000390  3d 22 68 74 74 70 3a 2f  2f 77 77 77 2e 73 6d 70  |="http://www.smp|
000003a0  74 65 2d 72 61 2e 6f 72  67 2f 73 63 68 65 6d 61  |te-ra.org/schema|
000003b0  73 2f 32 30 35 32 2d 31  2f 32 30 31 30 2f 73 6d  |s/2052-1/2010/sm|
这会产生以下错误: 在流#2中找不到编解码器none的标记,容器中当前不支持编解码器 无法写入输出文件#0的标头(编解码器参数不正确?):参数无效

所以我试着像这样玩地图:

-地图2:s ==>给了我: 流映射“2:s”不匹配任何流。 若要忽略此项,请在映射中添加尾随“?”

-地图2:s? ==>没有错误,但字幕流没有添加到最终文件中

Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #1:0 -> #0:1 (copy)
  Stream #3:0 -> #0:2 (copy)
也许我得先把字幕转换成srt之类的,但我在谷歌上找不到这是什么类型的文件

任何帮助都将不胜感激

谢谢

---编辑---

在此,我将使用以下代码在PHP中进行转换:

  private function convert_TTML_subtitle_file($orig) {
    if ( $orig == '' || !file_exists($orig) ) {
      return false;
    }

    $f = file_get_contents($orig);
    $pos = stripos($f, '<tt xmlns="http://www.w3.org/ns/ttml"');
    if ( $pos === false ) {
      return false;
    }

    $size = strlen($f);
    $cur  = 0;
    $txt = '';
    $counter = 1;
    while ( $cur < $size ) {
#      var_dump("cur: $cur");
      $curSize = unpack('N', substr($f, $cur))[1];
#      var_dump("curSize: $curSize");
      if ( substr($f, $cur+4, 4) == 'mdat' ) {
        $xml = simplexml_load_string( substr($f, $cur+8, $curSize - 8) );
        foreach( $xml->body->div->p as $p ) {
          $txt .= "{$counter}\r\n";
          $counter++;
          $txt .= $p['begin'] . ' --> ' . $p['end'] . "\r\n";
          $txt .= $p->span . "\r\n\r\n";
        }
      }
      $cur += $curSize;
    }

    $fname = tempnam(getcwd(), 'sub');
    file_put_contents($fname, $txt);
    return $fname;
  }
private function convert\u TTML\u subtitle\u文件($orig){
如果($orig=''||!文件_存在($orig)){
返回false;
}
$f=文件获取内容($orig);
$pos=stripos($f,,.$p['end'].“\r\n”;
$txt.=$p->span.\r\n\r\n;
}
}
$cur+=$curSize;
}
$fname=tempnam(getcwd(),'sub');
文件内容($fname,$txt);
返回$fname;
}
看起来这些是字幕。FFmpeg还没有

你可以试试

ffmpeg -y -i 'audionld#24000.mp4' -i 'audionld#48000.mp4' -i 'textnld.mp4' -i 'video.mp4'
       -map 0:a -map 1:a -map 2:d -map 3:v
       -metadata:s:a:0 language=nld -metadata:s:a:1 language=nld
       -c:a copy -bsf:a aac_adtstoasc -c:v copy -c:d copy -copy_unknown -dtag stpp 
       -strict -2 -movflags faststart "test.mp4" 2>&1

但是我会尝试在内部使用mp4box。

谢谢,但我正在尝试在Linux下自动执行此操作。我将研究TTML。非常感谢您的提示!
ffmpeg -y -i 'audionld#24000.mp4' -i 'audionld#48000.mp4' -i 'textnld.mp4' -i 'video.mp4'
       -map 0:a -map 1:a -map 2:d -map 3:v
       -metadata:s:a:0 language=nld -metadata:s:a:1 language=nld
       -c:a copy -bsf:a aac_adtstoasc -c:v copy -c:d copy -copy_unknown -dtag stpp 
       -strict -2 -movflags faststart "test.mp4" 2>&1