質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

FFmpeg

FFmpegは、動画と音声を交換できるフリーソフトウェアです。UNIX系OSから派生した、MS-DOSから操作するコマンドラインツールです。libavcodecやlibavformat、libswscale、libavfilterなどを含みます。ライセンスは、コンパイルの際のオプションによりLGPLもしくはGPLに決定されます。対応コーデックや使用できるオプションが多く、幅広く利用されています。

Q&A

0回答

2708閲覧

python、ffmpegを使いサイズの違う複数のmp4ファイル(映像、音声)を結合させたい場合

dd_

総合スコア111

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

FFmpeg

FFmpegは、動画と音声を交換できるフリーソフトウェアです。UNIX系OSから派生した、MS-DOSから操作するコマンドラインツールです。libavcodecやlibavformat、libswscale、libavfilterなどを含みます。ライセンスは、コンパイルの際のオプションによりLGPLもしくはGPLに決定されます。対応コーデックや使用できるオプションが多く、幅広く利用されています。

0グッド

0クリップ

投稿2021/11/14 09:15

編集2021/11/14 18:17

やりたい事

python、ffmpegを使用して
サイズの違う複数の動画(音声、映像)自動で結合させたい

やった事

こちらのサイトを参照して作業を進めてみました
https://blog.shikoan.com/ffmpeg-python-concat/

まずはフォルダ、ファイルの用意をしていきます。

movie_conbine media hoge1.mp4 hoge2.mp4 hoge3.mp4 ... hoge15.mp4 a.py

実際のmp4ファイルの名前はhogeではありません。
こんな感じで用意してみました。

a.pyに下のコードを書き込みます。

python

1 2from tqdm import tqdm 3import ffmpeg 4import glob 5 6# videos = sorted(glob.glob("movei_combine\media*.mp4")) 7videos = glob.glob("movei_combine\media*.mp4") 8 9# 一旦テキストファイルに書き出す 10# 書き出さない方法は、あまりにファイル数が多い場合に「コマンド長すぎ」と怒られる 11with open("tmp.txt", "w") as fp: 12 lines = [f"file '{line}'" for line in videos] # file 'パス' という形式にする 13 fp.write("\n".join(lines)) 14# ffmpegで結合(再エンコードなし) 15ffmpeg.input("tmp.txt", f="concat", safe=0).output("out.mp4", c="copy").run()

こちらを実行すると
ターミナルには下の画像の様な実行結果が出ます
イメージ説明

そして、movie_conbineフォルダ内に
新たにtmp.txtとout.mp4のファイルが作成されます。

movie_conbine media hoge1.mp4 hoge2.mp4 hoge3.mp4 ... hoge15.mp4 a.py out.mp4 tmp.txt

out.mp4 を開いてみると
最初の動画しか流れず
最初の動画の最後シーンでフリーズして
二個目以降は音声だけだったり、
途中で音声も流れなくなってしまいました。

調べた事

python 動画結合
python 動画結合 複数
とかでググり


openCVで動画を結合しようとしたのですがうまくいかず
teratailで質問をさせて頂いたところ
動画ファイルの「リサイズ」が必要との回答を頂きました。
https://teratail.com/questions/366379


openCVではなく
ffmpegでも動画の結合を無劣化で出来るという事で
ffmpegの動画結語をさせるコマンドを

ffmpeg -f concat -i indexfile.txt -c copy output.mp4

ffmpeg -safe 0 -f concat -i indexfile.txt -c:v copy -c:a copy -map 0:v -map 0:a output.mp4

をコマンドプロンプト上で実行しても
どっちも結果は同じでした。(今回のやった結果と)


そして今回の
pythonファイル上でffmegをやってみてうまくいかず
こちらに質問させて頂いた次第です。

質問

ffmpegの作業でも動画のリサイズは必要でしょうか?
何かすべきことやヒントなどあれば教えて頂けると幸いです。

もし、ffmpegでも動画のリサイズが必要であれば
また、調べて出直してきます。

追記

ffmpeg のバージョンは
ffmpeg version 4.4.1-essentials_build-www.gyan.dev Copyright (c) 2000-2021 the FFmpeg developers

OSはWindows10になります。

ーー 複数個あるmp4ファイルのコーデック、フレームレート ーー
コーデックは全て同じでした。
ビデオコーデック   avc1
オーディオコーデック 2 / 40 / mp4a-40-2

フレームレートは
合計15個ファイルがあり
最初の動画だけ 25.00 フレーム/秒
その他11個は  30.00 フレーム/秒
あと3つは   29.97 フレーム/秒
でした。

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/11/14 10:25

> ffmpegの動画結語をさせるコマンドをコマンドプロンプト上で実行しても結果は同じでした。(今回のやった結果と) 実際に打ったコマンドは何でしょうか? > ffmpegの作業でも動画のリサイズは必要でしょうか? しなくても出来た気がします。(あいまいですが意図せず変な動画が出来上がったような記憶があります) ところでOS、ffmpegのバージョン等は何でしょうか?(質問に追記してください)
dd_

2021/11/14 11:17

meg_様 ご質問ありがとうございます。 コマンドプロンプト上で実際に打ったコマンドと OS、ffmpegのバージョンを質問内に追記させていただきました。
meg_

2021/11/14 11:43 編集

元のファイルのコーデックは同一ですか?(-c copyは同一でないと駄目だったような気がします) またフレームレートも同一ですか?
dd_

2021/11/14 11:57

フレームレート、コーデック確認でき次第ご返事させていただきます。 少々お待ちください。。
dd_

2021/11/14 18:16

フレームレート、コーデックを追記させていただきました。
meg_

2021/11/15 00:25

問題なければ同じフレームレートにするのが良いようです。 異なるフレームレートのままが良い場合は「VFR 動画」等で調べてみてください。
dd_

2021/11/15 06:40

ありがとうございます。調べて試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問