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

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

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

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

Q&A

1回答

7350閲覧

コーデック無しの動画ファイルをあとからエンコードする

ponny23

総合スコア10

FFmpeg

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

0グッド

0クリップ

投稿2018/11/11 14:40

編集2022/01/12 10:55

前提・実現したいこと

動画処理の初心者です。

エンコードなしの無劣化ファイルの保持と、エンコード負荷による電気代の節約を実現するため、
動画ファイルの生成とエンコード処理を別の過程として扱いたいです。

具体的には、ffmpegによってスクショの動画のファイルを生成し、
そのファイルをh264エンコードをします。

1.エンコードなしの無劣化ファイルの生成

width=横幅 height=縦幅 position_x=画面左上からの横座標 position_y=画面左上からの縦座標 ffmpeg -f x11grab -show_region 1 -s "$width"x"$height" -r 30 -i :0.0+"$position_x","$position_y" -vcodec copy -acodec copy -t $time test.mp4

2.originファイルに対するエンコード処理

ffmpeg -i test.mp4 -vcodec copy -acodec copy test-out.mp4

発生している問題・エラーメッセージ

上記の2.エンコード処理をすると、以下のエラーがでる。

Decoder (codec none) not found for input stream #0.0

しかし、vcodecをlibx264にすると、正しく再生できる。ただし、cpu使用率が増えるので、動画生成時はエンコード処理をしたくない。

試したこと

自分はまだ動画ファイルの仕組みを理解しきれていませんが、
エラー文のcodec noneより、はじめにエンコーディング?codec?を指定しないと、
動画ファイルは読み込めないのかなと思いました。

そこで、codec判定法として、このサイトより、

ffprobe -v error -select_streams v:0 -show_entries stream=codec_name \ -of default=noprint_wrappers=1:nokey=1 test.mp4

をやると、unknownと表示されます。一方、はじめに -vcodec libx264としたファイルはh264となります。
つまり、はじめにcodecを指定しないと動画ファイルは破損したも同じということのようです。

補足情報(FW/ツールのバージョンなど)

ffmpeg

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

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

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

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

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

guest

回答1

0

-vcodec copy -acodec copy

これは映像コーデック変換なし、音声コーデック変換なしですので、「1.エンコードなしの無劣化ファイルの生成」には無効なオプションです。

無劣化(非圧縮)にしたければ、しかるべきパラメータを指定されるべきかと。

投稿2018/11/12 02:36

yukky1201

総合スコア2751

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

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

ponny23

2018/11/14 12:39 編集

つまり、映像コーデック変換を必ず指定し、その中で、無劣化として、非圧縮か可逆圧縮を選択すべきということですね? 自分は電気代節約のため、圧縮等の高負荷処理は別の過程として行うつもりです。 その場合は、低負荷の設定にした可逆圧縮処理か、そのままの非圧縮にすればよいと思いますが、 このサイト http://aviutl.info/ko-dekku-tigai/#i-2 を見ると、 非圧縮はコーデックなしで拡張子.aviのようです。(自分は.mp4だから処理できなかったのか!?) -vcodec copy -acodec copy は映像コーデック変換なし、音声コーデック変換なしなので、非圧縮のつもりですが、なぜだめですか? つまりは、どのコーデックを選ぶべきなのでしょうか?
ponny23

2018/11/14 12:50 編集

https://stackoverflow.com/questions/41047570/how-to-force-ffmpeg-not-to-compress-video-stream これを見ると、最終的に目的が非圧縮の実現から処理負荷の低減に変わってます。 自分は、始めの動画ファイル生成時に、 ・無劣化 ・負荷の低減 を実現したいです。リンク先からは、 -vcodec libx264 -preset ultrafast -crf 0 にしておけば、エンコードありのロスレスで最小の負荷を実現できそうです。 しかし、それよりも負荷を下げたいので、とにかくエンコードはなしの 完全非圧縮にしたいのです。
yukky1201

2018/11/15 01:23

originファイル生成のときに、映像コーデックと音声コーデックを指定しましょうと言っています。 生成のときにcopyを指定しても、何もコーデックを指定していないのでいわゆるnullになるので、正常なファイルが作成できないのでは?という指摘です。 非圧縮にしたければ下記のあたりを指定すればよろしいかと。 -vcodec rawvideo -acodec pcm_s16le >つまり、映像コーデック変換を必ず指定し、その中で、無劣化として、非圧縮か可逆圧縮を選択すべきということですね? 無劣化とはファイルAからファイルBに変換するときに何もしないことを言います(これがcopyパラメータ)。ファイルA(h264)→ファイルB(非圧縮)への変換は無劣化とは言いません。 >非圧縮はコーデックなしで拡張子.aviのようです。 言い方が正しくないかもしれませんが、非圧縮は非圧縮コーデックを選択しています。「なし」というわけではありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問