12

FFMpeg のドキュメントと多くのフォーラムを確認したところ、.MP4 ビデオから字幕を抽出するための正しいコマンドラインは次のようになります。

ffmpeg -i video.mp4 -vn -an -codec:s:0 srt out.srt

ただし、次のエラーが表示されるため、これが実現可能かどうか疑問に思います。

出力ストリーム #0:0 のエンコーダを開くときにエラーが発生しました - bit_rate、rate、width、height などのパラメータが正しくない可能性があります

を使用してffmpeg -codecs、ffmpeg が subrip 字幕をエンコードできることを確認できます。

を使用ffmpeg -i video.mp4すると、ビデオに 2 つの字幕トラックが埋め込まれていることがわかります。

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
...
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 720x572 [SAR 64:45 DAR 256:143], 1341 kb/s, 25 fps, 25 tbr, 90k tbn, 180k tbc
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s
Stream #0:2(fra): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s
Stream #0:3(eng): Subtitle: dvd_subtitle (mp4s / 0x7334706D)
Stream #0:4(und): Subtitle: mov_text (text / 0x74786574)

編集

コメントに示されている簡略化されたコマンドラインでテストしましたが、それでも同じエラーが発生します。コマンドの実行による詳細な詳細出力へのリンクを次に示します。結果の出力でメタデータとチャプタを完全に無効にしようとしましたが、それでも同じエラーが発生します。

4

3 に答える 3

23

なぜ成功しなかったのか、私はたまたま次のように考えました。

ソースビデオの字幕がテキストベースの表現でエンコードされている場合、指定されたコマンドラインはまったく問題ありません。ただし、コマンドラインへの出力でわかるようにffmpeg -i、字幕は「dvd_subtitle」形式でエンコードされています。

dvd_subtitle 形式は、ビデオの各字幕のビットマップを格納します。したがって、ffmpeg がビットマップをテキストに変換できる方法はありません。

このタスクでは、各サブタイトルをビットマップ表現からテキストとして識別するタスクでユーザーを支援する OCR ベースのソフトウェアに頼る必要があります。

(ソースビデオにはテキストベースのサブタイトルがありますが、それがどこから来たのかはわかりませんし、ほとんどの人気のあるプレーヤーには表示されません。すべての意図と目的から、この「mov_text」サブタイトルはスタブ プレースホルダーのようです。 、おそらく元の DVD からの変換のアーティファクト)

于 2014-01-02T16:52:05.723 に答える
4

参考までに (まだ担当者のためコメントできません)、MP4 から SRT を抽出すると、通常の SRT ではなく MOV_Text としてフォーマットされたファイルになります。それはまだ追加されて動作しますが、mp4 を m4v に変更するようなものです。通常は機能しますが、コード内では同じようには機能しません。Mov_text は、フォント/サイズなどを手動で調整するには恐ろしいものです。最善の策は、Web から SRT をダウンロードしてテストすることです!

これは機能しますが、mov_text でコード化された srt ファイルになります。

ffmpeg -i in.mp4 out.srt
于 2015-10-15T05:59:19.353 に答える