0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FFmpegでトリミングした音声を映像と再結合する場合は再圧縮が必要

Posted at

結論

ご唱和ください。
「FFmpegでトリミングした音声を映像と再結合する場合は再圧縮が必要」

経緯

動画編集アプリを作っています。

アプリはPythonで作成しており、動画の書き出しには、Moviepyを利用していましたが、最近FFmpeg+FFmpeg-pythonに変更しました。

FFmpegに変更したので動画のトリミング機能を追加しました。
アプリでの大まかな処理の流れは次のようなものになっています。

FFmpeg動画と音声を結合する時、codecをcopy(入力と一緒)と指示することで、動画の再圧縮せずに結合することができます。(一瞬で処理が終わる)
例えばffmpeg-pythonでは次のような記述になります。

stream=ffmpeg.output( input_audio, input_video.video,out_filename,movflags='faststart',acodec='copy', vcodec='copy',format='mp4').overwrite_output()

音声のトリミングは、ffmpeg-pythonでは次のように記述することで、トリミングができます。

input_audio=(
    ffmpeg.input(audio_temp_filename)
    .filter('atrim', start=start_time, end=end_time,)
    .filter('asetpts', 'PTS-STARTPTS')
    )

この時、input_audioは 非圧縮の状態です。※ここが大事
そのため、前述の結合のスクリプトに代入しても、音声のcodecがm4aなどMP4に合った形式となっていないため、音声の結合ができませんでした
(トリミングをした場合、無音の動画が出力されていた)

なので、トリミングが行われている場合には、codecを指定し、再圧縮することで、映像に音声を結合することができます。
全体の処理は下図のようになりました。

反省

手を抜かずにFFmpegのエラーを取得し見たらすぐにわかったのだろうと思います(近道しようとして、結局遠回りした)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?