ruby
1require 'twitter' 2require 'open-uri' 3require 'streamio-ffmpeg' 4 5twitter_client = Twitter::REST::Client.new do |config| 6 config.consumer_key = ENV['TWITTER_CONSUMER_KEY'] 7 config.consumer_secret = ENV['TWITTER_CONSUMER_SECRET'] 8 config.access_token = ENV['TWITTER_ACCESS_TOKEN'] 9 config.access_token_secret = ENV['TWITTER_ACCESS_SECRET'] 10end 11 12tweet_content = "・・・" 13movie_url = "https:/・・・" 14p local = File.new(open(movie_url)) 15p local.size 16movie = FFMPEG::Movie.new(local.path) 17movie.transcode("tmp/movie.mp4", %w(-t 00:02:00.00 -c copy)) 18p mov = File.new(open("tmp/movie.mp4")) 19p mov.size 20init_request = Twitter::REST::Request.new(twitter_client, :post, "https://upload.twitter.com/1.1/media/upload.json", { command: 'INIT', total_bytes: mov.size, media_type: 'video/mp4', media_category: 'tweet_video' }).perform 21until mov.eof? 22 base64_chunk = Base64.encode64(mov.read(5_000_000)) 23 base64_chunk.delete("\n") 24 seg ||= -1 25 Twitter::REST::Request.new(twitter_client, :post, "https://upload.twitter.com/1.1/media/upload.json", { command: 'APPEND', media_id: init_request[:media_id], media_data: base64_chunk, segment_index: seg += 1, key: :media }).perform 26end 27mov.close 28Twitter::REST::Request.new(twitter_client, :post, "https://upload.twitter.com/1.1/media/upload.json", { command: 'FINALIZE', media_id: init_request[:media_id] }).perform 29twitter_client.update(tweet_content, media_ids: init_request[:media_id])
以上はRailsで、外部サイトのmp4を一時的にローカルに展開して、ffmpegで動画の時間を切り出し(Twitterに投稿する動画は140秒以下という制限があるため。)Twitter gemのINIT、APPEND、FINALIZEにて動画をアップロードし、投稿できるようにmedia_idを取得。
最後にupdateで投稿するというコードです。
しかし、以下のエラーが出てしまいエラーの原因がわかりません。
error
1#<Twitter::Error::BadRequest: Not valid video>
#<File:/var/folders/8s/5mzgwvks1pgg5pcswk0qpbv80000gn/T/open-uri20210629-76193-15yrwh1> 31120633 I, [2021-06-29T10:36:16.440604 #74369] INFO -- : Running transcoding... ["/usr/local/bin/ffmpeg", "-y", "-i", "/var/folders/8s/5mzgwvks1pgg5pcswk0qpbv80000gn/T/open-uri20210629-74369-9k8g4y", "-t", "00:02:00.00", "-c", "copy", "tmp/movie.mp4"] I, [2021-06-29T10:36:16.805879 #74369] INFO -- : Transcoding of /var/folders/8s/5mzgwvks1pgg5pcswk0qpbv80000gn/T/open-uri20210629-74369-9k8g4y to tmp/movie.mp4 succeeded #<File:tmp/movie.mp4> 22951395
とあるので、movie.transcodeまでは成功していそうなので、Twitter gemの周りだとは思うのですが、、、
参考にしたサイト:
・rails内でのffmpegの利用
・twitter gemのINIT、APPEND、STATUS
・140秒動画
・ソースコード
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。