エンコードソフト ffmpeg のスレ
公式サイト http://ffmpeg.org/ どうもこれでエンコードしたら、ファイルサイズがでかくなるんだがorz >>479 inotifyでディレクトリを監視して、変換スクリプトを起動する ffmpegをコマンドラインで使用して、標準入力から各フレームをbmpで入力して 非圧縮のaviとして出力させようとしています。 そのまま出力させるとavi中のビデオコーデックが勝手にmpeg4にされてしまうので -vcodec copyを指定することで一応raw(RGB24)にすることは可能なのですが、 こんなところにcopyを使っていいのか不安になります。 -vcodec bmpではなぜ効果がないんでしょうか? 何か別のオプションで解決するんでしょうか? あ! 自己解決しました。 そうか! -vcodec bmp -i %03d.bmp output.avi ではなく、 -i %03d.bmp -vcodec bmp output.avi とすればいいんですね! そう言うのは普通、-vcodec rawvideoとか-pix_fmt bgr24とか使わんか? まあ、bmpで処理できるんならそれでもいいだろうけど image2pipe のdemuxer腐ってやがるwww mjpeg以外のコーデックだと途中まで読み込んでハネてしまうがな。こんな実装では。 ffmpegに各フレームをpipe使って入力してエンコードしようと思ったら mjpeg(JPEG)形式じゃないと現状では正常に受け付けられないね。 他のコーデックを使おうとしたら一旦前フレームをファイルに書き出して、 -f image2 を使ってファイル名ベースで指定してやるしかない。 pythonを使ってffmpegからpipe越しにvideoから1フレームずつ読み書きできるようになった。 あとは音声ストリームも処理できるようにすれば、エンコーダーとして使えるようになるな。 ffmpegには音声のチャンネルレベルでのマッピングみたいなものは無いですよね? 左チャンネルの音と右チャンネルの音を入れ替えてみたりとか 左チャンネルの音を左右両方のチャンネルから出るようにしたりとか 左チャンネルの音を左右両方のチャンネルから出るようにしたりとか。 >>487 俺は分離したあと、soxでモノラル作ってるよ。 linux使いだったら試してみー >>488 ありがとうございます。 やっぱり今のところは他のコマンドに任せるしかないですよね。 デジタル放送の、ステレオ・モノラルが切り替わる時に、 AACデコーダが追従してくれるようにできないかなぁ。 古いアナログHDDレコーダーから持ってきたVROファイルをいじってる。 352x480で保存されたMPEG2を、ffmpegで640x480のh.264にすると どうも処理がおかしい。著しく画質が落ちる。 先に640x480のイメージにしてからx264しているわけでは無いみたい。 つまり352x264を640x480に拡大したような画質になる… そういうわけで、一旦640x480のrawvideoに書きだして そっからx264しようとしたら "Invalid pixel format string '-1'” で止まる…どうしたらいいんだろう? mjpegで一時ファイル作ろうかと思ったんだけど mjpegのオプションがよくわかんなくなって煮詰まった。 ちなみに352x480のVROは、推定1TB分くらいあるはずで 現状、圧縮を先送りにしておくHDDの余裕が無い orz 異なる解像度のデータをひとつのVROに収納しているから 特定条件でしか、正常にそれを切り分けることもできないみたいだし… >>491 それって、まずピクセルのアスペクト比自体が正方形じゃないはずだから、 PC用に変換するならフィルターを掛けないといけないんじゃ。 x264にエンコードする際にも一定の難易度があるから、 まずは取り扱い易い非圧縮か可逆の動画に直して 様子を見るといいんじゃないかな。 >>491 へたに拡大するよりも、そのままの解像度でSARを20:11にして、 再生時にプレーヤー側で引き延ばした方が良いと思われ。 >>493 そう、それでrawvideo経由で出たエラーの意味がわからず中断しています。 >>494 ここでH.264にしてしまうと、そっから改めて再エンコードはしないから 例外的なアスペクトにするリスクが気になっています。 たとえば、Android端末での再生はどうだろう?とか… なにしろ、元がありえないほどひどいので ここから更に、二度の非可逆エンコードは避けたい。 SHARP HR300(80GB世代家電)の低画質録画モードだったのかな。 積ん録を家電でやるもんじゃ無いと思いましたよ。 今はPT2と中古HDUSの環境構築中 \(^o^) PT2からのTSファイルをMP4に変換しようとすると、たまに Program 103 Stream #0.0[0x100]: Video: mpeg2video (Main), yuv420p, 1920x1080...(略) Stream #0.1[0x110]: Audio: aac, 48000 Hz, stereo, s16, 255 kb/s Stream #0.2[0x130]: Audio: aac, 0 channels, s16, 352 kb/s というような、0 channels の音声ストリームを持っているものがあり、これを変換しようとすると ffmpeg がエラーで落ちることがあります。 これって対応策はあるのでしょうか。 ちなみに、-ac 2 としても変化ありません。 ffmpegの版は git-N-30551-gba91bf です。 二ヵ国語の音声だな。 パッチ作って当てるしかない。 ありがとう。そうなんですね。 パッチ作って当てる、ということなのでffmpegのオプションスイッチでは 解決できないし、パッチ自体も現状存在しないという事と理解しました。 ついでと言ってはナンですが、PT2でのTSファイルの中には、PIDの解析(?) すら終わらない (ffmpeg -i hoge.ts がハングする)のが結構あります。 HDTVtoMPEG2 とかで無変換ででも一旦通すとffmpegでも通るようになるのですが、 これもどうしようもない物なのでしょうか。 もし、ffmpegでは直接的には 処理できないとした時、Linux Nativeで動くts修正フィルターみたいなのって ありませんか。(自動化したいのでCLIで動くのが希望) >>498 -mapオプションで0.0と0.1だけ指定、0.2を無視じゃダメ? ffmpegが即落ちするtsはddで先頭削る >>498 > 解決できないし、パッチ自体も現状存在しないという事と理解しました。 2sen にある mplayer のパッチに入ってる ffmpeg/0003-add-dual-mono-support-to-ffdec_aac.patch じゃダメなのかなぁ? >>499 恥ずかしながら -map の使い方がよく判らないというのが正直な所なんです。 先の496の例では、-map 0.0:0.0 -map 0.1:0.1 とかにすれば良いのかな。 dd を使うのは思いつかなかった。 単純に188バイト削ればいいのでしょうか。 それとも、sync_byte=0x47 を見つけてそこまで削る?? (ぅ、面倒!) >>500 ぉお、既にあるのですね。 パッチ確認してみます。 お二方の情報感謝!! wine BonTsDemux.exe で分離して ffmpeg でmp4化という手もあったような。 ※長いやつを wine aviutl で mp4export するとキーフレームがなんたらかんたら で怒られるのを回避したい。 static void opt_passlogfile(const char *arg) って static void opt_passlogfile(const char *opt, const char *arg) じゃないから-passlogfileが通らないんだよね? もうこれだけで。 #! /bin/sh ffmpeg -programid $1 -i $2 -vcodec copy -acodec copy -absf aac_adtstoasc $3 >>503 とその下あたりをopt_default(opt, arg);と書き換えたら -passlogfileがちゃんと通るようになったや。 書き換える前はffmpeg2passで始まるファイルがデフォルトで -passlogfile ""を付けるとpasslogfileで始まるファイルに変わるw FFMpegって標準入力を閉じた状態でも動いて、その状態で標準入力から 何か必要になる(出力ファイルの上書き確認とか)とその時に終了する って感じの動きをするってことでいいのかな? 標準入出力周りがいろいろぐちゃぐちゃになっててよくわからない。 >>506 標準入力を閉じた後でどうやって標準入力から別のシグナルを送り込むんだよ。 使い方にもよるが、通常は引数でフォーマットの全てを指定した上で、 フレーム単位で画像を読み書きしたりする。 なのでフレーム自体はむしろRAW形式を使ったりするな。 Pythonで動画を操作するときはそうしてる。 いや、そのどうやってって状態になるまではちゃんと変換をしてくれて、 どうやってという状態になったら無い入力を待たずに死んでくれる おりこうさんだったっぽいと。 protocol pipe:がよくわからないんだけど、-i pipe:とすればstdinから読み取り、 そうでない出力ファイル名がくるところでpipe:とすればstdoutへ出力になるってことでいい? /dev/stdinや/dev/stdoutのデバイスのオープンにはならないから 移植するときに書き換える場所が減る感じで。 >>509 ソース読めばわかるが、pipeプロトコルを使用した場合、 コマンドラインで指定したファイルを単にread/writeしている。 これは低レベルなシステムコールだから バッファリングされず、Windowsでは使いものにならない。 このことはlivavの開発チームのバグトラッキングに投げておいたが、 大量のバグが修正されるに放置されたままの状況なので、 ずっとこのまんまなんだろうな……。 なんかコンテナの他にビデオやオーディオのストリームにまでcreation_timeを書き込めるみたいですが、 オプションはどう書けば良いんでしょ? ffmpegって他にffmpegが走ってないか確認して走ってたら 自分は勝手にnice 20ったりする? >>513 どうもlibx264の方でスレッドを増やしたときにそんなこともするらしい。 >>514 513はそんな事ができるLinuxはないという意味で言ってると思うの ffmpegって、『Quick Sync Video』は使えるんでしょうか??? 先頭から指定したバイト数だけ読み飛ばすオプションって無いですよね? ddか何かで先頭を読み飛ばしたデータをパイプすればいいじゃん ffmpegでtsファイルをmp4に変換してるんだけど、 動画が途中から2カ国語放送になる場合、 -acodec copy -newaudio -map 0.0 -map 0.1 -map 0.2 オプションを付けると Codec type mismatch for mapping #0.2 -> #0.2 とか言われるのですが、どうすればいいですか? ちなみに、2カ国語になった辺りを、 dd bs=188b で切り取って本体の頭に付けたら、正しく変換できませんでした。 ffmpeg で動画から微速度撮影ぽい動画を作る際今は以下のような感じで一旦画像にしてから動画に作り直しています 一気に動画から動画に変換する方法はないでしょうか? # 動画から秒1枚抜き出して画像に ffmpeg -i DOUGA.MP4 -s 1280x720 -f image2 -v codec mjpeg -r 1 "%06d.jpg" # 画像から動画に ffmpeg -r 24 -i ./%06d.jpg -vcodec mjpeg -sameq DOUGA2.avi どーしてもffmpegじゃないとダメなの? avisynthなら簡単にできるんだけど >>524 AviSynth 確認して見ましたがWindows用のようでWine でもうまく動作しないようです ffmpeg でないと駄目という事はないんですが手元のWindows環境は貧弱なのでLinux で処理したいと思っています 俺はUbuntu+wine1.3でAviSynth使ってるけど 質問です -bt <int> 映像ビットレートの変動許容幅 (in bits/s)。デフォルト=4000kbits/s * x264 の場合は、btの値/bの値 が -ratetol オプションの値として渡される。 デフォルトだとratetol=4000k/200k=20.0 この説明の通りにratetolの値を明示するには、たった-b 256kに対して-bt -5120kもの値が 必要と言う事になりますがこれは正しいでしょうか? また-btに対して-maxrateを制限する時は割合でどの程度(例えば-btの値の1.5倍や2倍等) 指定するのが妥当でしょうか? FFMPEGを名前付きパイプでデータもらおうかと思ったんだが どうも途中でシークを戻しているらしくて、正しいファイルにならず100バイトほど大きくなる上に再生出来ない。 マニュアルにも途中でシークを戻すフォーマットがあると書いてあるのでそれなのだと思う。 で、ストリーミングに向いたフォーマットは何がいいだろうか?今はlibx264&MP4でやっているのだけど やりたいことはトランスコードです。おすすめの設定かノウハウ等ありましたらご教授下さい。。 libx264&mpeg2tsでtcpに書き出してるけど特に問題ないよ。 つーかストリーミングならtsかflvだわな mp4でストリーミングって、まだ仕様が固まってないんじゃなかったっけ? mp4だとmoovの後にmoofで区切って出していければいいんだが、対応しているのって殆ど無いよね。 >>530 531 532 ありがとうございます! とりあえずtsでやってみます。 >>533 ffmpeg 用 Micosoft 版 Smooth Streaming 対応パッチなんてのもあるよ。 "ffmpegのオプションは手前から順次実行される"って聞いたんでリサイズ最後に持ってきて思ったんですが、 "-nr"オプションって複数実行出来るんでしょうか? 例えば "元のサイズで"-nr"まで処理→本命のサイズにリサイズ"って作業を "元のサイズで"-nr"まで処理→「アスペクト比率維持しての中間サイズ」にリサイズ→再度"-nr"処理 →本命のサイズにリサイズ"って作業に変更するのは無意味ですか? もしくは全ての変換処理が始まる前に意図的にディノイズを全体に掛けるような使い方は 流石に無理でしょうか? 自分の所で試すとファイルサイズと平均レートに多少変化がある見たいなんですがどうでしょうか? 気になるか? まあ、お前ごときどうせ株なんか知らんだろうし、どうにも出来んし説明してやろう。 崩壊してんのは、株取引のほうだ。 すでに年金すら韓銀砲で溶けてる。今なお溶かし続けてる。 後、多分だが金持ってる外国人や富裕層はとっくに韓国から亡命(まあ似たようなもん)してる どこまで持ちこたえるか知らんが、ウォンは貧弱だから安くなりすぎても、高くなりすぎても死亡 すると紙クズと化したウォンを、ハゲタカファンドに捨て値でおもちゃにされてゲームオーバーだ そしたらまず銀行が閉鎖されて、預金が降ろせなくなるだろうな。 そこからがパニックの引き金になるだろ、あとは想像に任せる。まあしたくもないくらい地獄だろうが 韓国がIMF入り以外で、自力で浮き上がろうとしたら、これら問題をどうにかする必要があるのだが 首脳陣がそこまで脳ミソ使ってるのかまでは、知らん。 あとそうなったらおそらく円持ってる在日強制召還。これはお前らの問題だな、日本人?復興にいそがしいからまた今度な これくらいだな、まあ後は勝手に調べてくれ。 -bt/-bのさじ加減て実数でいくつまで対応?相場は1〜4て言うけどさ ffmpegって重複するオプションでも前から順番に処理するように出来ない?試したい事あんだけど -deadzoneを-trellis 2の補佐に使えるようにならないですかね -crfだって-bの指定を多少融通してくれるじゃないですか ソフトウェア板の方では答えてもらえなかったので質問させてください オリジナルと異なるfpsで変換する時の間引き方に関して要望を出したいんですが 何処に要望を出せば良いでしょうか? >>543 メーラーの調子が悪いのかサーバーの問題なのか連絡が取れませんでした… でも助かりました、有難うございました ここ数日のgitはffaacが使い物にならない core吐いて死ぬレベル ソフトウェア板の方では答えてもらえなかったので質問させてください ffmpegを使って MP4等の動画ファイルにBGMを入れたいのですが可能でしょうか? >>546 ffmpegって編集ソフトじゃなくて変換ソフトなんで本来的にはちょっと違うんだが 無理やりやればできんこともない。 例えば、時間的長さが同じ動画ファイル movie.mp4 と 音声ファイルbgm.mp3があったら $ffmpeg -i movie.mp4 -i bgm.mp3 out.mp4 で、出力されたout.mp4ではmovie.mp4の動画に、bgm.mp3の音声が合成される。 (まぁここでビットレートとかは考えてないので他のオプションで調整は必要だが) X11grabならぬDirectXgrabができるようになればDxtoryもXsplitもなしで ffmpegひとつでPCゲームの配信ができるようになるんだが フォーラムに書き込んだらこれが実装される可能性がでてきたりするんだろうか フォーラム? MLとIRCしかないぞ あと開発者にはWindowsユーザーは一人もいないから、自分で書かないとまず無理よ 「DirectXgrab」を実装しようとしたらLFSできるくらいの知識がないと話にならなさそうだな 簡単ならとっくの昔に誰かがゲーム配信用ffmpeg+それ用のフロントエンドを作ってるだろうし GPUを使えば、エンコードが 圧倒的に速くなるわけだが、 ffmpegのGPU対応をどうなってるの? あんまりやる気が感じられないんだが。 優先度、最重要なのに cross platformがウリなんだから、そう簡単にできんだろう。 ■ エンコードジョブをキューに追加するコマンド(負荷80%以下で実行開始) $ at -q b -f encode-batch.sh NOW x264がようやくOpenCLに手を出し始めたが GPGPUってそこまで開発が難しいものなのだろうか ffmpegを使ってバッチにて変換を行っています。 一部の録画にて「720x480」を含むデータの変換でコケテしまいます。 何か良い回避方法はないものでしょうか??? -y -threads 2 -i "*****.ts" -vcodec libx264 -aspect 16:9 -s 720x480 -b 1152k -maxrate 1536k "*****.mp4" >>556 -f mp4 をつけてみる。 あとエラーメッセージをほぼ完全に晒さないとレスがつかないよ。 >>557 何を書けばいいかよく判らないけど、とりあえず。 PES packet size mismatch [mpeg2video @ 024F81E0] ac-tex damaged at 24 29 [mpeg2video @ 024F81E0] Warning MVs not available [mpeg2video @ 024F81E0] concealing 45 DC, 45 AC, 45 MV errors [aac @ 024F5D60] Input buffer exhausted before END element found Error while decoding stream #0:1: Error number -1 occurred frame= 204 fps=4.1 q=-1.0 Lsize= 29453kB time=6.81 bitrate=35446.7kb =10 drop=0 video:864kB audio:28252kB subtitle:0 global headers:0kB muxing overhead % 多分この辺りだと思うって所を抜粋してみました。 >>558 ファイルはできてると思うけど動画と音声のサイズが変なのと、ffmpeg のバージョンが古いように見える。 以下は約24分半のエンコード結果の例 frame=44021 fps= 8 q=-1.0 Lsize= 305418kB time=00:24:28.43 bitrate=1703.8kbits/s dup=13 drop=0 video:286587kB audio:17413kB global headers:0kB muxing overhead 0.466310% バージョン: ffmpeg version 0.10.2 Copyright (c) 2000-2012 the FFmpeg developers built on Mar 20 2012 04:07:59 with gcc 4.6.0 20110603 (Red Hat 4.6.0-10) >>558 最新版gitバージョンで再試験 ディストリビューション添付版なんてカビが生えてるバージョン使うんじゃないぞ 0.10系の最新版は0.10.4だ 0,11系も出てるし、git試してみてもいいんでない CUDA/OpenCLはGimp,Handbrake,VLCくらいしかOSSで対応してるのはないらしい それほどまでに難しい代物なのか。売り物の動画を扱うソフトは皆対応してるのに >>562 MPlayerでも今まで何度かパッチは送られてるんだけど、 コミッタが気に入らないから放置プレイ って何度もやってる VLCでのVAAPI対応はイマイチ デインタレース処理をVAAPIでやってくれないから片手落ち 配信は非力なlinuxでffserverで行い、エンコードは高性能なwindowsからFFMPEG_Launcherで行うということはできますか? 可能。 linux<->win間をTCPで繋げればよろし カメラから連続して出力された画像を、リアルタイムにffmpegで動画にしたいんですけど、 カメラが画像を出力する速度が明るさによって変動する(9〜30FPS)場合、ffmpeg側のオプションで変動FPSに対応することできますか? Win98(Pentium MMXなし)なマシンでH264の動画をデコードするために、このマシンで動作するffmpegをビルドするにはどうしたらいいかヒントを教えてください。 逆に質問 そのマシンであと何十年戦うつもりですか? MinGW-5.1.6(GCC-3.4.5)とmsys-1.0.10(sh.exeをbashのものと入れ替え)をインストール、ffmpeg-0.5のソースを展開。 msys上で ./configure --enable-w32threads --cpu=i586 --disable-mmx --disable-sse --enable-memalign-hack 後 各サブディレクトリでmakeしたあと親ディレクトリでmake、でできた。 あとWin98では、ffmpegでrawvideoにデコードしたaviファイル再生にはyuvcodecsが必要でした。 ffmpegであるflvファイルから、映像をrawvideoコーデックのaviファイルに、音声をwavファイルに同時に切り出したいんだけど、 ffmpeg -i hoge.flv -f avi -vcodec rawvideo hoge.avi hoge.wav とすると「音声付きの」aviファイルとwavファイルが出来てしまうし、-anオプションを使うとwavファイルに含まれるストリームがないといってエラーになってしまう。 なにかいい方法はないかな? ubuntu12.04を入れなおしてffmpeg最新版をgitからmake installかけて入れたのはいいけど、ffmpeg-phpって使えなくなったの? phpize->configureからのmakeで ffmpeg-php.c:94:5: warning: implicit declaration of function 'avcodec_init' [-Wimplicit-function-declaration] なんてエラーが出てくるし、ぐぐったら「ffmpeg-phpとかクソ古いしそんなの使わないでexec叩いて結果持ってこいよバーカ」みたいな記事しか見つからないんだが。 ffmpeg version 1.2.1 ×ts -> ts にシェイプする速度が残念なくらいにゆっくりになった。 ×mp4 640x360 25fps でのエンコードでセグメンテーション違反でたまに落ちる。 ◎mp4 へのエンコードは1〜2割速くなった。 >>553 ■ エンコードジョブをキューに追加するコマンド $ echo "encode-script.sh hogehoge.ts"|at -q b now ttp://ffmpeg.org/ffmpeg.html#Optionsを調べたのですがファイルの種類の変換はあったのですが、圧縮方法は見つけれませんでした。 hoge.mp4(300MB)ぐらいのファイルがあり、それを音声の質はなるべく落とさずにサイズを出来れば100~50MBぐらいに圧縮したいと思っています。 中の映像はパワーポイントのスライドなので多少質が下がっても読めれば問題ないのですが。 ffmpeg -i input.mp4 -vcodec msmpeg4v2 -acodec copy output.mp4 を見つけたのですが、音声の質などはどうなんでしょうか? >>576 そのコマンドだと音声は変わらない モノラルにするとか、ビットレート落とすとかしないと >>576 ffmpeg -i hoge.mp4 の結果を晒してくれ。 >>577 なるほど。ビットレードですか。調べてみます。 >>578 了解です。 ffmpeg version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers built on Apr 2 2013 17:00:59 with gcc 4.6.3 *** THIS PROGRAM IS DEPRECATED *** This program is only provided for compatibility and will be removed in a future release. Please use avconv instead. Seems stream 1 codec frame rate differs from container frame rate: 1200.00 (1200/1) -> 30.00 (30/1) Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2013_02_20.mp4': Metadata: major_brand : mp42 minor_version : 1 compatible_brands: mp42avc1 creation_time : 2013-02-20 07:22:40 Duration: NY:AN:NY.AN, start: 0.000000, bitrate: 425 kb/s Stream #0.0(eng): Audio: aac, 32000 Hz, mono, s16, 63 kb/s Metadata: creation_time : 2013-02-20 07:22:40 Stream #0.1(eng): Video: h264 (Main), yuv420p, 1024x768, 360 kb/s, 3.02 fps, 30 tbr, 600 tbn, 1200 tbc Metadata: creation_time : 2013-02-20 07:22:40 At least one output file must be specified アスペクト比は、オリジナルのままなら適宜修正して下さい。 ffmpeg -i hoge.mp4 -f mp4 -vcodec libx264 -vsync 1 -map 0:1 -r 2 -aspect 16:9 -s 1024x576 -vb 256k -bufsize 5000k -bt 1024k -maxrate 3M -map 0:0,0:1 -acodec aac -strict experimental -ac 1 -ar 32000 -ab 32000 -y shaped-hoge.mp4 read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる